aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorManoharan, Rajkumar <rmanohar@qca.qualcomm.com>2016-11-23 09:58:11 -0500
committerKalle Valo <kvalo@qca.qualcomm.com>2016-11-23 14:41:37 -0500
commit705d7aa062203226c8df73f18622664e30bd8a61 (patch)
tree7084bc58c3390ac7d911051d016b7ee051208fe6 /drivers/net/wireless
parent5608eaf7b0862b32f1c22d89ea97ade564d9469c (diff)
ath10k: fix monitor vdev for receiving other bss frames
In order to receive other BSS entries in mesh mode, Monitor vdev is created whenever filter flag is set with OTHER_BSS. Recently it is root caused that setting promisc filter for Mesh interface is causing performance and stability issues. To fix this issue, firmware will configure appropriate rxfilters by default for mesh vdev during vdev creation. This change fixes monitor vdev creation based on firmware IE Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/ath/ath10k/core.c1
-rw-r--r--drivers/net/wireless/ath/ath10k/core.h7
-rw-r--r--drivers/net/wireless/ath/ath10k/mac.c4
3 files changed, 11 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
index 7005e2a98726..b796be1d6318 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -326,6 +326,7 @@ static const char *const ath10k_core_fw_feature_str[] = {
326 [ATH10K_FW_FEATURE_PEER_FLOW_CONTROL] = "peer-flow-ctrl", 326 [ATH10K_FW_FEATURE_PEER_FLOW_CONTROL] = "peer-flow-ctrl",
327 [ATH10K_FW_FEATURE_BTCOEX_PARAM] = "btcoex-param", 327 [ATH10K_FW_FEATURE_BTCOEX_PARAM] = "btcoex-param",
328 [ATH10K_FW_FEATURE_SKIP_NULL_FUNC_WAR] = "skip-null-func-war", 328 [ATH10K_FW_FEATURE_SKIP_NULL_FUNC_WAR] = "skip-null-func-war",
329 [ATH10K_FW_FEATURE_ALLOWS_MESH_BCAST] = "allows-mesh-bcast",
329}; 330};
330 331
331static unsigned int ath10k_core_get_fw_feature_str(char *buf, 332static unsigned int ath10k_core_get_fw_feature_str(char *buf,
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
index 6f2608a501e2..6d06ec5cd087 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -562,6 +562,13 @@ enum ath10k_fw_features {
562 */ 562 */
563 ATH10K_FW_FEATURE_SKIP_NULL_FUNC_WAR = 15, 563 ATH10K_FW_FEATURE_SKIP_NULL_FUNC_WAR = 15,
564 564
565 /* Firmware allow other BSS mesh broadcast/multicast frames without
566 * creating monitor interface. Appropriate rxfilters are programmed for
567 * mesh vdev by firmware itself. This feature flags will be used for
568 * not creating monitor vdev while configuring mesh node.
569 */
570 ATH10K_FW_FEATURE_ALLOWS_MESH_BCAST = 16,
571
565 /* keep last */ 572 /* keep last */
566 ATH10K_FW_FEATURE_COUNT, 573 ATH10K_FW_FEATURE_COUNT,
567}; 574};
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 3918097ee46f..d06a12d548fd 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -1167,7 +1167,9 @@ static bool ath10k_mac_monitor_vdev_is_needed(struct ath10k *ar)
1167 return false; 1167 return false;
1168 1168
1169 return ar->monitor || 1169 return ar->monitor ||
1170 ar->filter_flags & FIF_OTHER_BSS || 1170 (!test_bit(ATH10K_FW_FEATURE_ALLOWS_MESH_BCAST,
1171 ar->running_fw->fw_file.fw_features) &&
1172 (ar->filter_flags & FIF_OTHER_BSS)) ||
1171 test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); 1173 test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags);
1172} 1174}
1173 1175