[Feature][T8TSK-212][Modem]Update MTK modem version to MOBILETEK35_IVT_T800_MOLY.NR15.R3.MD700.MP.V75.P6

Only Configure:No
Affected branch:T800_MD
Affected module:Modem
Is it affected on both ZXIC and MTK:only MTK
Self-test:Yes
Doc Update:No

Change-Id: Id19a67bd78c05e3f07b27b5943045cc78cb5c24d
diff --git a/mcu/custom/protocol/common/ps/custom_ssds.c b/mcu/custom/protocol/common/ps/custom_ssds.c
index 1f265b4..62b9fa4 100755
--- a/mcu/custom/protocol/common/ps/custom_ssds.c
+++ b/mcu/custom/protocol/common/ps/custom_ssds.c
@@ -210,7 +210,6 @@
             break;
         case 1:/* CMCC */
         case 2:/* CU */
-        case 3:/* Orange */
         case 102:/* Smartone */
         case 112:/* Telcel */		
         case 125:/*DTAC-Thailand*/
@@ -243,10 +242,11 @@
         case 385: /* BH Mobile */
 		case 397:/* Mectel-Myanmar */
         case 410: /* Mtel-Bosnia and Herzegovina*/
-            *req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
-			is_changed = KAL_TRUE;
-            break;
+        case 415: /*my.t-Mauritius*/
 		case 420: /* Saudi Arabia -Redbull*/
+		case 430: /* Airtel- Nigeria */
+		case 436: /* Flow - Barbados*/
+		case 439: /* Airtel - Tanzania */
             *req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
             is_changed = KAL_TRUE;
             break;
@@ -254,6 +254,14 @@
             *req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_IMS;
             is_changed = KAL_TRUE;
             break;
+        case 3: /* Orange */
+            if(0 == strcmp(params_info->mcc, "226"))  /* Orange-Romania supports USSI */
+            {
+                break;
+            }
+            *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")) ||
@@ -310,7 +318,6 @@
             break;
         case 9:/* CT */
         case 304:/* CTMO: only support CF and CW --aomen*/
-        case 430: /* Airtel- Nigeria */
             *req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_NOT_SUPPORT;
             is_changed = KAL_TRUE;
             break;
@@ -407,6 +414,100 @@
 	return	req_ussd_path_type;
 }
 
+void  _custom_ssds_get_stk_ussd_req_path_default_config_by_op(custom_ssds_params_info_struct  *params_info,
+                                                          custom_ssds_ussd_path_type  *req_stk_ussd_path_type)
+{
+    kal_bool    is_changed = KAL_FALSE;
+
+    switch (params_info->op_id)
+    {
+        case 0: /* Default values */
+            break;
+        case 127: /*MEGAFON -RUSSIA */
+            *req_stk_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
+            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]stk_ussd path:%d, opid:%d",*req_stk_ussd_path_type, params_info->op_id);
+    }
+    return;
+}
+
+void  _custom_ssds_get_stk_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_stk_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->stk_ussd_path)
+    {
+        case CUSTOM_SSDS_USSD_REQ_PATH_CONFIG_IMS_IF_IMS_REGISTERED:
+            _custom_ssds_ussd_req_path_ims_select_rule(params_info, req_stk_ussd_path_type);
+            is_changed = KAL_TRUE;
+            break;
+        case CUSTOM_SSDS_USSD_REQ_PATH_CONFIG_CS:
+            *req_stk_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
+            is_changed = KAL_TRUE;
+            break;
+
+        case CUSTOM_SSDS_USSD_REQ_PATH_CONFIG_IMS:
+            *req_stk_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_IMS;
+            is_changed = KAL_TRUE;
+            break;
+
+        case CUSTOM_SSDS_USSD_REQ_PATH_CONFIG_NOT_SUPPORT:
+            *req_stk_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_stk_ussd_path:%d,atcmd_stk_ussd_path_type:%d",
+                                        cfg_type, nvram_ptr->stk_ussd_path, *req_stk_ussd_path_type);
+    }
+
+    return;
+}
+
+custom_ssds_ussd_path_type  custom_ssds_get_stk_ussd_req_path_variable ( custom_ssds_params_info_struct *params_info)
+{
+    custom_ssds_ussd_path_type  req_stk_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_INVALID;
+
+    /* Default configuration is same as USSD */
+    
+    /* Priority 4 :mcf ota config */
+    _custom_ssds_get_stk_ussd_req_path_from_config_file(params_info, CUSTOM_SSDS_CFG_TYPE_MCF_OTA, &req_stk_ussd_path_type);
+    
+    /* Priority 3 :default OP config */
+    _custom_ssds_get_stk_ussd_req_path_default_config_by_op(params_info, &req_stk_ussd_path_type);
+
+    /* Priority 2 :mcf ota by op config */
+    _custom_ssds_get_stk_ussd_req_path_from_config_file(params_info, CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP, &req_stk_ussd_path_type);
+
+    /* Priority 1 :nvram file- By ELT(Nvram editor) or Meta Tool */
+    _custom_ssds_get_stk_ussd_req_path_from_config_file(params_info, CUSTOM_SSDS_CFG_TYPE_NVRAM, &req_stk_ussd_path_type);
+
+    return  req_stk_ussd_path_type;
+}
+
 
 #endif
 
