[Feature][Modem]Merge MTK release P3 P4 patch

Change-Id: I1ef3d69e36378ee73a422ecb2721488d6b416427
diff --git a/mcu/custom/protocol/common/ps/custom_ssds.c b/mcu/custom/protocol/common/ps/custom_ssds.c
index 666e2a1..b561706 100755
--- a/mcu/custom/protocol/common/ps/custom_ssds.c
+++ b/mcu/custom/protocol/common/ps/custom_ssds.c
@@ -240,12 +240,15 @@
         case 354: /* Poste Mobile/Italy */
         case 366: /* Appalachian-US */
         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 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")))
+               (0 == strcmp(params_info->mcc, "216")) || (0 == strcmp(params_info->mcc, "231")) ||
+               (0 == strcmp(params_info->mcc, "226")))
             {
                 *req_ussd_path_type = CUSTOM_SSDS_USSD_PATH_TYPE_CS;
                 is_changed = KAL_TRUE;
@@ -253,7 +256,7 @@
             break;
         case 120:/* Claro */
 		{
-			if(0 == strcmp(params_info->mcc, "370")) /* Claro-Dominican support USSI */
+			if((0 == strcmp(params_info->mcc, "370")) || (0 == strcmp(params_info->mcc, "740"))) /* Claro-Dominican/Ecuador support USSI */
 			{
                 break;
 			}
@@ -714,6 +717,7 @@
             break;
         }
         case 1:/* CMCC */
+		case 388:/* CBN China*/
         {
             atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
             switch(params_info->atcmd_type)
@@ -1259,6 +1263,21 @@
                     }
                 }
             }
+			else if(0 == strcmp(params_info->mcc, "655"))
+            {
+                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;
+                }
+            }
             else if(0 == strcmp(params_info->mcc, "222"))
             {
                 if(0 == strcmp(params_info->mnc, "10")) /* Vodafone-Italy */
@@ -1700,7 +1719,15 @@
         }
         case 15:/* TELEFONICA */
         {
-            atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            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:
@@ -1726,6 +1753,11 @@
                     atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_TB_SOLUTION;
                     break;
                 default:
+                    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;
             }
             break;
@@ -2244,6 +2276,20 @@
                     atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
                 }
             }
+			else if((0 == strcmp(params_info->mcc, "370"))) 
+			{
+			    /*Claro-Dominican*/
+				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;
+				}
+			}
+				
             break;
         }
         case 121: /* BELL */
@@ -2557,7 +2603,15 @@
         {
             if(0 == strcmp(params_info->mcc, "424")) /** United Arab Emirates **/
             {
+            if ((KAL_TRUE != params_info->is_ims_registered) || (KAL_TRUE != params_info->is_mobile_data_setting_enabled))
+                {
                 atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            	}
+			else
+				{
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_PREFER;
+            	}
+
                  switch(params_info->atcmd_type)
                 {
                     case CUSTOM_SSDS_ATCMD_TYPE_SET_CLIR:
@@ -2882,10 +2936,6 @@
 			{/* 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 */
@@ -3006,6 +3056,19 @@
                     }
                 }
             }
+            else if(0 == strcmp(params_info->mcc, "214"))
+			{
+                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 */
@@ -3496,27 +3559,43 @@
         }
         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;
+			if (0 == strcmp(params_info->mcc, "722")) /* Argentina */
+			{
+	            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;
+			}
+			else if (0 == strcmp(params_info->mcc, "744")) /* Paraguay */
+				{
+					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 184: /* VIETEL-Vietnam */
         {
@@ -3772,6 +3851,7 @@
         }
         case 202: /* SPARK-NZ */
         {
+			need_check_roaming_data_off = KAL_FALSE;
             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))
@@ -4025,6 +4105,22 @@
                 }
 
             }
+			else if(0 == strcmp(params_info->mcc, "714"))/* Tigo-Panama */
+            { 
+			   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;
+                }
+            }
             break;
         }
         case 221:/* TPG-Singapore */
@@ -4331,6 +4427,22 @@
             atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
             break;
         }
