Remove the hack in makefile, now IPACM will support dynamically
both WLAN has RX_prop or none

Change-Id: I15609b0f2939c6a7d457dad190fc220318fe51a2
diff --git a/ipacm/inc/IPACM_Config.h b/ipacm/inc/IPACM_Config.h
index d9f8989..27c7ff3 100644
--- a/ipacm/inc/IPACM_Config.h
+++ b/ipacm/inc/IPACM_Config.h
@@ -57,9 +57,10 @@
     ipa_rm_resource_name consumer_rm1;
     ipa_rm_resource_name producer_rm2; 
     ipa_rm_resource_name consumer_rm2;
-    bool producer_up;
-    bool consumer_up;
-	bool rm_set;
+    bool producer1_up;            /* only monitor producer_rm1, not monitor producer_rm2 */
+    bool consumer1_up;            /* only monitor consumer_rm1, not monitor consumer_rm2 */
+    bool rm_set;                  /* once producer1_up and consumer1_up, will add bi-directional dependency */
+    bool rx_bypass_ipa;          /* support WLAN may not register RX-property, should not add dependency */    
 }ipa_rm_client;
 
 /* iface */
@@ -124,7 +125,7 @@
 	int GetNonNatIfaces(int nPorts, NonNatIfaces *ifaces);
 
 	/* for IPACM resource manager dependency usage */
-	void AddRmDepend(ipa_rm_resource_name rm1);
+	void AddRmDepend(ipa_rm_resource_name rm1,bool rx_bypass_ipa);
  
 	void DelRmDepend(ipa_rm_resource_name rm1);
 	