@@ -510,76 +611,161 @@
 #endif
 
 #if 1
-void _custom_ssds_need_sync_cw_in_234g_variable_default(module_type module,kal_bool *need_sync)
-{
-    *need_sync = KAL_FALSE;
 
+void custom_ssds_get_config_value_match(custom_ssds_params_info_struct *params_info,
+                                        custom_ssds_cw_sync_type       *need_sync,
+                                        kal_uint8                      cfg_value_id)
+{
+    if(cfg_value_id == NVRAM_SSDS_NEED_SYNC_CW_IN_234G)
+    {
+        if(*need_sync == SSDS_CW_SYNC_IMS_REGISTERED_NON_REAL_TIME_ELSE_REAL_TIME)
+{
+            if(params_info->is_ims_registered == KAL_TRUE)
+                *need_sync = SSDS_CW_SYNC_TYPE_NON_REAL_TIME;
+            else
+                *need_sync = SSDS_CW_SYNC_TYPE_REAL_TIME;
+        }
+    }
     return;
 }
 
-
-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_sync_cw_in_234g_variable_default(custom_ssds_params_info_struct *params_info,custom_ssds_cw_sync_type *need_sync)
 {
+    *need_sync = SSDS_CW_SYNC_TYPE_NONE;
+    return;
+}
+
+void _custom_ssds_need_sync_cw_in_234g_variable(custom_ssds_params_info_struct *params_info,custom_ssds_cw_sync_type *need_sync)
+{
+	kal_bool          is_changed = KAL_FALSE;
     /* 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)
+    switch(params_info->op_id)
     {
-        case 3:
-        case 108:
-        case 153:
-            *need_sync = KAL_TRUE;
+        case 3:   /* Orange */
+        case 108: /* TWN-TAIWAN */        
+		case 201: /* KPN-Netherlands */
+            *need_sync = SSDS_CW_SYNC_TYPE_REAL_TIME;
+			is_changed = KAL_TRUE;
             break;
+        case 120: /* CLARO */
+        {
+            if(0 == strcmp(params_info->mcc, "724")) /*Brazil */
+            {
+                *need_sync = SSDS_CW_SYNC_IMS_REGISTERED_NON_REAL_TIME_ELSE_REAL_TIME;
+                is_changed = KAL_TRUE;
+            }
+            break;
+        }
+		case 153: /* VHA-AUS */
+			*need_sync = SSDS_CW_SYNC_IMS_REGISTERED_NON_REAL_TIME_ELSE_REAL_TIME;
+			is_changed = KAL_TRUE;
+			break;
+		case 227: /* WIND */
+        {
+            if(0 == strcmp(params_info->mcc, "222")) /* Wind-Italy */
+            {
+				*need_sync = SSDS_CW_SYNC_TYPE_REAL_TIME;
+			    is_changed = KAL_TRUE;
+			}
+            break;
+		}
+		case 235: /* VIP */
+        {
+            if(0 == strcmp(params_info->mcc, "220")) /* Serbia */
+            {
+				*need_sync = SSDS_CW_SYNC_TYPE_REAL_TIME;
+			    is_changed = KAL_TRUE;
+			}
+            break;
+		}
+		case 155: /* Digi */
+        {
+            if(0 == strcmp(params_info->mcc, "502"))
+			{
+			    if(0 == strcmp(params_info->mnc, "16"))  /* Malaysia */
+                {
+                    *need_sync = SSDS_CW_SYNC_TYPE_REAL_TIME;
+			        is_changed = KAL_TRUE;
+                }
+            }
+			break;
+		}
+		case 6: /* Vodafone */
+        {
+			if(0 == strcmp(params_info->mcc, "530")) /* Vodafone - New Zealand*/
+            {
+                if(0 == strcmp(params_info->mnc, "01"))
+    {
+					*need_sync = SSDS_CW_SYNC_IMS_REGISTERED_NON_REAL_TIME_ELSE_REAL_TIME;
+			        is_changed = KAL_TRUE;
+                }
+            }
+			break;
+		}
+		case 121:/* BELL-CANADA */
+        {
+			*need_sync = SSDS_CW_SYNC_IMS_REGISTERED_NON_REAL_TIME_ELSE_REAL_TIME;
+			is_changed = KAL_TRUE;
+            break;
+        }
         default:
             break;
     }
-
+	if(is_changed == KAL_TRUE)
+	{
+		custom_ssds_get_config_value_match(params_info,&(*need_sync),NVRAM_SSDS_NEED_SYNC_CW_IN_234G);
+		kal_prompt_trace(MOD_SSDS+params_info->sim_id, "[Default Config by OP]CW sync:%d, opid:%d",*need_sync, params_info->op_id);
+	}
     return;
 }