+		case 246: /* Ooredoo */
+        {
+            if(0 == strcmp(params_info->mcc, "427")) /* Qatar */
+            {
+				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;
+				}				
+            }
+            break;
+        }
 		case 247: /* Maroc Telecom */
         {
             if(0 == strcmp(params_info->mcc, "604")) /* Morocco */
@@ -4445,7 +4557,7 @@
             {
                 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;
+                    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:
@@ -5316,11 +5428,49 @@
 			need_check_roaming = KAL_TRUE;
 			break;
 		}
+		case 382:/*Zeop-French Reunion*/
+		{
+            if(params_info->ims_domain == CUSTOM_SSDS_IMS_DOMAIN_TYPE_WFC)
+            {
+                atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
+            }
+			break;
+		}		
 		case 387:/*West Central Wireless - US*/
 		{
 			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
 			break;
 		}
+		case 416:  /* Brazil-Brisanet special requirement for SS. Only CLIR/CW should be kept for Brazil-Brisanet*/
+        {
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_OPERATION_NOT_SUPPORTED_4;
+			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 418: /* Emtel - 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 1001: /* Ericsson-IODT */
         {
             /* default config */
@@ -5412,6 +5562,11 @@
 			}			
             break;
         }
+		case 393:/* IT-E Wireless - USA */
+		{
+			need_check_roaming_data_off = KAL_FALSE;
+			break;
+		}
         case 396: /* Thumb cellular -US */
         {
             switch(params_info->atcmd_type)
@@ -5425,16 +5580,63 @@
             }
             break;
         }
+        case 397: /* Mectel-Myanmar */
+        {
+			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
+            break;
+        }
         case 408: /* Bitel -Peru */
         {
 			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_CS_ONLY;
             break;
         }
-		case 411: /* Evolve - Broadband */
+        case 410: /* Mtel/Bosnia and Herzegovina */
+        {
+            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 411: /* Evolve - Broadband */
         {
 			atcmd_path_type = CUSTOM_SSDS_PATH_TYPE_PS_ONLY;
             break;
         }
+		case 417: /* ATLAS TELECOM - UAE */
+        {
+			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 419: /* Airtel - Uganda */
+        {
+			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 1002: /* Nokia IODT */
         {
             /* default config */
@@ -5719,6 +5921,56 @@
             }
             break;
         }
+		case 388:/* CBN China*/
+        {
+            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;
+            }
+			if(403 == params_info->rsp_id || 831 == params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_NO;
+            }
+            break;
+        }
         case 2:/* CU */
         {
 			is_need_sync_to_cs = KAL_FALSE;
@@ -6237,6 +6489,14 @@
 			}
             break;
 		}
+        case 397:/* Mectel - Myanmar */
+        {
+            if (200 != params_info->rsp_id)
+            {
+                rsp_path = CUSTOM_SSDS_CSFB_TYPE_ONCE;
+            }
+            break;
+        }
         default:
             break;
     }
@@ -6494,6 +6754,12 @@
                 is_ussi_allowed_during_ims_call  = KAL_FALSE;
             }
             break;			
+		case 246: /* Ooredoo */
+            if(0 == strcmp(params_info->mcc, "427")) /* Ooredoo-Qatar */
+            {
+                is_ussi_allowed_during_ims_call  = KAL_FALSE;
+            }
+            break;
 		default:
 			break;
 	}
@@ -6522,6 +6788,18 @@
 			case 151: /* M1-Singapore */			
                 is_rat_mode_change_allowed  = KAL_TRUE;
                 break;
+			case 120:  /* Claro */	 	 
+                if (0 == strcmp(params_info->mcc,"724")) /* Brazil */
+				{
+				    is_rat_mode_change_allowed  = KAL_TRUE;
+				}
+				break;
+			case 132: /* Movistar*/
+				if(0 == strcmp(params_info->mcc,"724")) /* Brazil*/
+				{
+				    is_rat_mode_change_allowed  = KAL_TRUE;
+				}
+				break;
             default:
                 break;
         }