Merge "IPACM: support IPA power save feature"
diff --git a/ipacm/src/IPACM_Config.cpp b/ipacm/src/IPACM_Config.cpp
index 59d664e..ba0417d 100644
--- a/ipacm/src/IPACM_Config.cpp
+++ b/ipacm/src/IPACM_Config.cpp
@@ -187,39 +187,36 @@
 
 
 	/* Construct IPACM ipa_client map to rm_resource table */
-	ipa_client_rm_map_tbl[IPA_CLIENT_HSIC1_PROD]= IPA_RM_RESOURCE_HSIC_PROD;
-	ipa_client_rm_map_tbl[IPA_CLIENT_HSIC2_PROD]= IPA_RM_RESOURCE_HSIC_PROD;
-	ipa_client_rm_map_tbl[IPA_CLIENT_HSIC3_PROD]= IPA_RM_RESOURCE_HSIC_PROD;
-	ipa_client_rm_map_tbl[IPA_CLIENT_HSIC4_PROD]= IPA_RM_RESOURCE_HSIC_PROD;
-	ipa_client_rm_map_tbl[IPA_CLIENT_HSIC5_PROD]= IPA_RM_RESOURCE_HSIC_PROD;
+	ipa_client_rm_map_tbl[IPA_CLIENT_WLAN1_PROD]= IPA_RM_RESOURCE_WLAN_PROD;
 	ipa_client_rm_map_tbl[IPA_CLIENT_USB_PROD]= IPA_RM_RESOURCE_USB_PROD;
 	ipa_client_rm_map_tbl[IPA_CLIENT_A5_WLAN_AMPDU_PROD]= IPA_RM_RESOURCE_HSIC_PROD;
-//	ipa_client_rm_map_tbl[IPA_CLIENT_A2_EMBEDDED_PROD]= IPA_RM_RESOURCE_A2_PROD;
-//	ipa_client_rm_map_tbl[IPA_CLIENT_A2_TETHERED_PROD]= IPA_RM_RESOURCE_A2_PROD;
-	ipa_client_rm_map_tbl[IPA_CLIENT_HSIC1_CONS]= IPA_RM_RESOURCE_HSIC_CONS;
-	ipa_client_rm_map_tbl[IPA_CLIENT_HSIC2_CONS]= IPA_RM_RESOURCE_HSIC_CONS;
-	ipa_client_rm_map_tbl[IPA_CLIENT_HSIC3_CONS]= IPA_RM_RESOURCE_HSIC_CONS;
-	ipa_client_rm_map_tbl[IPA_CLIENT_HSIC4_CONS]= IPA_RM_RESOURCE_HSIC_CONS;
-	ipa_client_rm_map_tbl[IPA_CLIENT_HSIC5_CONS]= IPA_RM_RESOURCE_HSIC_CONS;
+	ipa_client_rm_map_tbl[IPA_CLIENT_A2_EMBEDDED_PROD]= IPA_RM_RESOURCE_Q6_PROD;
+	ipa_client_rm_map_tbl[IPA_CLIENT_A2_TETHERED_PROD]= IPA_RM_RESOURCE_Q6_PROD;
+	ipa_client_rm_map_tbl[IPA_CLIENT_APPS_LAN_WAN_PROD]= IPA_RM_RESOURCE_Q6_PROD;
+	ipa_client_rm_map_tbl[IPA_CLIENT_WLAN1_CONS]= IPA_RM_RESOURCE_WLAN_CONS;
+	ipa_client_rm_map_tbl[IPA_CLIENT_WLAN2_CONS]= IPA_RM_RESOURCE_WLAN_CONS;
+	ipa_client_rm_map_tbl[IPA_CLIENT_WLAN3_CONS]= IPA_RM_RESOURCE_WLAN_CONS;
+	ipa_client_rm_map_tbl[IPA_CLIENT_WLAN4_CONS]= IPA_RM_RESOURCE_WLAN_CONS;
 	ipa_client_rm_map_tbl[IPA_CLIENT_USB_CONS]= IPA_RM_RESOURCE_USB_CONS;
-//	ipa_client_rm_map_tbl[IPA_CLIENT_A2_EMBEDDED_CONS]= IPA_RM_RESOURCE_A2_CONS;
-//	ipa_client_rm_map_tbl[IPA_CLIENT_A2_TETHERED_CONS]= IPA_RM_RESOURCE_A2_CONS;	
+	ipa_client_rm_map_tbl[IPA_CLIENT_A2_EMBEDDED_CONS]= IPA_RM_RESOURCE_Q6_CONS;
+	ipa_client_rm_map_tbl[IPA_CLIENT_A2_TETHERED_CONS]= IPA_RM_RESOURCE_Q6_CONS;
+	ipa_client_rm_map_tbl[IPA_CLIENT_APPS_WAN_CONS]= IPA_RM_RESOURCE_Q6_CONS;
 
 	/* Create the entries which IPACM wants to add dependencies on */ 
