ANDROID: iwl7000: mld: prevent EMLSR when NAN is active

EMLSR is not allowed when NAN is active. Block EMLSR when starting NAN,
and unblock EMLSR when NAN is stopped.

Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Change-Id: Ie94e5f32db003ebce33bde65e0ed8c6d98673b5a
iwl7000-tree: 4f030ae0e1fe9c9388f7101dad2f7f01f6edcfc3
diff --git a/iwlwifi/mld/iface.h b/iwlwifi/mld/iface.h
index 2546a05..ce44e37 100644
--- a/iwlwifi/mld/iface.h
+++ b/iwlwifi/mld/iface.h
@@ -32,6 +32,7 @@
  *      link is preventing EMLSR. This is a temporary blocking that is set when
  *      there is an indication that a non-BSS interface is to be added.
  * @IWL_MLD_EMLSR_BLOCKED_TPT: throughput is too low to make EMLSR worthwhile
+ * @IWL_MLD_EMLSR_BLOCKED_NAN: NAN is preventing EMLSR.
  */
 enum iwl_mld_emlsr_blocked {
 	IWL_MLD_EMLSR_BLOCKED_PREVENTION	= 0x1,
@@ -40,6 +41,7 @@
 	IWL_MLD_EMLSR_BLOCKED_NON_BSS		= 0x8,
 	IWL_MLD_EMLSR_BLOCKED_TMP_NON_BSS	= 0x10,
 	IWL_MLD_EMLSR_BLOCKED_TPT		= 0x20,
+	IWL_MLD_EMLSR_BLOCKED_NAN		= 0x40,
 };
 
 /**
diff --git a/iwlwifi/mld/mac80211.c b/iwlwifi/mld/mac80211.c
index 9b30f49..b2f6b58 100644
--- a/iwlwifi/mld/mac80211.c
+++ b/iwlwifi/mld/mac80211.c
@@ -1924,6 +1924,9 @@
 			/* Ensure any block due to a non-BSS link is synced */
 			iwl_mld_emlsr_check_non_bss_block(mld, 0);
 
+			/* Ensure NAN block is synced */
+			iwl_mld_emlsr_check_nan_block(mld, vif);
+
 			/* Block EMLSR until a certain throughput it reached */
 			if (!mld->fw_status.in_hw_restart &&
 			    IWL_MLD_ENTER_EMLSR_TPT_THRESH > 0)
diff --git a/iwlwifi/mld/mlo.c b/iwlwifi/mld/mlo.c
index 8b500f0..1254fbd 100644
--- a/iwlwifi/mld/mlo.c
+++ b/iwlwifi/mld/mlo.c
@@ -12,7 +12,8 @@
 	HOW(ROC)			\
 	HOW(NON_BSS)			\
 	HOW(TMP_NON_BSS)		\
-	HOW(TPT)
+	HOW(TPT)			\
+	HOW(NAN)
 
 static const char *
 iwl_mld_get_emlsr_blocked_string(enum iwl_mld_emlsr_blocked blocked)
@@ -478,8 +479,8 @@
 	}
 }
 
-static int iwl_mld_update_emlsr_block(struct iwl_mld *mld, bool block,
-				      enum iwl_mld_emlsr_blocked reason)
+int iwl_mld_update_emlsr_block(struct iwl_mld *mld, bool block,
+			       enum iwl_mld_emlsr_blocked reason)
 {
 	struct iwl_mld_update_emlsr_block_data block_data = {
 		.block = block,
@@ -1217,3 +1218,8 @@
 						iwl_mld_ignore_tpt_iter,
 						&start);
 }
+
+int iwl_mld_emlsr_check_nan_block(struct iwl_mld *mld, struct ieee80211_vif *vif)
+{
+	return 0;
+}
diff --git a/iwlwifi/mld/mlo.h b/iwlwifi/mld/mlo.h
index bbccf17..a78af01 100644
--- a/iwlwifi/mld/mlo.h
+++ b/iwlwifi/mld/mlo.h
@@ -150,6 +150,11 @@
  */
 void iwl_mld_retry_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif);
 
+int iwl_mld_emlsr_check_nan_block(struct iwl_mld *mld, struct ieee80211_vif *vif);
+
+int iwl_mld_update_emlsr_block(struct iwl_mld *mld, bool block,
+			       enum iwl_mld_emlsr_blocked reason);
+
 struct iwl_mld_link_sel_data {
 	u8 link_id;
 	const struct cfg80211_chan_def *chandef;
diff --git a/iwlwifi/mld/nan.c b/iwlwifi/mld/nan.c
index 9f52c95..bd46539 100644
--- a/iwlwifi/mld/nan.c
+++ b/iwlwifi/mld/nan.c
@@ -5,6 +5,7 @@
 
 #include "mld.h"
 #include "iface.h"
+#include "mlo.h"
 #include "fw/api/mac-cfg.h"
 
 #define IWL_NAN_DISOVERY_BEACON_INTERNVAL_TU 512