diff --git a/ipacm/src/IPACM_Config.cpp b/ipacm/src/IPACM_Config.cpp
index 6455b5b..ae658b2 100644
--- a/ipacm/src/IPACM_Config.cpp
+++ b/ipacm/src/IPACM_Config.cpp
@@ -271,8 +271,9 @@
 }
 
 /* for IPACM resource manager dependency usage
-   add either Tx or Rx ipa_rm_resource_name */
-void IPACM_Config::AddRmDepend(ipa_rm_resource_name rm1)
+   add either Tx or Rx ipa_rm_resource_name and
+   also indicate that endpoint property if valid */
+void IPACM_Config::AddRmDepend(ipa_rm_resource_name rm1,bool rx_bypass_ipa)
 {
    int retval = 0;
    int m_fd = 0; /* File descriptor of the IPA device node /dev/ipa */
@@ -294,112 +295,93 @@
    
    for(int i=0;i<IPA_MAX_PRIVATE_SUBNET_ENTRIES;i++)
    {
-       if(rm1 == ipa_rm_tbl[i].producer_rm1)
+           if(rm1 == ipa_rm_tbl[i].producer_rm1)
 	   { 
-	       ipa_rm_tbl[i].producer_up = true;
-	       IPACMDBG("Matched RM_table entry: %d's producer_rm1 \n", i);
+	           ipa_rm_tbl[i].producer1_up = true;
+		   
+		   /* entry1's producer actually dun have registered Rx-property */
+		   ipa_rm_tbl[i].rx_bypass_ipa = rx_bypass_ipa;
+	           IPACMDBG("Matched RM_table entry: %d's producer_rm1 with non_rx_prop: %d \n", i,ipa_rm_tbl[i].rx_bypass_ipa);
 	     
-           if(ipa_rm_tbl[i].consumer_up == true && ipa_rm_tbl[i].rm_set == false)
-           {
-              IPACMDBG("SETUP RM_table entry %d's bi-direction dependency  \n", i);
-	          /* add bi-directional dependency*/
-#ifdef WLAN_SW_RX
-              if(ipa_rm_tbl[i].producer_rm1 == IPA_RM_RESOURCE_HSIC_PROD)
-              {
+                   if(ipa_rm_tbl[i].consumer1_up == true && ipa_rm_tbl[i].rm_set == false)
+                   {
+                          IPACMDBG("SETUP RM_table entry %d's bi-direction dependency  \n", i);
+	                  /* add bi-directional dependency*/
+			  if(ipa_rm_tbl[i].rx_bypass_ipa)
+                          {
 			     IPACMDBG("Skip ADD entry %d's dependency between WLAN-Pro: %d, Con: %d \n", i, ipa_rm_tbl[i].producer_rm1,ipa_rm_tbl[i].consumer_rm1);	  
-		      }
-              else
-              {		  
-	          memset(&dep, 0, sizeof(dep));
-	          dep.resource_name = ipa_rm_tbl[i].producer_rm1;
-	          dep.depends_on_name = ipa_rm_tbl[i].consumer_rm1;
-	          retval = ioctl(m_fd, IPA_IOC_RM_ADD_DEPENDENCY, &dep);
+		          }
+                          else
+                          {		  
+	                     memset(&dep, 0, sizeof(dep));
+	                     dep.resource_name = ipa_rm_tbl[i].producer_rm1;
+	                     dep.depends_on_name = ipa_rm_tbl[i].consumer_rm1;
+	                     retval = ioctl(m_fd, IPA_IOC_RM_ADD_DEPENDENCY, &dep);
+			     IPACMDBG("ADD entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
+	                     if (retval)
+	                     {
+	          	         IPACMERR("Failed adding dependecny for RM_table entry %d's bi-direction dependency (error:%d) \n", i,retval);
+	                     }
+	                  }	
+	          
+	                  memset(&dep, 0, sizeof(dep));
+	                  dep.resource_name = ipa_rm_tbl[i].producer_rm2;
+	                  dep.depends_on_name = ipa_rm_tbl[i].consumer_rm2;
+	                  retval = ioctl(m_fd, IPA_IOC_RM_ADD_DEPENDENCY, &dep);
 			  IPACMDBG("ADD entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
-	          if (retval)
-	          {
-	          	 IPACMERR("Failed adding dependecny for RM_table entry %d's bi-direction dependency (error:%d) \n", i,retval);
-	          }
-	     }	
-#else
-	          memset(&dep, 0, sizeof(dep));
-	          dep.resource_name = ipa_rm_tbl[i].producer_rm1;
-	          dep.depends_on_name = ipa_rm_tbl[i].consumer_rm1;
-	          retval = ioctl(m_fd, IPA_IOC_RM_ADD_DEPENDENCY, &dep);
-			  IPACMDBG("ADD entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
-	          if (retval)
-	          {
-	          	 IPACMERR("Failed adding dependecny for RM_table entry %d's bi-direction dependency (error:%d) \n", i,retval);
-	          }		   
-#endif	          
-	          memset(&dep, 0, sizeof(dep));
-	          dep.resource_name = ipa_rm_tbl[i].producer_rm2;
-	          dep.depends_on_name = ipa_rm_tbl[i].consumer_rm2;
-	          retval = ioctl(m_fd, IPA_IOC_RM_ADD_DEPENDENCY, &dep);
-			  IPACMDBG("ADD entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
-	          if (retval)
-	          {
-	          	 IPACMERR("Failed adding dependecny for RM_table entry %d's bi-direction dependency (error:%d)  \n", i,retval);
-	          }
-	          ipa_rm_tbl[i].rm_set = true;
-           }
-           else
-           {
-              IPACMDBG("Not SETUP RM_table entry %d: prod_up:%d, cons_up:%d, rm_set: %d \n", i,ipa_rm_tbl[i].producer_up, ipa_rm_tbl[i].consumer_up, ipa_rm_tbl[i].rm_set);   
-           }	   
+	                  if (retval)
+	                  {
+	          	      IPACMERR("Failed adding dependecny for RM_table entry %d's bi-direction dependency (error:%d)  \n", i,retval);
+	                  }
+	                  ipa_rm_tbl[i].rm_set = true;
+                   }
+                   else
+                   {
+                          IPACMDBG("Not SETUP RM_table entry %d: prod_up:%d, cons_up:%d, rm_set: %d \n", i,ipa_rm_tbl[i].producer1_up, ipa_rm_tbl[i].consumer1_up, ipa_rm_tbl[i].rm_set);   
+                   }	   
 	   }
 	   
-       if(rm1 == ipa_rm_tbl[i].consumer_rm1)
+           if(rm1 == ipa_rm_tbl[i].consumer_rm1)
 	   {
-	       ipa_rm_tbl[i].consumer_up = true;
-	       IPACMDBG("Matched RM_table entry: %d's consumer_rm1 \n", i);
+	            ipa_rm_tbl[i].consumer1_up = true;
+	            IPACMDBG("Matched RM_table entry: %d's consumer_rm1 \n", i);
        
-           if(ipa_rm_tbl[i].producer_up == true && ipa_rm_tbl[i].rm_set == false)
-           {
-              IPACMDBG("SETUP RM_table entry %d's bi-direction dependency  \n", i);
-	          /* add bi-directional dependency*/
-#ifdef WLAN_SW_RX
-              if(ipa_rm_tbl[i].producer_rm1 == IPA_RM_RESOURCE_HSIC_PROD)
-              {
+                    if(ipa_rm_tbl[i].producer1_up == true && ipa_rm_tbl[i].rm_set == false)
+                    {
+                          IPACMDBG("SETUP RM_table entry %d's bi-direction dependency  \n", i);
+	                  /* add bi-directional dependency*/
+			  if(ipa_rm_tbl[i].rx_bypass_ipa)
+                          {
 			     IPACMDBG("Skip ADD entry %d's dependency between WLAN-Pro: %d, Con: %d \n", i, ipa_rm_tbl[i].producer_rm1,ipa_rm_tbl[i].consumer_rm1);	  
-		      }
-              else
-              {		  
-	          memset(&dep, 0, sizeof(dep));
-	          dep.resource_name = ipa_rm_tbl[i].producer_rm1;
-	          dep.depends_on_name = ipa_rm_tbl[i].consumer_rm1;
-	          retval = ioctl(m_fd, IPA_IOC_RM_ADD_DEPENDENCY, &dep);
+		          }
+                          else
+                          {		  
+	                     memset(&dep, 0, sizeof(dep));
+	                     dep.resource_name = ipa_rm_tbl[i].producer_rm1;
+	                     dep.depends_on_name = ipa_rm_tbl[i].consumer_rm1;
+	                     retval = ioctl(m_fd, IPA_IOC_RM_ADD_DEPENDENCY, &dep);
+			     IPACMDBG("ADD entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
+	                     if (retval)
+	                     {
+	          	          IPACMERR("Failed adding dependecny for RM_table entry %d's bi-direction dependency (error:%d)  \n", i,retval);
+	                     }
+ 	                  }	
+			  	
+	                  memset(&dep, 0, sizeof(dep));
+	                  dep.resource_name = ipa_rm_tbl[i].producer_rm2;
+	                  dep.depends_on_name = ipa_rm_tbl[i].consumer_rm2;
+	                  retval = ioctl(m_fd, IPA_IOC_RM_ADD_DEPENDENCY, &dep);
 			  IPACMDBG("ADD entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
-	          if (retval)
-	          {
-	          	 IPACMERR("Failed adding dependecny for RM_table entry %d's bi-direction dependency (error:%d)  \n", i,retval);
-	          }
- 	      }	
-#else
-	          memset(&dep, 0, sizeof(dep));
-	          dep.resource_name = ipa_rm_tbl[i].producer_rm1;
-	          dep.depends_on_name = ipa_rm_tbl[i].consumer_rm1;
-	          retval = ioctl(m_fd, IPA_IOC_RM_ADD_DEPENDENCY, &dep);
-			  IPACMDBG("ADD entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
-	          if (retval)
-	          {
-	          	 IPACMERR("Failed adding dependecny for RM_table entry %d's bi-direction dependency (error:%d)  \n", i,retval);
-	          }
-#endif	
-	          memset(&dep, 0, sizeof(dep));
-	          dep.resource_name = ipa_rm_tbl[i].producer_rm2;
-	          dep.depends_on_name = ipa_rm_tbl[i].consumer_rm2;
-	          retval = ioctl(m_fd, IPA_IOC_RM_ADD_DEPENDENCY, &dep);
-			  IPACMDBG("ADD entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
-	          if (retval)
-	          {
-	          	 IPACMERR("Failed adding dependecny for RM_table entry %d's bi-direction dependency (error:%d)  \n", i,retval);
-	          }
-	          ipa_rm_tbl[i].rm_set = true;
-           }
-           else
-           {
-              IPACMDBG("Not SETUP RM_table entry %d: prod_up:%d, cons_up:%d, rm_set: %d \n", i,ipa_rm_tbl[i].producer_up, ipa_rm_tbl[i].consumer_up, ipa_rm_tbl[i].rm_set);   
-           }
+	                  if (retval)
+	                  {
+	          	      IPACMERR("Failed adding dependecny for RM_table entry %d's bi-direction dependency (error:%d)  \n", i,retval);
+	                  }
+	                  ipa_rm_tbl[i].rm_set = true;
+                   }
+                   else
+                   {
+                          IPACMDBG("Not SETUP RM_table entry %d: prod_up:%d, cons_up:%d, rm_set: %d \n", i,ipa_rm_tbl[i].producer1_up, ipa_rm_tbl[i].consumer1_up, ipa_rm_tbl[i].rm_set);   
+                   }
        
 	   }	 
    }
@@ -433,110 +415,89 @@
    for(int i=0;i<IPA_MAX_PRIVATE_SUBNET_ENTRIES;i++)
    {
    
-     if(rm1 == ipa_rm_tbl[i].producer_rm1)
+         if(rm1 == ipa_rm_tbl[i].producer_rm1)
 	 { 
-	     if(ipa_rm_tbl[i].rm_set == true)
+	         if(ipa_rm_tbl[i].rm_set == true)
 		 {
-	        IPACMDBG("Matched RM_table entry: %d's producer_rm1 and dependency is up \n", i);
-	        ipa_rm_tbl[i].rm_set = false;            
-		    /* delete bi-directional dependency*/
-#ifdef WLAN_SW_RX
-            if(ipa_rm_tbl[i].producer_rm1 == IPA_RM_RESOURCE_HSIC_PROD)
-            {
- 		       IPACMDBG("Skip DEL entry %d's dependency between WLAN-Pro: %d, Con: %d \n", i, ipa_rm_tbl[i].producer_rm1,ipa_rm_tbl[i].consumer_rm1);	  
-		    }
-            else
-            {
-	        memset(&dep, 0, sizeof(dep));
-	        dep.resource_name = ipa_rm_tbl[i].producer_rm1;
-	        dep.depends_on_name = ipa_rm_tbl[i].consumer_rm1;
-	        retval = ioctl(m_fd, IPA_IOC_RM_DEL_DEPENDENCY, &dep);
-			IPACMDBG("Delete entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
-	        if (retval)
-	        {
+	               IPACMDBG("Matched RM_table entry: %d's producer_rm1 and dependency is up \n", i);
+	               ipa_rm_tbl[i].rm_set = false;            
+
+		       /* delete bi-directional dependency*/
+		if(ipa_rm_tbl[i].rx_bypass_ipa)
+                       {
+ 		             IPACMDBG("Skip DEL entry %d's dependency between WLAN-Pro: %d, Con: %d \n", i, ipa_rm_tbl[i].producer_rm1,ipa_rm_tbl[i].consumer_rm1);	  
+		       }
+                       else
+                       {
+	                     memset(&dep, 0, sizeof(dep));
+	                     dep.resource_name = ipa_rm_tbl[i].producer_rm1;
+	                     dep.depends_on_name = ipa_rm_tbl[i].consumer_rm1;
+	                     retval = ioctl(m_fd, IPA_IOC_RM_DEL_DEPENDENCY, &dep);
+			     IPACMDBG("Delete entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
+	                     if (retval)
+	                     {
+	        	          IPACMERR("Failed deleting dependecny for RM_table entry %d's bi-direction dependency (error:%d) \n", i,retval);
+	                     }
+                       }
+	               memset(&dep, 0, sizeof(dep));
+	               dep.resource_name = ipa_rm_tbl[i].producer_rm2;
+	               dep.depends_on_name = ipa_rm_tbl[i].consumer_rm2;
+	               retval = ioctl(m_fd, IPA_IOC_RM_DEL_DEPENDENCY, &dep);
+		       IPACMDBG("Delete entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
+	               if (retval)
+	               {
 	        	  IPACMERR("Failed deleting dependecny for RM_table entry %d's bi-direction dependency (error:%d) \n", i,retval);
-	        }
-             }
-#else
-	         memset(&dep, 0, sizeof(dep));
-	         dep.resource_name = ipa_rm_tbl[i].producer_rm1;
-	         dep.depends_on_name = ipa_rm_tbl[i].consumer_rm1;
-	         retval = ioctl(m_fd, IPA_IOC_RM_DEL_DEPENDENCY, &dep);
-			 IPACMDBG("Delete entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
-	         if (retval)
-	         {
-	         	  IPACMERR("Failed deleting dependecny for RM_table entry %d's bi-direction dependency (error:%d) \n", i,retval);
+	               }
 	         }
-#endif				
-	        memset(&dep, 0, sizeof(dep));
-	        dep.resource_name = ipa_rm_tbl[i].producer_rm2;
-	        dep.depends_on_name = ipa_rm_tbl[i].consumer_rm2;
-	        retval = ioctl(m_fd, IPA_IOC_RM_DEL_DEPENDENCY, &dep);
-			IPACMDBG("Delete entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
-	        if (retval)
-	        {
-	        	  IPACMERR("Failed deleting dependecny for RM_table entry %d's bi-direction dependency (error:%d) \n", i,retval);
-	        }
-	     }
-	     ipa_rm_tbl[i].producer_up = false;
-	     
+	         ipa_rm_tbl[i].producer1_up = false;     
+	      ipa_rm_tbl[i].rx_bypass_ipa = false;
 	 }
 	 
-     if(rm1 == ipa_rm_tbl[i].consumer_rm1)
+         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_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;
+                 }  	 
 	 
-	     if(ipa_rm_tbl[i].rm_set == true)
+	         if(ipa_rm_tbl[i].rm_set == true)
 		 {
-	         IPACMDBG("Matched RM_table entry: %d's consumer_rm1 and dependency is up \n", i);
-             ipa_rm_tbl[i].rm_set = false;
-             /* delete bi-directional dependency*/
-#ifdef WLAN_SW_RX
-             if(ipa_rm_tbl[i].producer_rm1 == IPA_RM_RESOURCE_HSIC_PROD)
-             {
- 		       IPACMDBG("Skip DEL entry %d's dependency between WLAN-Pro: %d, Con: %d \n", i, ipa_rm_tbl[i].producer_rm1,ipa_rm_tbl[i].consumer_rm1);	  
-		     }
-             else
-             {
-	            memset(&dep, 0, sizeof(dep));
-	            dep.resource_name = ipa_rm_tbl[i].producer_rm1;
-	            dep.depends_on_name = ipa_rm_tbl[i].consumer_rm1;
-	            retval = ioctl(m_fd, IPA_IOC_RM_DEL_DEPENDENCY, &dep);
-			    IPACMDBG("Delete entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
-	            if (retval)
-	            {
-	            	  IPACMERR("Failed deleting dependecny for RM_table entry %d's bi-direction dependency (error:%d) \n", i,retval);
-	            }
-	     }
-#else
-	         memset(&dep, 0, sizeof(dep));
-	         dep.resource_name = ipa_rm_tbl[i].producer_rm1;
-	         dep.depends_on_name = ipa_rm_tbl[i].consumer_rm1;
-	         retval = ioctl(m_fd, IPA_IOC_RM_DEL_DEPENDENCY, &dep);
-			 IPACMDBG("Delete entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
-	         if (retval)
-	         {
+	               IPACMDBG("Matched RM_table entry: %d's consumer_rm1 and dependency is up \n", i);
+                       ipa_rm_tbl[i].rm_set = false;
+             
+                       /* delete bi-directional dependency*/
+                  if(ipa_rm_tbl[i].rx_bypass_ipa)
+                       {
+ 		              IPACMDBG("Skip DEL entry %d's dependency between WLAN-Pro: %d, Con: %d \n", i, ipa_rm_tbl[i].producer_rm1,ipa_rm_tbl[i].consumer_rm1);	  
+		       }
+                       else
+                       {
+	                      memset(&dep, 0, sizeof(dep));
+	                      dep.resource_name = ipa_rm_tbl[i].producer_rm1;
+	                      dep.depends_on_name = ipa_rm_tbl[i].consumer_rm1;
+	                      retval = ioctl(m_fd, IPA_IOC_RM_DEL_DEPENDENCY, &dep);
+			      IPACMDBG("Delete entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
+	                      if (retval)
+	                      {
+	            	           IPACMERR("Failed deleting dependecny for RM_table entry %d's bi-direction dependency (error:%d) \n", i,retval);
+	                      }
+	               }
+			
+	               memset(&dep, 0, sizeof(dep));
+	               dep.resource_name = ipa_rm_tbl[i].producer_rm2;
+	               dep.depends_on_name = ipa_rm_tbl[i].consumer_rm2;
+	               retval = ioctl(m_fd, IPA_IOC_RM_DEL_DEPENDENCY, &dep);
+		       IPACMDBG("Delete entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
+	               if (retval)
+	               {
 	         	  IPACMERR("Failed deleting dependecny for RM_table entry %d's bi-direction dependency (error:%d) \n", i,retval);
-	         }
-#endif	             
-	         memset(&dep, 0, sizeof(dep));
-	         dep.resource_name = ipa_rm_tbl[i].producer_rm2;
-	         dep.depends_on_name = ipa_rm_tbl[i].consumer_rm2;
-	         retval = ioctl(m_fd, IPA_IOC_RM_DEL_DEPENDENCY, &dep);
-			 IPACMDBG("Delete entry %d's dependency between Pro: %d, Con: %d \n", i,dep.resource_name,dep.depends_on_name);
-	         if (retval)
-	         {
-	         	  IPACMERR("Failed deleting dependecny for RM_table entry %d's bi-direction dependency (error:%d) \n", i,retval);
-	         }
+	               }
 		 }
- 	     ipa_rm_tbl[i].consumer_up = false;		 
-	 }	 
+ 	         ipa_rm_tbl[i].consumer1_up = false;		 
+	}	 
    }
 
    return ;
diff --git a/ipacm/src/IPACM_Iface.cpp b/ipacm/src/IPACM_Iface.cpp
index 736c84a..d717007 100644
--- a/ipacm/src/IPACM_Iface.cpp
+++ b/ipacm/src/IPACM_Iface.cpp
@@ -519,11 +519,11 @@
 	int res = IPACM_SUCCESS, len = 0;
 	struct ipa_flt_rule_add flt_rule_entry;
 	ipa_ioc_add_flt_rule *m_pFilteringTable;
-#ifdef WLAN_SW_RX
-    /* Adding this hack because WLAN may not registered for Rx-endpoint, other ifaces will always have*/
+        /* Adding this hack because WLAN may not registered for Rx-endpoint, other ifaces will always have*/
 	char *dev_wlan0="wlan0";
 	char *dev_wlan1="wlan1";
-#endif
+	char *dev_ecm0="ecm0";
+
 	/* update the iface ip-type to be IPA_IP_v4, IPA_IP_v6 or both*/
 	if (iptype == IPA_IP_v4)
 	{
@@ -567,23 +567,26 @@
 	}
 
     /* ADD corresponding ipa_rm_resource_name of RX-endpoint before adding all IPV4V6 FT-rules */
-#ifdef WLAN_SW_RX
-	if(strcmp(dev_name,dev_wlan0) == 0 || strcmp(dev_name,dev_wlan1) == 0)
+	if(rx_prop != NULL)
 	{
-	  /* dev_name ==  dev2 (wlan0)*/
-	  IPACMDBG(" work-around setup iface %s rx property\n", dev_wlan0);
-	  IPACM_Iface::ipacmcfg->AddRmDepend(IPA_RM_RESOURCE_HSIC_PROD);	
+	    IPACM_Iface::ipacmcfg->AddRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[rx_prop->rx[0].src_pipe],false);
+		IPACMDBG(" add producer dependency from %s with registered rx-prop\n", dev_name);
 	}
 	else
 	{
-	  if(rx_prop != NULL)
+	     /* only wlan may take software-path, not register Rx-property*/
+	        if(strcmp(dev_name,dev_wlan0) == 0 || strcmp(dev_name,dev_wlan1) == 0)
 	  {
-	      IPACM_Iface::ipacmcfg->AddRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[rx_prop->rx[0].src_pipe]);		
+	       IPACM_Iface::ipacmcfg->AddRmDepend(IPA_RM_RESOURCE_HSIC_PROD,true);	
+		    IPACMDBG(" add producer dependency from %s without registered rx-prop \n", dev_name);
+	     }
+		 
+	     if(strcmp(dev_name,dev_ecm0) == 0)
+	     {
+	       IPACM_Iface::ipacmcfg->AddRmDepend(IPA_RM_RESOURCE_USB_PROD,true);	
+		    IPACMDBG(" add producer dependency from %s without registered rx-prop \n", dev_name);
 	  }
 	}
-#else
-  	IPACM_Iface::ipacmcfg->AddRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[rx_prop->rx[0].src_pipe]);
-#endif
 	
 	if (rx_prop == NULL)
 	{
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index 95f042a..37cd8de 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -331,7 +331,7 @@
 			   }	   
 		   
 	               /* Add corresponding ipa_rm_resource_name of TX-endpoint up before IPV6 RT-rule set */
-	               IPACM_Iface::ipacmcfg->AddRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[tx_prop->tx[0].dst_pipe]);
+	               IPACM_Iface::ipacmcfg->AddRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[tx_prop->tx[0].dst_pipe],false);
 		   
 		       /* not see this ipv6 before for LAN client*/
 			   v6_addr[ipv6_set][0] = data->ipv6_addr[0];
@@ -510,7 +510,7 @@
 	    }
 
                 /* Add corresponding ipa_rm_resource_name of TX-endpoint up before IPV4 RT-rule set */
-	        IPACM_Iface::ipacmcfg->AddRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[tx_prop->tx[0].dst_pipe]);
+	    IPACM_Iface::ipacmcfg->AddRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[tx_prop->tx[0].dst_pipe],false);
 
 		/* unicast RT rule add start */
 		rt_rule = (struct ipa_ioc_add_rt_rule *)
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index f8e180d..f2edb55 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -615,7 +615,7 @@
 	}
 
 	/* Add corresponding ipa_rm_resource_name of TX-endpoint up before IPV6 RT-rule set */
-        IPACM_Iface::ipacmcfg->AddRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[tx_prop->tx[0].dst_pipe]);
+        IPACM_Iface::ipacmcfg->AddRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[tx_prop->tx[0].dst_pipe],false);
 	
 	return IPACM_SUCCESS;
 }
@@ -964,18 +964,6 @@
 		if (IPACM_SUCCESS == IPACM_read_firewall_xml(firewall_config.firewall_config_file, &firewall_config))
 		{
 			IPACMDBG("QCMAP Firewall XML read OK \n");
-		}
-		else
-		{
-			IPACMERR("QCMAP Firewall XML read failed, no that file, use default configuration \n");
-		}
-	}
-	else
-	{
-		IPACMERR("No firewall xml mentioned \n");
-		return IPACM_FAILURE;
-	}
-
 	/* find the number of v4/v6 firewall rules */
 	for (i = 0; i < firewall_config.num_extd_firewall_entries; i++)
 	{
@@ -988,8 +976,18 @@
 			rule_v6++;
 		}
 	}
-
 	IPACMDBG("firewall rule v4:%d v6:%d total:%d\n", rule_v4, rule_v6, firewall_config.num_extd_firewall_entries);
+		}
+		else
+		{
+			IPACMERR("QCMAP Firewall XML read failed, no that file, use default configuration \n");
+		}
+	}
+	else
+	{
+		IPACMERR("No firewall xml mentioned \n");
+		return IPACM_FAILURE;
+	}
 
 	/* construct ipa_ioc_add_flt_rule with N firewall rules */
 	ipa_ioc_add_flt_rule *m_pFilteringTable;
diff --git a/ipacm/src/Makefile.am b/ipacm/src/Makefile.am
index 02959e8..1eac45a 100644
--- a/ipacm/src/Makefile.am
+++ b/ipacm/src/Makefile.am
@@ -2,7 +2,6 @@
 	      -I$(top_srcdir)/ipanat/inc \
 	      ${LIBXML_CFLAGS}
 AM_CPPFLAGS += -Wall -Wundef -Wno-trigraphs
-AM_CPPFLAGS += -DWLAN_SW_RX
 AM_CPPFLAGS	+= -DDEBUG
 
 ipacm_SOURCES =	IPACM_Main.cpp \