-	ipa_rm_tbl[0].producer_rm1 = IPA_RM_RESOURCE_HSIC_PROD;
-//	ipa_rm_tbl[0].consumer_rm1 = IPA_RM_RESOURCE_A2_CONS;
-//	ipa_rm_tbl[0].producer_rm2 = IPA_RM_RESOURCE_A2_PROD;
-	ipa_rm_tbl[0].consumer_rm2 = IPA_RM_RESOURCE_HSIC_CONS;
+	ipa_rm_tbl[0].producer_rm1 = IPA_RM_RESOURCE_WLAN_PROD;
+	ipa_rm_tbl[0].consumer_rm1 = IPA_RM_RESOURCE_Q6_CONS;
+	ipa_rm_tbl[0].producer_rm2 = IPA_RM_RESOURCE_Q6_PROD;
+	ipa_rm_tbl[0].consumer_rm2 = IPA_RM_RESOURCE_WLAN_CONS;
 	
 	ipa_rm_tbl[1].producer_rm1 = IPA_RM_RESOURCE_USB_PROD;
-//	ipa_rm_tbl[1].consumer_rm1 = IPA_RM_RESOURCE_A2_CONS;
-//	ipa_rm_tbl[1].producer_rm2 = IPA_RM_RESOURCE_A2_PROD;
+	ipa_rm_tbl[1].consumer_rm1 = IPA_RM_RESOURCE_Q6_CONS;
+	ipa_rm_tbl[1].producer_rm2 = IPA_RM_RESOURCE_Q6_PROD;
 	ipa_rm_tbl[1].consumer_rm2 = IPA_RM_RESOURCE_USB_CONS;
 
-	ipa_rm_tbl[2].producer_rm1 = IPA_RM_RESOURCE_HSIC_PROD;
+	ipa_rm_tbl[2].producer_rm1 = IPA_RM_RESOURCE_WLAN_PROD;
 	ipa_rm_tbl[2].consumer_rm1 = IPA_RM_RESOURCE_USB_CONS;
 	ipa_rm_tbl[2].producer_rm2 = IPA_RM_RESOURCE_USB_PROD;
-	ipa_rm_tbl[2].consumer_rm2 = IPA_RM_RESOURCE_HSIC_CONS;
+	ipa_rm_tbl[2].consumer_rm2 = IPA_RM_RESOURCE_WLAN_CONS;
 	
 fail:
 	free(cfg);
@@ -344,12 +341,12 @@
    int retval = 0;
    struct ipa_ioc_rm_dependency dep;
 
-   /* ipa_rm_a2_check: IPA_RM_RESOURCE_A2_CONS*/
-//   if(rm1 == IPA_RM_RESOURCE_A2_CONS)
-//   {
-//     ipa_rm_a2_check+=1;
-//	 IPACMDBG("got %d times default RT routing from A2 \n", ipa_rm_a2_check);
-//   }
+   /* ipa_rm_a2_check: IPA_RM_RESOURCE_Q6_CONS*/
+   if(rm1 == IPA_RM_RESOURCE_Q6_CONS)
+   {
+     ipa_rm_a2_check+=1;
+	 IPACMDBG("got %d times default RT routing from A2 \n", ipa_rm_a2_check);
+   }
    
    for(int i=0;i<IPA_MAX_PRIVATE_SUBNET_ENTRIES;i++)
    {
@@ -454,12 +451,12 @@
    int retval = 0;
    struct ipa_ioc_rm_dependency dep;
 
-   /* ipa_rm_a2_check: IPA_RM_RESOURCE_A2_CONS*/
-//   if(rm1 == IPA_RM_RESOURCE_A2_CONS)
-//   {
-//     ipa_rm_a2_check-=1;
-//	 IPACMDBG("Left %d times default RT routing from A2 \n", ipa_rm_a2_check);
-//   }   
+   /* ipa_rm_a2_check: IPA_RM_RESOURCE_Q6_CONS*/
+   if(rm1 == IPA_RM_RESOURCE_Q6_CONS)
+   {
+     ipa_rm_a2_check-=1;
+	 IPACMDBG("Left %d times default RT routing from A2 \n", ipa_rm_a2_check);
+   }   
    
    for(int i=0;i<IPA_MAX_PRIVATE_SUBNET_ENTRIES;i++)
    {
@@ -505,12 +502,12 @@
          if(rm1 == ipa_rm_tbl[i].consumer_rm1)
 	 {
 	 
-	         /* ipa_rm_a2_check: IPA_RM_RESOURCE_A2_CONS*/
-//                 if(ipa_rm_tbl[i].consumer_rm1 == IPA_RM_RESOURCE_A2_CONS && ipa_rm_a2_check == 1)
-//                 {
-//	               IPACMDBG(" still have %d default RT routing from A2 \n", ipa_rm_a2_check);
-//                       continue;
-//                 }  	 
+	         /* ipa_rm_a2_check: IPA_RM_RESOURCE_!6_CONS*/
+                 if(ipa_rm_tbl[i].consumer_rm1 == IPA_RM_RESOURCE_Q6_CONS && ipa_rm_a2_check == 1)
+                 {
+	               IPACMDBG(" still have %d default RT routing from A2 \n", ipa_rm_a2_check);
+                       continue;
+                 }  	 
 	 
 	         if(ipa_rm_tbl[i].rm_set == true)
 		 {
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index 180615e..4670974 100644
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -1220,7 +1220,7 @@
 
 fail:
 	/* Delete corresponding ipa_rm_resource_name of RX-endpoint after delete all IPV4V6 FT-rule */ 
-	IPACM_Iface::ipacmcfg->DelRmDepend(IPA_RM_RESOURCE_HSIC_PROD);
+	IPACM_Iface::ipacmcfg->DelRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[rx_prop->rx[0].src_pipe]);
 
 	free(wlan_client);
 	if (tx_prop != NULL)