-void _custom_ssds_need_sync_cw_in_234g_nvram_variable(module_type module,kal_bool *need_sync,
+
+void _custom_ssds_need_sync_cw_in_234g_nvram_variable(custom_ssds_params_info_struct *params_info,custom_ssds_cw_sync_type *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));
+    sim_interface_enum	         sim_id = params_info->sim_id;
 			
-    if (KAL_TRUE == (custom_ssds_config_get_common_config(NVRAM_SSDS_NEED_SYNC_CW_IN_234G, sim_id,(void*)need_sync,cfg_type)))
+    if (KAL_TRUE == (custom_ssds_config_get_common_config(NVRAM_SSDS_NEED_SYNC_CW_IN_234G, sim_id,&(*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
+		custom_ssds_get_config_value_match(params_info,&(*need_sync),NVRAM_SSDS_NEED_SYNC_CW_IN_234G);
+        kal_prompt_trace(MOD_SSDS, "Use NVRAM: if send sync cw in 234g");
+        kal_prompt_trace(MOD_SSDS,"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,
+void _custom_ssds_get_need_sync_cw_in_234g_from_common_file(custom_ssds_params_info_struct *params_info,custom_ssds_cw_sync_type *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);
+    custom_ssds_config_get_need_sync_cw_in_234g_from_common_file(params_info,&(*need_sync),cfg_type);
+	if(INVALID_VALUE != *need_sync) // Invalid value
+    {
+		custom_ssds_get_config_value_match(params_info,&(*need_sync),NVRAM_SSDS_NEED_SYNC_CW_IN_234G);
+        kal_prompt_trace(MOD_SSDS+params_info->sim_id, "[Config file]cfg_type:%d,need_sync_cw_in_234g is 0x%x in common config file",cfg_type,*need_sync);
+	}
 }
 
-
-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_sync_cw_in_234g_variable(custom_ssds_params_info_struct *params_info,custom_ssds_cw_sync_type *need_sync)
 {
     /* Priority 5 :default config */
-    _custom_ssds_need_sync_cw_in_234g_variable_default(module,need_sync);
+    _custom_ssds_need_sync_cw_in_234g_variable_default(params_info,&(*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);
+    _custom_ssds_need_sync_cw_in_234g_nvram_variable(params_info,&(*need_sync),CUSTOM_SSDS_CFG_TYPE_MCF_OTA);
+    _custom_ssds_get_need_sync_cw_in_234g_from_common_file(params_info,&(*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);
+    _custom_ssds_need_sync_cw_in_234g_variable(params_info,&(*need_sync));
 
     /* 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);
+    _custom_ssds_need_sync_cw_in_234g_nvram_variable(params_info,&(*need_sync),CUSTOM_SSDS_CFG_TYPE_MCF_OTA_BY_OP);
+    _custom_ssds_get_need_sync_cw_in_234g_from_common_file(params_info,&(*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);
+    _custom_ssds_need_sync_cw_in_234g_nvram_variable(params_info,&(*need_sync),CUSTOM_SSDS_CFG_TYPE_NVRAM);
+    _custom_ssds_get_need_sync_cw_in_234g_from_common_file(params_info,&(*need_sync),CUSTOM_SSDS_CFG_TYPE_NVRAM);
 
     return;
 }
@@ -682,6 +868,7 @@
     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 !*/
@@ -942,11 +1129,6 @@
                 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;
@@ -2097,6 +2279,24 @@
             {
                 atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
             }
+			/* special network config */
+            if(0 == strcmp(params_info->mcc, "635"))
+			{
+			    /* KTRN Rwanda*/
+				need_check_roaming_data_off = KAL_FALSE;
+				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:
+                    case CUSTOM_SSDS_ATCMD_TYPE_SET_CALL_WAITING:
+                    case CUSTOM_SSDS_ATCMD_TYPE_GET_CALL_WAITING:
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+                        break;
+                    default:
+                        break;
+                }
+			}
             break;
         }
         case 115: /* SKT */
@@ -2176,7 +2376,7 @@
                         atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
                         break;
                     default:
-                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
                         break;
                 }
 			}
@@ -2232,6 +2432,10 @@
                     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;
                 }
@@ -3008,8 +3212,7 @@
             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)
+                if(params_info->is_ims_registered)
                 {
                     atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
                 }
@@ -3119,6 +3322,19 @@
                         break;
                 }                            
             }
