[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/interface/service/sbp/sbp_public_utility.h b/mcu/interface/service/sbp/sbp_public_utility.h
new file mode 100644
index 0000000..cf10b33
--- /dev/null
+++ b/mcu/interface/service/sbp/sbp_public_utility.h
@@ -0,0 +1,1656 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ * sbp_public_utility.h
+ *
+ * Description:
+ * ------------
+ *   This file is intends for put the header of SBP public API
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+*****************************************************************************/
+
+#ifndef _SBP_PUBLIC_UTILITY_H
+#define _SBP_PUBLIC_UTILITY_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "sim_exported_enum.h"
+
+#define SBP_ID_INVALID 0xffffffff
+#define SBP_SIM_SLOT_ID_INVALID 0xff
+
+
+/*****************************************************************************
+* DESCRIPTION
+*   This enum is defined for Single Binary Platform (SBP) features
+*   NVRAM saves one binary value for each feature
+*****************************************************************************/
+typedef enum
+{
+//Please add SBP features in sbp_feature.def
+
+#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)
+
+#include "sbp_feature.def"
+#undef SBP_FEATURE_DEF_BEGIN
+#undef SBP_FEATURE_DEF
+#undef SBP_FEATURE_DEF_END
+
+
+    SBP_MAX_MD_FEATURE
+}sbp_md_feature_enum;
+
+/*****************************************************************************
+* DESCRIPTION
+*   This enum is defined for Single Binary Platform (SBP) features
+*   NVRAM saves one byte value for each feature
+*****************************************************************************/
+typedef enum
+{
+//Please add SBP data in sbp_data.def
+ 
+#define SBP_DATA_DEF(ID, FEATURE, ATTR, DESC)       FEATURE,
+#define SBP_DATA_DEF_BIT(ID, FEATURE, ATTR)     FEATURE,
+
+#include "sbp_data.def"
+#undef SBP_DATA_DEF
+#undef SBP_DATA_DEF_BIT
+
+    SBP_DATA_MAX_MD_FEATURE
+}sbp_md_feature_data_enum;
+
+#if defined (__TC01_NVRAM__) || defined(__TC01__) // __TC01_CUST_SBP__
+/*****************************************************************************
+* DESCRIPTION
+*   This enum is defined for SBP by the customer itself.
+*   NVRAM saves one binary value for each feature
+*****************************************************************************/
+typedef enum
+{
+//Please add SBP features in sbp_feature_cust.def
+#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)
+
+#include "sbp_feature_cust.def"
+#undef SBP_FEATURE_DEF_BEGIN
+#undef SBP_FEATURE_DEF
+#undef SBP_FEATURE_DEF_END
+
+    SBP_CUSTOM_MAX_MD_FEATURE
+}sbp_md_feature_custom_enum;
+#endif
+
+
+/* SBP Test Mode Enum */
+typedef enum
+{
+    SBP_TEST_MODE_NONE = 0,
+    SBP_TEST_MODE_1,         // Obsolete, use NVRAM_EF_SBP_CUSTOM_MODEM_CONFIG_LID to specify test feature value
+    SBP_TEST_MODE_2,         // To skip hard coded feature changes
+    SBP_TEST_MODE_MAX
+}sbp_test_mode_enum;
+
+/* SBP ATTRIBUTE Bitmask */
+typedef enum
+{
+    SBP_ATTR_NONE = 0,
+    SBP_ATTR_NOT_SUPPORT_DYNAMIC_SBP = 0x01,       /*  bit 1 is for current SBP NV will keep when Dynamic SBP change */
+    SBP_ATTR_ALL = 0xff
+}sbp_attribute_enum;
+
+/**
+* DESCRIPTION
+*   This enum is TO define RUIM configuration.
+**/
+typedef enum
+{
+    SBP_RUIM_DISABLED = 0x00,    /*   Non-RUIM configuration   */
+    SBP_RUIM_ENABLED = 0x01    /*   RUIM configuration   */
+}c2k_sbp_ruim_config_enum;
+
+/** 
+ * SBP(Single Binary Platform) modem configuration
+ * a bitmap for all modem configurable feature
+ **/
+typedef struct
+{
+    kal_uint32 sbp_mode; //reserved for usage
+    kal_uint8 modem_sbp_config[(SBP_MAX_MD_FEATURE/8)+1]; //the size depends on SBP_MAX_MD_FEATURE
+} nvram_ef_sbp_modem_config_struct;
+
+#if defined (__TC01_NVRAM__) || defined(__TC01__) // __TC01_CUST_SBP__
+  /*MUSE - ALPS0144925 */
+  /*Customer's specific Single Binary Platform (SBP) features */
+  #define NVRAM_EF_SBP_MODEM_CONFIG_TOTAL (2)
+  #define NVRAM_CUST_SBP_IDX  2
+  
+#else /* __TC01__ */
+  #define NVRAM_EF_SBP_MODEM_CONFIG_TOTAL (1)
+#endif /* __TC01__ */
+
+#define NVRAM_EF_SBP_MODEM_CONFIG_SIZE sizeof(nvram_ef_sbp_modem_config_struct)
+
+/** 
+ * SBP(Single Binary Platform) modem data configuration
+ * a byte for each modem configurable feature
+ **/
+typedef struct
+{   
+    kal_uint32 sbp_mode; //reserved for usage
+    kal_uint8 modem_sbp_data_config[SBP_DATA_MAX_MD_FEATURE];
+} nvram_ef_sbp_modem_data_config_struct;
+
+#define NVRAM_EF_SBP_MODEM_DATA_CONFIG_TOTAL (1)
+#define NVRAM_EF_SBP_MODEM_DATA_CONFIG_SIZE sizeof(nvram_ef_sbp_modem_data_config_struct)
+
+/** 
+ * SBP(Single Binary Platform) modem feature/data customization
+ * a list of customized SBP feature / feature data
+ * priorirty: customization > DSBP > SBP
+ **/
+
+#define SBP_MAX_CUSTOM_CONFIG (100)      // allows 100 custom configurations
+
+typedef enum
+{
+    SBP_CUST_CFG_TYPE_NONE = 0,
+    SBP_CUST_CFG_TYPE_FEATURE,
+    SBP_CUST_CFG_TYPE_DATA
+}sbp_cust_cfg_type_enum;
+
+typedef struct{
+    kal_uint32                sbp_id;
+    sbp_cust_cfg_type_enum    sbp_cust_cfg_type;
+    kal_uint16                sbp_cust_cfg_feature;     // enum for SBP feature or SBP feature data
+    kal_uint8                 sbp_cust_cfg_feature_val;
+}sbp_custom_config_struct;
+
+typedef struct{
+    sbp_custom_config_struct  sbp_custom_config[SBP_MAX_CUSTOM_CONFIG];
+}nvram_ef_sbp_custom_modem_config_struct;
+
+#define NVRAM_EF_SBP_CUSTOM_MODEM_CONFIG_TOTAL (1)
+#define NVRAM_EF_SBP_CUSTOM_MODEM_CONFIG_SIZE sizeof(nvram_ef_sbp_custom_modem_config_struct)
+
+
+typedef struct{
+    kal_uint32    mcf_dsbp_dr_time;
+    kal_uint32    max_mcf_dsbp_dr_time;
+}nvram_ef_sbp_dsbp_config_struct;
+
+#define NVRAM_EF_SBP_DSBP_CONFIG_TOTAL (1)
+#define NVRAM_EF_SBP_DSBP_CONFIG_SIZE sizeof(nvram_ef_sbp_dsbp_config_struct)
+
+/** 
+ * SBP(Single Binary Platform) ID - plmn_id/iccid customization
+ * a customized SBP_ID - plmn_id/iccid mapping table
+ * priorirty: customization > internal static g_l4bsbp_iccid_prefix_table > internal static g_l4bsbp_plmn_table
+ **/
+
+#define SBP_MAX_CUSTOM_SBP_ID_ICCID_MAPPING (100)      // allows 100 custom mapping
+#define SBP_MAX_CUSTOM_SBP_ID_PLMN_MAPPING (500)       // allows 500 custom mapping
+#define SBP_MAX_CUSTOM_ICCID_LEN 21
+
+typedef struct{
+    kal_uint8                             iccid_prefix[SBP_MAX_CUSTOM_ICCID_LEN];
+    kal_uint32                            sbp_id;
+}sbp_custom_sbp_id_iccid_mapping_struct;
+
+typedef struct{
+    kal_uint32                            plmn_range_start;
+    kal_uint32                            plmn_range_end;
+    kal_uint32                            sbp_id;
+}sbp_custom_sbp_id_plmn_mapping_struct;
+
+typedef struct{
+	kal_uint32 num_of_iccid_map;
+    sbp_custom_sbp_id_iccid_mapping_struct  sbp_custom_sbp_id_iccid_map_table[SBP_MAX_CUSTOM_SBP_ID_ICCID_MAPPING];
+	kal_uint32 num_of_plmn_map;
+    sbp_custom_sbp_id_plmn_mapping_struct  sbp_custom_sbp_id_plmn_map_table[SBP_MAX_CUSTOM_SBP_ID_PLMN_MAPPING];
+}nvram_ef_sbp_custom_sbp_id_mapping_struct;
+
+#define NVRAM_EF_SBP_CUSTOM_SBP_ID_MAPPING_TOTAL (1)
+#define NVRAM_EF_SBP_CUSTOM_SBP_ID_MAPPING_SIZE sizeof(nvram_ef_sbp_custom_sbp_id_mapping_struct)
+
+/** 
+ * SBP(Single Binary Platform) ID list which need MD CXP reboot flow
+ **/
+
+#define SBP_MAX_MDCXP_SBP_ID_NUM (100)      // allows 100 operators
+
+typedef struct{
+	kal_uint32 sbp_id_list[SBP_MAX_MDCXP_SBP_ID_NUM];
+}nvram_ef_sbp_mdcxp_sbp_id_list_struct;
+
+#define NVRAM_EF_SBP_MDCXP_SBP_ID_LIST_TOTAL (1)
+#define NVRAM_EF_SBP_MDCXP_SBP_ID_LIST_SIZE sizeof(nvram_ef_sbp_mdcxp_sbp_id_list_struct)
+
+typedef struct 
+{
+    kal_uint8 mcc_mnc[7];
+    kal_uint32 sbp_id;
+} mccmnc_to_sbp_id_struct;
+
+typedef struct
+{
+    kal_char csc_salecode[3];
+    kal_char network_code[3];
+    kal_char network_code_2[3];
+} sbp_salecode_struct;
+
+typedef enum
+{
+    SBP_ID_OM = 0,
+    SBP_ID_UNKNOWN = SBP_ID_OM,
+
+    /* the Operator enum*/
+    SBP_ID_CMCC     = 1,
+    SBP_ID_CU       = 2,
+    SBP_ID_ORANGE   = 3,
+    SBP_ID_TMO_EU   = 5,
+    SBP_ID_VODAFONE = 6,
+    SBP_ID_ATT      = 7,
+    SBP_ID_TMO_US   = 8,
+    SBP_ID_CT       = 9,
+    SBP_ID_TIER_2   = 10,
+    SBP_ID_H3G      = 11,
+    SBP_ID_VERIZON  = 12,
+    SBP_ID_TELEFONICA = 15,
+    SBP_ID_EE       = 16,
+    SBP_ID_DOCOMO   = 17,
+    SBP_ID_RJL      = 18,
+    SBP_ID_TELSTRA  = 19,
+    SBP_ID_SPRINT   = 20,
+    SBP_ID_DISH     = 21,
+    SBP_ID_SOFTBANK = 50,
+    SBP_ID_CSL      = 100,
+    SBP_ID_PCCW     = 101,
+    SBP_ID_SMT      = 102,
+    SBP_ID_SINGTEL  = 103,
+    SBP_ID_STARHUB  = 104,
+    SBP_ID_AMX      = 105,
+    SBP_ID_3HK      = 106,
+    SBP_ID_SFR      = 107,
+    SBP_ID_TWN      = 108,
+    SBP_ID_CHT      = 109,
+    SBP_ID_FET      = 110,
+    SBP_ID_VDF_INDIA = 111,
+    SBP_ID_TELCEL   = 112,
+    SBP_ID_BEELINE  = 113,
+    SBP_ID_KT       = 114,
+    SBP_ID_SKT      = 115,
+    SBP_ID_UPLUS    = 116,
+    SBP_ID_SMARTFREN = 117,
+    SBP_ID_YTL      = 118,
+    SBP_ID_NATCOM   = 119,
+    SBP_ID_CLARO    = 120,
+    SBP_ID_BELL     = 121,
+    SBP_ID_AIS      = 122,
+    SBP_ID_APTG     = 124,
+    SBP_ID_DTAC     = 125,
+    SBP_ID_AVEA     = 126,
+    SBP_ID_MEGAFON  = 127,
+    SBP_ID_DNA      = 128,
+    SBP_ID_KDDI     = 129,
+    SBP_ID_TIM      = 130,
+    SBP_ID_TRUEMOVER = 131,
+    SBP_ID_MOVISTAR = 132,
+    SBP_ID_DU       = 133,
+    SBP_ID_ELISA    = 134,
+    SBP_ID_MTS      = 135,
+    SBP_ID_ENTEL    = 136,
+    SBP_ID_TELE2    = 137,
+    SBP_ID_BOUYGUES = 139,
+    SBP_ID_MTN      = 140,
+    SBP_ID_CELL_C   = 141,
+    SBP_ID_TURKCELL = 143,
+    SBP_ID_SMILTE   = 144,
+    SBP_ID_CRICKET  = 145,
+    SBP_ID_ETISALAT = 146,
+    SBP_ID_AIRTEL   = 147,
+    SBP_ID_SEATEL   = 148,
+    SBP_ID_CMHK     = 149,
+    SBP_ID_SWISSCOM_SCHWEIZ_AG = 150,
+    SBP_ID_M1       = 151,
+    SBP_ID_OPTUS    = 152,
+    SBP_ID_VHA      = 153,
+    SBP_ID_TELIA    = 154,
+    SBP_ID_DIGI     = 155,
+    SBP_ID_TELENOR  = 156,
+    SBP_ID_TELUS    = 157,
+    SBP_ID_ZAIN     = 158,
+    SBP_ID_STC      = 159,
+    SBP_ID_WEBE     = 160,
+    SBP_ID_PLAY     = 161,
+    SBP_ID_FREEDOM  = 162,
+    SBP_ID_DIALOG   = 163,
+    SBP_ID_TELENET  = 164,
+    SBP_ID_SUNRISE  = 165,
+    SBP_ID_SALT     = 166,
+    SBP_ID_EIR      = 168,
+    SBP_ID_VIPNET   = 169,
+    SBP_ID_PARTNER  = 170,
+    SBP_ID_WOM      = 171,
+    SBP_ID_ALTICE   = 172,
+    SBP_ID_NZ       = 174,
+    SBP_ID_TDC      = 175,
+    SBP_ID_TSTAR    = 176,
+    SBP_ID_TELEKOM_EGYPT = 177,
+    SBP_ID_SMART    = 178,
+    SBP_ID_ALLAI_NEWROZ = 179,
+    SBP_ID_SWAZI_MOBILE = 180,
+    SBP_ID_TELKOM_SA = 181,
+    SBP_ID_PROXIMUS = 182,
+    SBP_ID_PERSONAL = 183,
+    SBP_ID_VIETTEL  = 184,
+    SBP_ID_2DEGREES = 185,
+    SBP_ID_IDEA     = 186,
+    SBP_ID_SAFARICOM = 187,
+    SBP_ID_A1       = 188,
+    SBP_ID_UMOBILE  = 189,
+    SBP_ID_TELKOM_KENYA = 190,
+    SBP_ID_GRAMEENPHONE = 191,
+    SBP_ID_ROBI = 192,
+    SBP_ID_O2       = 195,
+    SBP_ID_FIRSTNET = 196,
+    SBP_ID_SBERBANK = 198,
+    SBP_ID_VIVACOM = 199,
+    SBP_ID_JTL_KENYA = 200,
+    SBP_ID_KPN_NETHERLANDS = 201,
+    SBP_ID_SPARK = 202,
+    SBP_ID_NOS = 203,
+    SBP_ID_ROGERS = 204,
+    SBP_ID_ALTAN = 205,
+    SBP_ID_SKY = 206,
+    SBP_ID_CTM = 207,
+    SBP_ID_3MACAU = 208,
+    SBP_ID_AVANTEL = 209,
+    SBP_ID_BSNL = 210,
+    SBP_ID_CW = 211,
+    SBP_ID_OPEN_MOBILE = 212,
+    SBP_ID_IDC = 214,
+    SBP_ID_MOTIV = 213,
+    SBP_ID_CELLCARD = 215,
+	SBP_ID_ZONG = 216,
+    SBP_ID_TELEKOM_SLOVENIA = 217,
+    SBP_ID_RAKUTEN = 218,
+    SBP_ID_MYTEL = 219,
+    SBP_ID_TIGO = 220,
+    SBP_ID_TPG  = 221,
+    SBP_ID_ACG  = 222,
+	SBP_ID_OOREDOO = 223,
+    SBP_ID_TELKOMSEL  = 224,
+    SBP_ID_XL = 225,
+    SBP_ID_WIND = 227,
+    SBP_ID_CELCOM = 228,
+    SBP_ID_MAXIS = 231,
+    SBP_ID_MOBITEL = 232,
+    SBP_ID_PELEPHONE = 233,
+    SBP_ID_PLUS = 234,
+    SBP_ID_VIP = 235,
+    SBP_ID_USCC = 236,
+    SBP_ID_ICE = 237,
+    SBP_ID_VIDEOTRON = 238,
+    SBP_ID_EASTLINK = 239,
+    SBP_ID_XPLORE_MOBILE = 240,
+    SBP_ID_CLARO_PUERTO_RICO = 241,
+    SBP_ID_GLOBE = 243,
+	SBP_ID_METFONE = 244,
+    SBP_ID_VIETNAMOBILE = 245,
+    SBP_ID_OOREDOO_QATAR = 246,
+    SBP_ID_MAROC_TELECOM = 247,
+    SBP_ID_EXECULINK = 248,
+    SBP_ID_WIGHTMAN = 249,
+    SBP_ID_UNION = 250,
+    SBP_ID_CORR = 251,
+    SBP_ID_PLATEAU = 252,
+    SBP_ID_GTA = 253,
+    SBP_ID_NEP = 254,
+    SBP_ID_CELLULAR_ONE_NEAZ = 255,
+    SBP_ID_CBW = 256,
+    SBP_ID_VIAERO = 257,
+    SBP_ID_CELLULAR_ONE_MTPCS = 258,
+    SBP_ID_EPIC = 259,
+    SBP_ID_IMMIX = 260,
+    SBP_ID_ASTAC = 261,
+    SBP_ID_IWIRELESS = 262,
+    SBP_ID_DTC = 263,
+    SBP_ID_PINE = 264,
+    SBP_ID_LONG_LINES = 265,
+    SBP_ID_CELLULAR_ONE_EIL = 266,
+    SBP_ID_GCI = 267,
+    SBP_ID_MOSAIC = 268,
+    SBP_ID_NEWCORE = 269,
+    SBP_ID_TELALASKA = 270,
+    SBP_ID_SAGEBRUSH = 271,
+    SBP_ID_GTT = 272,
+    SBP_ID_OPTIMERA = 273,
+    SBP_ID_YOIGO = 274,
+    SBP_ID_LIFECELL = 275,
+    SBP_ID_ALTICE_US = 276,
+    SBP_ID_TELEMACH = 277,
+    SBP_ID_JAZZ = 278,
+    SBP_ID_DITO = 279,
+    SBP_ID_OTZ = 280,
+    SBP_ID_KYIVSTAR = 281,
+    SBP_ID_MOBILY = 282,
+    SBP_ID_MEO = 283,
+    SBP_ID_MTS_SERBIA = 284,    
+    SBP_ID_VINAPHONE = 285,
+    SBP_ID_MNSHUBS = 286,
+	SBP_ID_FREE = 287,
+	SBP_ID_VIRGIN = 288,
+	SBP_ID_BATELCO = 289,
+	SBP_ID_OMANTEL = 290,
+	SBP_ID_LMT = 291,
+	SBP_ID_CMHK_HKIA = 292,
+	SBP_ID_POST = 293,
+	SBP_ID_MPT = 294,
+	SBP_ID_NTC = 295,
+	SBP_ID_CAROLINA_WEST_WIRELESS = 296,
+    SBP_ID_FASTWEB = 297,
+	SBP_ID_UMNIAH = 298,
+	SBP_ID_NRJ = 299,
+    SBP_ID_TANGO = 301,
+    SBP_ID_OOREDOO_OMAN = 302,
+   	SBP_ID_CTMO = 304, 
+    SBP_ID_CUHK = 306,
+	SBP_ID_CELLCOM = 307,
+    SBP_ID_HOTMOBILE = 310,
+    SBP_ID_BITE = 312,
+    SBP_ID_AXTEL = 313,
+    SBP_ID_TELE_GREENLAND = 314,
+	SBP_ID_TELE2_KAZAK = 315,
+	SBP_ID_VIANOVA = 318,
+	SBP_ID_MONACO = 319,
+    SBP_ID_CORIOLIS = 320,
+    SBP_ID_ORA_VITI = 321,
+    SBP_ID_UPC = 322,
+	SBP_ID_MOLDCELL = 324,
+    SBP_ID_9MOBILE = 326,
+	SBP_ID_SASKTEL = 327,
+	SBP_ID_VOO = 328,
+	SBP_ID_TASHICELL = 334,
+	SBP_ID_TOT = 335,
+	SBP_ID_SPUSU = 338,
+	SBP_ID_UNITEL = 339,
+	SBP_ID_UCELL = 341,
+	SBP_ID_4KA = 344,
+    SBP_ID_PRIMETEL = 345,
+	SBP_ID_AIRTEL_KENYA = 347,
+	SBP_ID_NCELL = 348,
+    SBP_ID_GIBTELECOM = 350,
+    SBP_ID_MOD_EGYPT = 352,
+	SBP_ID_WE4G = 353,
+    SBP_ID_ALFA = 355,
+	SBP_ID_RAIN = 356,
+    SBP_ID_CNT = 357,
+    SBP_ID_TELMA = 358,
+    SBP_ID_ALIV = 359,
+    SBP_ID_CTEXCEL = 360,
+    SBP_ID_BMOBILE = 362,
+	SBP_ID_LICT = 398,
+
+    /* Lab testing SBP ID */
+    SBP_ID_ERICSSON = 1001,
+    SBP_ID_NOKIA    = 1002,
+    SBP_ID_MTK_HQLAB_ERICSSON = 1003,
+    SBP_ID_HUAWEI_IMS_LAB = 1004,
+
+
+    /* Legacy C2K SBP ID */
+    SBP_ID_GENERIC = SBP_ID_OM,
+    SBP_ID_VERIZON_C2K = SBP_ID_VERIZON,
+
+#ifdef __TC10__
+    /* START - allocated ID for Samsung 10000 ~ 20000 */
+    
+    // SBP ID FOR CHINA 10001 ~ 10999
+    SBP_ID_CHINA = 10000,    
+    // SBP ID FOR GLOBAL 11001 ~ 11999
+    SBP_ID_GLOBAL = 11000,
+    SBP_ID_TNZ,  // TNZ - SPARK (Formerly Telecom New Zealand)
+    // SBP ID FOR JPN 12001 ~ 12999
+    SBP_ID_JPN = 12000,    
+    // SBP ID FOR KOR 13001 ~ 13999
+    SBP_ID_KOR = 13000,
+    // SBP ID FOR LATIN_AMERICA 14001 ~ 14999
+    SBP_ID_LATIN_AMERICA = 14000,
+    // SBP ID FOR N_AMERICA_CAN 15001 ~ 15999
+    SBP_ID_N_AMERICA_CAN = 15000,
+    // SBP ID FOR N_AMERICA 16001 ~ 16999
+    SBP_ID_N_AMERICA = 16000,
+    // SBP ID FOR N_AMERICA_3GPP2 17001 ~ 17999
+    SBP_ID_N_AMERICA_3GPP2 = 17000,
+    
+    /* END - allocated ID for Samsung 10000 ~ 20000 */    
+    
+    SBP_ID_MAX = 20000,    // MAX
+#endif  /* __TC10__ */
+
+} sbp_id_enum;
+
+/* --------------------------
+ * End of SBP Configuration
+ * --------------------------- */
+
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_md_feature()
+*
+* DESCRIPTION
+*   This function is used to query modem configuration
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*
+* RETURNS
+*   KAL_TRUE    : if this feature is turned on
+*   KAL_FALSE   : if this feature is turned off
+*****************************************************************************/
+extern kal_bool sbp_query_md_feature(sbp_md_feature_enum feature);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_id()
+*
+* DESCRIPTION
+*   This function is used to query SBP ID received by modem
+*
+* PARAMETERS
+*   [IN]    N/A
+* RETURNS
+*   the unsigned 4-byte value for the SBP ID
+*****************************************************************************/
+extern kal_uint32 sbp_query_id(void);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_sub_id()
+*
+* DESCRIPTION
+*   This function is used to query SBP Sub ID received by modem
+*
+* PARAMETERS
+*   [IN]    N/A
+* RETURNS
+*   the unsigned 4-byte value for the SBP Sub ID
+*****************************************************************************/
+extern kal_uint32 sbp_query_sub_id(void);
+
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_md_feature_for_c2k()
+*
+* DESCRIPTION
+*   This function is used to query modem configuration and used by C2K team only
+*   The function will judge current active PS using C2K's API and return the corresponding setting.
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*
+* RETURNS
+*   KAL_TRUE    : if this feature is turned on
+*   KAL_FALSE   : if this feature is turned off
+*****************************************************************************/
+extern kal_bool sbp_query_md_feature_for_c2k(sbp_md_feature_enum feature);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_md_feature_by_ps()
+*
+* DESCRIPTION
+*   This function is used to query modem configuration according to the PS ID
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*   ps_id [IN]      PS ID
+*
+* RETURNS
+*   KAL_TRUE    : if this feature is turned on
+*   KAL_FALSE   : if this feature is turned off
+*****************************************************************************/
+extern kal_bool sbp_query_md_feature_by_ps(sbp_md_feature_enum feature, protocol_id_enum ps_id);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_md_feature_no_overwrite()
+*
+* DESCRIPTION
+*   This function is used to query modem configuration without overwrite
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*
+* RETURNS
+*   KAL_TRUE    : if this feature is turned on
+*   KAL_FALSE   : if this feature is turned off
+*****************************************************************************/
+extern kal_bool sbp_query_md_feature_no_overwrite(sbp_md_feature_enum feature);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_md_feature_no_overwrite_by_ps()
+*
+* DESCRIPTION
+*   This function is used to query modem configuration without overwrite according to the PS ID
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*   ps_id [IN]      PS ID
+*
+* RETURNS
+*   KAL_TRUE    : if this feature is turned on
+*   KAL_FALSE   : if this feature is turned off
+*****************************************************************************/
+extern kal_bool sbp_query_md_feature_no_overwrite_by_ps(sbp_md_feature_enum feature, protocol_id_enum ps_id);
+
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_set_md_feature()
+*
+* DESCRIPTION
+*   This function is used to set modem configuration
+*
+* PARAMETERS
+*   feature         [IN]    modem feature
+*   is_turned_on    [IN]
+*   sbp_feature_ptr [IN/OUT]
+*
+* RETURNS
+*   KAL_TRUE if success; otherwise KAL_FALSE
+*****************************************************************************/
+extern kal_bool sbp_set_md_feature(sbp_md_feature_enum feature, 
+                                   kal_bool is_turned_on, 
+                                   nvram_ef_sbp_modem_config_struct *sbp_feature_ptr);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_md_feature_data()
+*
+* DESCRIPTION
+*   This function is used to query modem configuration
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*
+* RETURNS
+*   The byte value for the input feature
+*****************************************************************************/
+extern kal_uint8 sbp_query_md_feature_data(sbp_md_feature_data_enum feature);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_md_feature_data_for_c2k()
+*
+* DESCRIPTION
+*   This function is used to query modem configuration and used by C2K team only
+*   The function will judge current active PS using C2K's API and return the corresponding setting.
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*
+* RETURNS
+*   the unsigned byte value for the feature
+*****************************************************************************/
+extern kal_uint8 sbp_query_md_feature_data_for_c2k(sbp_md_feature_data_enum feature);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_md_feature_data_by_ps()
+*
+* DESCRIPTION
+*   This function is used to query modem configuration data
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*   ps_id [IN]      PS ID
+*
+* RETURNS
+*   the unsigned byte value for the feature
+*****************************************************************************/
+extern kal_uint8 sbp_query_md_feature_data_by_ps(sbp_md_feature_data_enum feature, protocol_id_enum ps_id);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_md_feature_data_no_overwrite()
+*
+* DESCRIPTION
+*   This function is used to query modem configuration without overwrite
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*
+* RETURNS
+*   The byte value for the input feature
+*****************************************************************************/
+extern kal_uint8 sbp_query_md_feature_data_no_overwrite(sbp_md_feature_data_enum feature);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_md_feature_data_no_overwrite_by_ps()
+*
+* DESCRIPTION
+*   This function is used to query modem configuration data without overwrite
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*   ps_id [IN]      PS ID
+*
+* RETURNS
+*   the unsigned byte value for the feature
+*****************************************************************************/
+extern kal_uint8 sbp_query_md_feature_data_no_overwrite_by_ps(sbp_md_feature_data_enum feature, protocol_id_enum ps_id);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_set_md_feature_data()
+*
+* DESCRIPTION
+*   This function is used to query modem configuration
+*
+* PARAMETERS
+*   feature         [IN]    modem feature
+*   data            [IN]
+*   sbp_data_ptr    [IN/OUT]
+*
+* RETURNS
+*   KAL_TRUE if success; otherwise KAL_FALSE
+*****************************************************************************/
+extern kal_bool sbp_set_md_feature_data(sbp_md_feature_data_enum feature, 
+                                        kal_uint8 data, 
+                                        nvram_ef_sbp_modem_data_config_struct *sbp_data_ptr);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_general_set_md_feature_data()
+*
+* DESCRIPTION
+*   This function is used to set modem configuration data
+*   Please don't use this API if you don't get the permission from SBP FPM.
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*
+* RETURNS
+*   the unsigned byte value for the feature
+*****************************************************************************/
+extern kal_bool sbp_general_set_md_feature_data(sbp_md_feature_data_enum feature, kal_uint8 data);
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_nvram_set_sbp_id
+ * DESCRIPTION
+ * Set SBP features and data according to SBP ID.
+ * PARAMETERS
+ *  sbp_mode  [IN]
+ * RETURNS
+ *   KAL_TRUE    : Set SBP ID successfully
+ *   KAL_FALSE   : Error happens when setting SBP ID
+ *****************************************************************************/
+extern kal_bool custom_nvram_set_sbp_id(kal_uint32 sbp_id, kal_bool is_in_dynamic_sbp, kal_uint8 *imsi, protocol_id_enum ps_id);
+
+/*****************************************************************************
+ * FUNCTION
+ *  custom_nvram_init_sbp_id
+ * DESCRIPTION
+ * Set SBP features and data according to SBP ID and SIM SBP ID.
+ * PARAMETERS
+ *  sbp_id  [IN]
+ * RETURNS
+ *   Void
+ *****************************************************************************/
+extern void custom_nvram_init_sbp_id(kal_uint32 sbp_id);
+
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_get_sim_sbp_id_for_all()
+*
+* DESCRIPTION
+*   get SIM SBP ID which trigger DSBP for all modem (IMS/VoLTE + PS/L1)
+*
+* PARAMETERS
+*   ps_id   [IN]    protocol ID
+*
+* RETURNS
+*   the unsigned 4-byte value for the SIM SBP ID
+*
+*****************************************************************************/
+extern kal_uint32 sbp_get_sim_sbp_id_for_all(protocol_id_enum ps_id);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_get_current_sim_sbp_id()
+*
+* DESCRIPTION
+*   get SIM SBP ID which trigger DSBP for IMS/VoLTE
+*
+* PARAMETERS
+*   ps_id   [IN]    protocol ID
+*
+* RETURNS
+*   the unsigned 4-byte value for the SIM SBP ID
+*
+*****************************************************************************/
+extern kal_uint32 sbp_get_current_sim_sbp_id(protocol_id_enum ps_id);
+
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_get_sim_sbp_id()
+*
+* DESCRIPTION
+*   get SIM SBP ID which trigger DSBP for IMS/VoLTE
+*
+* PARAMETERS
+*   ps_id   [IN]    protocol ID
+*
+* RETURNS
+*   the unsigned 4-byte value for the SIM SBP ID
+*
+*****************************************************************************/
+extern kal_uint32 sbp_get_sim_sbp_id(protocol_id_enum ps_id);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_set_sim_sbp_id_for_all()
+*
+* DESCRIPTION
+*   set SIM SBP ID which trigger DSBP for all modem (IMS/VoLTE + PS/L1)
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*   sim_sbp_id  [IN]    SIM SBP ID
+*   mcc  [IN]    MCC
+*   mnc  [IN]    MNC
+*   iccid  [IN]   ICCID
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+extern kal_bool sbp_set_sim_sbp_id_for_all(protocol_id_enum ps_id, kal_uint32 sim_sbp_id, kal_uint8 *mcc, kal_uint8 *mnc, kal_uint8 *iccid);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_set_current_sim_sbp_id()
+*
+* DESCRIPTION
+*   get SIM SBP ID which trigger DSBP for IMS/VoLTE
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*   sim_sbp_id  [IN]    SIM SBP ID
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+extern kal_bool sbp_set_current_sim_sbp_id(protocol_id_enum ps_id, kal_uint32 sim_sbp_id);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_set_sim_sbp_id()
+*
+* DESCRIPTION
+*   set SIM SBP ID which trigger DSBP for IMS/VoLTE
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*   sim_sbp_id  [IN]    SIM SBP ID
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+extern kal_bool sbp_set_sim_sbp_id(protocol_id_enum ps_id, kal_uint32 sim_sbp_id, kal_uint8 *mcc, kal_uint8 *mnc, kal_uint8 *iccid);
+
+/*****************************************************************************
+ * FUNCTION
+ *  sbp_convert_mcc_mnc_string_from_imsi
+ * DESCRIPTION
+ *  get mcc, mnc from imsi with string format
+ * PARAMETERS
+ *  imsi
+ * RETURNS
+ *  KAL_TRUE
+ *****************************************************************************/
+kal_bool sbp_convert_mcc_mnc_string_from_imsi(kal_uint8* mcc_ptr, kal_uint32 mcc_size, kal_uint8 *mnc_ptr, kal_uint32 mnc_size, kal_uint8* imsi_ptr, kal_uint8 mnc_len);
+
+/*****************************************************************************
+ * FUNCTION
+*   sbp_get_sbp_feature_raw_config()
+*
+* DESCRIPTION
+*   Get SBP Feature Raw Data according to the ps_id
+*   Please don't use this API if you don't get the permission from SBP FPM.
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+extern kal_bool sbp_get_sbp_feature_raw_config(protocol_id_enum ps_id, kal_uint8 *raw_config);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_set_sbp_feature_raw_config()
+*
+* DESCRIPTION
+*   Set SBP Feature Raw Data according to the ps_id
+*   Please don't use this API if you don't get the permission from SBP FPM.
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+extern void sbp_set_sbp_feature_raw_config(protocol_id_enum ps_id, kal_uint8 *raw_config);
+
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_get_sbp_data_raw_config()
+*
+* DESCRIPTION
+*   Get SBP Data Raw Data according to the ps_id
+*   Please don't use this API if you don't get the permission from SBP FPM.
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+extern kal_bool sbp_get_sbp_data_raw_config(protocol_id_enum ps_id, kal_uint8 *raw_config);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_set_sbp_data_raw_config()
+*
+* DESCRIPTION
+*   Get SBP Data Raw Data according to the ps_id
+*   Please don't use this API if you don't get the permission from SBP FPM.
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+extern void sbp_set_sbp_data_raw_config(protocol_id_enum ps_id, kal_uint8 *raw_config);
+
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_general_set_md_feature()
+*
+* DESCRIPTION
+*   This function is used to set modem configuration.
+*   Please don't use this API if you don't get the permission from SBP FPM.
+*
+* PARAMETERS
+*   feature         [IN]    modem feature
+*   is_turned_on    [IN]
+*
+* RETURNS
+*   KAL_TRUE if success; otherwise KAL_FALSE
+*****************************************************************************/
+extern kal_bool sbp_general_set_md_feature(sbp_md_feature_enum feature, kal_bool is_turned_on);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_update_features_to_nvram()
+*
+* DESCRIPTION
+*   This function is used to store current config of features from SBP contexts into NVRAM_EF_SBP_MODEM_CONFIG_LID
+*   Please don't use this API if you don't get the permission from SBP FPM.
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+extern kal_bool sbp_update_features_to_nvram();
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_update_data_to_nvram()
+*
+* DESCRIPTION
+*   This function is used to store current config of data from SBP contexts into NVRAM_EF_SBP_MODEM_DATA_CONFIG_LID
+*   Please don't use this API if you don't get the permission from SBP FPM.
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+extern kal_bool sbp_update_data_to_nvram();
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_update_specific_feature_to_nvram()
+*
+* DESCRIPTION
+*   This function is used to write a single SBP feature to NVRAM, keeping all other features the same
+*
+* PARAMETERS
+*   feature         [IN]    modem feature
+*   is_turned_on    [IN]
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+kal_bool sbp_update_specific_feature_to_nvram(sbp_md_feature_enum feature, kal_bool is_turned_on);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_update_specific_data_to_nvram()
+*
+* DESCRIPTION
+*   This function is used to write a single SBP feature data to NVRAM, keeping all other feature data the same
+*
+* PARAMETERS
+*   feature [IN]    modem feature data
+*   data [IN]       value of feature data
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+kal_bool sbp_update_specific_data_to_nvram(sbp_md_feature_data_enum feature, kal_uint8 data);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_init_contexts()
+*
+* DESCRIPTION
+*   This function is used to init SBP Contexts
+*   Please don't use this API if you don't get the permission from SBP FPM.
+*
+* PARAMETERS
+*   [IN]    N/A
+*
+* RETURNS
+*   KAL_TRUE or KAL_FALSE
+*****************************************************************************/
+extern kal_bool sbp_init_contexts();
+
+/*****************************************************************************
+ * FUNCTION
+ *  sbp_get_dsbp_mode
+ *
+ * DESCRIPTION
+ * query dynamic SBP mode
+ *
+ * PARAMETERS
+ *  [IN]    N/A
+ * RETURNS
+ *   current DSBP mode : l4bsbp_dsbp_mode_enum
+ *****************************************************************************/
+extern kal_uint8 sbp_get_dsbp_mode(void);
+
+/*****************************************************************************
+ * FUNCTION
+ *  sbp_set_dsbp_mode
+ *
+ * DESCRIPTION
+ * Set dynamic SBP mode.
+ *
+ * PARAMETERS
+ *  dsbp_mdoe [IN]    l4bsbp_dsbp_mode_enum
+ * RETURNS
+ *   KAL_TRUE    : success
+ *   KAL_FALSE   : fail
+ *****************************************************************************/
+extern kal_bool sbp_set_dsbp_mode(kal_uint8 dspb_mode);
+
+/*****************************************************************************
+ * FUNCTION
+ *  sbp_get_test_mode
+ *
+ * DESCRIPTION
+ * query if it is under test mode or not
+ *
+ * PARAMETERS
+ *  [IN]    N/A
+ * RETURNS
+ *   current SBP test mode : sbp_test_mode_enum
+ *****************************************************************************/
+extern sbp_test_mode_enum sbp_get_test_mode(void);
+
+/*****************************************************************************
+ * FUNCTION
+ *  sbp_set_test_mode
+ *
+ * DESCRIPTION
+ * Set SBP to test mode.
+ * In test mode, we read current values of nvram files instead of using default values before applying SBP settings.
+ *
+ * PARAMETERS
+ *  test_mdoe [IN]    sbp_test_mode_enum
+ * RETURNS
+ *   KAL_TRUE    : success
+ *   KAL_FALSE   : fail
+ *****************************************************************************/
+extern kal_bool sbp_set_test_mode(sbp_test_mode_enum test_mode);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_set_md_feature_by_ps()
+*
+* DESCRIPTION
+*   This function is used to set modem configuration by PS
+*   Please don't use this API if you don't get the permission from SBP FPM.
+*
+* PARAMETERS
+*   feature         [IN]    modem feature
+*   is_turned_on    [IN]
+*   sbp_feature_ptr [IN/OUT]
+*
+* RETURNS
+*   KAL_TRUE if success; otherwise KAL_FALSE
+*****************************************************************************/
+kal_bool sbp_set_md_feature_by_ps(sbp_md_feature_enum feature,
+                            kal_bool is_turned_on, 
+                            protocol_id_enum ps_id);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_set_md_feature_data_by_ps()
+*
+* DESCRIPTION
+*   This function is used to set modem configuration data by PS
+*   Please don't use this API if you don't get the permission from SBP FPM.
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*
+* RETURNS
+*   the unsigned byte value for the feature
+*****************************************************************************/
+kal_bool sbp_set_md_feature_data_by_ps(sbp_md_feature_data_enum feature, 
+        kal_uint8 data, 
+        protocol_id_enum ps_id);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_set_sbp_id()
+*
+* DESCRIPTION
+*   This function is used to set SBP ID into SBP contexts and its NVRAM
+*   Please don't use this API if you don't get the permission from SBP FPM.
+*
+* PARAMETERS
+*   [IN]    N/A
+*
+* RETURNS
+*   KAL_TRUE or KAL_FALSE
+*****************************************************************************/
+extern kal_bool sbp_set_sbp_id(kal_uint32 sbp_id);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_md_feature_overwrite()
+*
+* DESCRIPTION
+*   This function is used to overwrite the configuration for GCF or other test modes
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*   enabled [IN]   feature is turned on or not 
+*
+* RETURNS
+*   KAL_TRUE    : if this feature is turned on
+*   KAL_FALSE   : if this feature is turned off
+*****************************************************************************/
+extern kal_bool sbp_md_feature_overwrite(sbp_md_feature_enum feature, kal_bool enabled);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_md_feature_data_overwrite()
+*
+* DESCRIPTION
+*   This function is used to overwrite the configuration for GCF or other test modes
+*
+* PARAMETERS
+*   feature [IN]    modem feature
+*   value [IN]       the value of the feature 
+*
+* RETURNS
+*   the overwrited value for the feature
+*****************************************************************************/
+extern kal_uint8 sbp_md_feature_data_overwrite(sbp_md_feature_data_enum feature, kal_uint8 value);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_reload_config()
+*
+* DESCRIPTION
+*   This function is used to reload SBP related feature/data configuration
+*   Please don't use this API if you don't get the permission from SBP FPM.
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+void sbp_reload_config();
+
+
+/*****************************************************************************
+ * FUNCTION
+ *  nvram_custom_config_sbp_by_model_id
+ * DESCRIPTION
+ * Set SBP features and data according to Model ID.
+ * PARAMETERS
+ *  md_product_model_id  [IN]
+ * RETURNS
+ *   KAL_TRUE    : Set SBP ID successfully
+ *   KAL_FALSE   : Error happens when setting SBP ID
+ *****************************************************************************/
+extern kal_bool nvram_custom_config_sbp_by_model_id(kal_uint32 md_product_model_id);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_update_custom_config_to_nvram
+*
+* DESCRIPTION
+*   This function updates sbp feature/data custom config to nvram
+*   
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*   is_erase    [IN]    reset the feature/data item or not
+* RETURNS
+*   void
+*
+*****************************************************************************/
+kal_bool sbp_update_custom_config_to_nvram(sbp_custom_config_struct *sbp_custom_config_ptr, kal_bool is_erase);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_get_custom_config_nv_with_mcf
+*
+* DESCRIPTION
+*   This function reads NVRAM_EF_SBP_CUSTOM_MODEM_CONFIG_LID and applies MCF OTA by OP change
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*
+* RETURNS
+*   void
+*
+*****************************************************************************/
+kal_bool sbp_get_custom_config_nv_with_mcf(protocol_id_enum ps_id, nvram_ef_sbp_custom_modem_config_struct * sbp_custom_modem_config_nv_ptr);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_get_max_custom_config
+*
+* DESCRIPTION
+*   This function gets MAX custom config NV entries
+*
+* PARAMETERS
+*   [IN]    N/A
+* RETURNS
+*   void
+*
+*****************************************************************************/
+kal_uint16 sbp_get_max_custom_config(void);
+
+/*****************************************************************************
+* FUNCTION
+*    sbp_get_last_dsbp_sim_info()
+*
+* DESCRIPTION
+*   This function is used to get MCC/MNC/ICCID of last completed DSBP
+*   For mode2 device, this will include SIM info from last power up
+*   For mode1 device, only include SIM info in current sbp context
+*
+* PARAMETERS
+*   ps_id      [IN]    protocol ID
+*   param      [IN]    mcc, mnc, iccid
+* RETURNS
+*   void
+*
+*****************************************************************************/
+extern void sbp_get_last_dsbp_sim_info(protocol_id_enum ps_id, kal_uint8 *mcc, kal_uint8 *mnc, kal_uint8 *iccid);
+
+/*****************************************************************************
+* FUNCTION
+*    sbp_get_last_mode2_dsbp_sim_info()
+*
+* DESCRIPTION
+*   This function is used to get SIM_SBP_ID/MCC/MNC/ICCID of last completed mode2 DSBP
+*   Can be used in DSBP callback function to compare with last mode2 DSBP result
+*   As part of mode2 design, this includes info from SIM insert of last power cycle
+*
+* PARAMETERS
+*   ps_id      [IN]    protocol ID
+*   param      [IN]    sim_sbp_id, mcc, mnc, iccid
+* RETURNS
+*   void
+*
+*****************************************************************************/
+extern void sbp_get_last_mode2_dsbp_sim_info(protocol_id_enum ps_id, kal_uint32 *sim_sbp_id, kal_uint8 *mcc, kal_uint8 *mnc, kal_uint8 *iccid);
+
+/*****************************************************************************
+* FUNCTION
+*    sbp_get_dsbp_config()
+*
+* DESCRIPTION
+*   This function is used to get dsbp retry config
+*
+* PARAMETERS
+*   void
+* RETURNS
+*   nvram_ef_sbp_dsbp_config_struct
+*
+*****************************************************************************/
+extern nvram_ef_sbp_dsbp_config_struct* sbp_get_dsbp_config(void);
+/*****************************************************************************
+* FUNCTION
+*    nvram_custom_config_refresh_sbp_id_mapping_when_mcf_ota_start()
+*
+* DESCRIPTION
+*   This function is used to re-read NVRAM and update the globle custom sbp_id mapping table
+*   when MCF default OTA triggered.
+*
+* PARAMETERS
+*   void
+* RETURNS
+*   void
+*
+*****************************************************************************/
+extern void nvram_custom_config_refresh_sbp_id_mapping_when_mcf_ota_start(void);
+
+/*****************************************************************************
+* FUNCTION
+*    sbp_get_custom_sbp_id_mapping_table
+*
+* DESCRIPTION
+*   This function is used to get the globle custom sbp_id mapping table
+*
+* PARAMETERS
+*   void
+* RETURNS
+*   nvram_ef_sbp_custom_sbp_id_mapping_struct
+*
+*****************************************************************************/
+extern nvram_ef_sbp_custom_sbp_id_mapping_struct* sbp_get_custom_sbp_id_mapping_table(void);
+
+/*****************************************************************************
+* FUNCTION
+*    sbp_get_md_cxp_sbp_id
+*
+* DESCRIPTION
+*   This function is used to get trigger modem CXP (device) sbp_id
+*
+* PARAMETERS
+*   kal_uint32 sim_sbp_id
+* RETURNS
+*   kal_uint32 md_cxp_sbp_id
+*
+*****************************************************************************/
+extern kal_uint32 sbp_get_md_cxp_sbp_id(kal_uint32 sim_sbp_id);
+
+/*****************************************************************************
+* FUNCTION
+*    sbp_set_md_cxp_sbp_id
+*
+* DESCRIPTION
+*   This function is used to add trigger modem CXP (device) sbp_id
+*
+* PARAMETERS
+*   kal_uint32 sbp_id
+* RETURNS
+*
+*****************************************************************************/
+extern void sbp_set_md_cxp_sbp_id(kal_uint32 sbp_id);
+
+#if defined (__TC01_NVRAM__) || defined(__TC01__) // __TC01_CUST_SBP__
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_md_feature_custom()
+*
+* DESCRIPTION
+*   clone sbp_query_md_feature() for customer's SBP.
+*
+* PARAMETERS
+*   feature [IN]    customer's modem feature
+*
+* RETURNS
+*   KAL_TRUE    : if this feature is turned on
+*   KAL_FALSE   : if this feature is turned off
+*****************************************************************************/
+extern kal_bool sbp_query_md_feature_custom(sbp_md_feature_custom_enum feature);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_query_md_feature_by_ps_custom()
+*
+* DESCRIPTION
+*   clone sbp_query_md_feature_by_ps() for customer's SBP.
+*
+* PARAMETERS
+*   feature [IN]    customer's modem feature
+*   ps_id [IN]      PS ID
+*
+* RETURNS
+*   KAL_TRUE    : if this feature is turned on
+*   KAL_FALSE   : if this feature is turned off
+*****************************************************************************/
+extern kal_bool sbp_query_md_feature_by_ps_custom(sbp_md_feature_custom_enum feature, protocol_id_enum ps_id);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_set_md_feature_custom()
+*
+* DESCRIPTION
+*   clone sbp_set_md_feature() for customer's SBP.
+*
+* PARAMETERS
+*   feature         [IN]    customer's modem feature
+*   is_turned_on    [IN]
+*   sbp_feature_ptr [IN/OUT]
+*
+* RETURNS
+*   KAL_TRUE if success; otherwise KAL_FALSE
+*****************************************************************************/
+extern kal_bool sbp_set_md_feature_custom(sbp_md_feature_custom_enum feature,
+                            kal_bool is_turned_on, 
+                            nvram_ef_sbp_modem_config_struct *sbp_feature_ptr);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_set_md_feature_by_ps_custom()
+*
+* DESCRIPTION
+*   clone sbp_set_md_feature_by_ps() for customer's SBP.
+*
+* PARAMETERS
+*   feature         [IN]    customer's modem feature
+*   is_turned_on    [IN]
+*   sbp_feature_ptr [IN/OUT]
+*
+* RETURNS
+*   KAL_TRUE if success; otherwise KAL_FALSE
+*****************************************************************************/
+extern kal_bool sbp_set_md_feature_by_ps_custom(sbp_md_feature_custom_enum feature,
+                            kal_bool is_turned_on, 
+                            protocol_id_enum ps_id);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_general_set_md_feature_custom()
+*
+* DESCRIPTION
+*   clone sbp_general_set_md_feature() for customer's SBP.
+*
+* PARAMETERS
+*   feature         [IN]    customer's modem feature
+*   is_turned_on    [IN]
+*
+* RETURNS
+*   KAL_TRUE if success; otherwise KAL_FALSE
+*****************************************************************************/
+extern kal_bool sbp_general_set_md_feature_custom(sbp_md_feature_custom_enum feature, kal_bool is_turned_on);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_update_features_to_nvram_custom()
+*
+* DESCRIPTION
+*   clone sbp_update_features_to_nvram() for customer's SBP.
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+extern kal_bool sbp_update_features_to_nvram_custom();
+
+
+/*****************************************************************************
+ * FUNCTION
+*   sbp_get_sbp_feature_raw_config_custom()
+*
+* DESCRIPTION
+*  clone sbp_get_sbp_feature_raw_config() for customer's SBP.
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+extern kal_bool sbp_get_sbp_feature_raw_config_custom(protocol_id_enum ps_id, kal_uint8 *raw_config);
+
+/*****************************************************************************
+* FUNCTION
+*   sbp_set_sbp_feature_raw_config_custom()
+*
+* DESCRIPTION
+*   clone sbp_set_sbp_feature_raw_config() for customer's SBP.
+*
+* PARAMETERS
+*   ps_id       [IN]    protocol ID
+*
+* RETURNS
+*   KAL_TRUE    - success
+*   KAL_FALSE   - failure
+*
+*****************************************************************************/
+extern void sbp_set_sbp_feature_raw_config_custom(protocol_id_enum ps_id, kal_uint8 *raw_config);
+#endif  /* (__TC01_NVRAM__) || defined(__TC01__) */
+
+#ifdef __IPC_ADAPTER__
+/*****************************************************************************
+* FUNCTION
+*    sbp_get_salecode()
+*
+* DESCRIPTION
+*   This function is used to get salecode of this ps_id
+*   If network code is present, network code is given
+*   otherwise, csc_salecode is given
+*
+* PARAMETERS
+*   ps_id      [IN]    protocol ID
+*   param      [IN]    salecode
+* RETURNS
+*   void
+*
+*****************************************************************************/
+extern void sbp_get_salecode(kal_char *salecode, protocol_id_enum ps_id);
+extern void sbp_get_csc_salecode(kal_char *salecode);
+extern void sbp_get_network_code_salecode(kal_char *salecode, protocol_id_enum ps_id);
+#endif  /* __IPC_ADAPTER__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* _SBP_PUBLIC_UTILITY_H */
+