+            else if(0 == strcmp(params_info->mcc, "222"))
+			{
+                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 156: /* TELENOR */
@@ -3347,10 +3563,6 @@
 					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;
 			    }
@@ -4175,6 +4387,20 @@
                         break;
                 }
             }
+			else if(0 == strcmp(params_info->mcc, "708")) /* Tigo-Honduras*/
+			{
+			    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 = KAL_FALSE;
+
+			}
             break;
         }
         case 221:/* TPG-Singapore */
@@ -4706,16 +4932,10 @@
             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_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;				
+                    break;
                 default:
                     break;
             }
@@ -5543,6 +5763,20 @@
             }
             break;
         }
+        case 438: /* Ooredoo - Algeria */
+        {
+            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 1001: /* Ericsson-IODT */
         {
             /* default config */
@@ -5639,6 +5873,33 @@
 			need_check_roaming_data_off = KAL_FALSE;
 			break;
 		}
+        case 394: /* Telecom Andorra */
+        {
+            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            /*Special case: Support XCAP when LTE attached */
+            if(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:
+                     /* Support XCAP when LTE attached, else terminal based */
+                    if (KAL_FALSE == params_info->lte_attached)
+                    {
+                        atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
+                    }
+                    break;
+                default:
+                    break;
+            }
+            break;
+        }
         case 396: /* Thumb cellular -US */
         {
             switch(params_info->atcmd_type)
@@ -5657,6 +5918,40 @@
 			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
             break;
         }
+        case 400: /* Nova Iceland */
+        {
+            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;
+                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 401: /* Ooredo-Maldives */
+        {
+            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 408: /* Bitel -Peru */
         {
 			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
@@ -5683,6 +5978,20 @@
 			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
             break;
         }
+        case 415:/*my.t-Mauritius*/
+        {
+            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 417: /* ATLAS TELECOM - UAE */
         {
 			switch(params_info->atcmd_type)
@@ -5740,6 +6049,27 @@
 			}			
             break;
         }
+        case 423: /* Siminn/Iceland */
+        {
+            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;
+            }
+            if(params_info->roaming_status != CUSTOM_SSDS_ROAMING_TYPE_NO)
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            break;
+        }
         case 424: /* Vodafone/Iceland */
         {
             switch(params_info->atcmd_type)
@@ -5762,6 +6092,53 @@
 			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
             break;
         }
+        case 428: /* MCOM - Nigeria */
+		{
+			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_CS_ONLY;
+					break;
+                default:
+                    break;
+            }
+			need_check_roaming_data_off = KAL_FALSE;
+			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 429: /* Ethio/Telecom */
+        {
+            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)
+            {
+                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 430: /* Airtel - Nigeria*/
         {
 			switch(params_info->atcmd_type)
@@ -5803,6 +6180,87 @@
 			}
             break;
         }
+        case 432: /* Azercell - Azerbaijan */
+        {
+            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 435: /* Airtel - Zambia */
+        {
+            need_check_roaming_data_off_cs_only = KAL_TRUE;
+            break;
+        }
+        
+		case 436: /* Flow - Barbados*/
+		{
+			if(params_info->roaming_status != CUSTOM_SSDS_ROAMING_TYPE_NO)
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            break;
+		}
+
+        case 437:
+        {
+			/*Special case: Support XCAP when LTE attached */
+            if(KAL_TRUE == params_info->lte_attached)
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            }
+			else
+			{
+				atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+			}
+			break;
+        }
+        case 439: /* Airtel - Tanzania */
+        {
+            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;                 
+            }
+			need_check_roaming = KAL_TRUE;
+            break;
+        }
+		case 442: /* Liberty- Puerto Rico*/
+        {
+			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_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 443: /* Cubic Telecom*/
+		{
+			if(0 == strcmp(params_info->mccmnc, "29506") || 0 == strcmp(params_info->mccmnc, "72446"))
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+            break;
+		}
         case 1002: /* Nokia IODT */
         {
             /* default config */
@@ -6663,6 +7121,15 @@
             }
             break;
         }
+		case 442:/* Liberty-Puerto Rico */
+        {
+            /* Requires that when UE receives 404, 500, 502, 503 or 504 Error response from NW, it needs to CSFB */
+            if (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;
+        }
         default:
             break;
     }
@@ -6978,6 +7445,12 @@
 				    is_rat_mode_change_allowed  = KAL_TRUE;
 				}
 				break;
+            case 158: /* Zain */
+                if(0 == strcmp(params_info->mcc, "420")) /*SA*/
+                {
+                    is_rat_mode_change_allowed = KAL_TRUE;
+                }
+                break;
             default:
                 break;
         }