aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/intel/iwlwifi
diff options
context:
space:
mode:
authorAndrei Otcheretianski <andrei.otcheretianski@intel.com>2016-01-26 11:12:28 -0500
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2016-02-01 09:40:29 -0500
commitc89e333d5e4a27f736c960b29040b261c21563a5 (patch)
tree6b2a23074ea27d210644c9894b8dec9a57cb5ca7 /drivers/net/wireless/intel/iwlwifi
parentd56a7801b544d63b0d32bc8bca0c12a259b1d8e9 (diff)
iwlwifi: mvm: allow to disable beacon filtering for AP/GO interface
When in AP mode we need to filter in beacons from other APs to update HT operation mode. As a power optimization the beacons are filtered out when there are no associated stations. As a result, when there are no associated stations, we will not update the HT operation mode until a station connects. Add a debugfs parameter that allows to disable this optimization. Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi')
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c3
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c2
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mvm.h6
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/ops.c1
4 files changed, 11 insertions, 1 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c b/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c
index 005cc09757d2..c529e5355803 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c
@@ -1548,6 +1548,9 @@ int iwl_mvm_dbgfs_register(struct iwl_mvm *mvm, struct dentry *dbgfs_dir)
1548 mvm->debugfs_dir, 1548 mvm->debugfs_dir,
1549 &mvm->scan_iter_notif_enabled)) 1549 &mvm->scan_iter_notif_enabled))
1550 goto err; 1550 goto err;
1551 if (!debugfs_create_bool("drop_bcn_ap_mode", S_IRUSR | S_IWUSR,
1552 mvm->debugfs_dir, &mvm->drop_bcn_ap_mode))
1553 goto err;
1551 1554
1552#ifdef CONFIG_IWLWIFI_BCAST_FILTERING 1555#ifdef CONFIG_IWLWIFI_BCAST_FILTERING
1553 if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_BCAST_FILTERING) { 1556 if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_BCAST_FILTERING) {
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
index 62927f567afc..535134d639e0 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
@@ -744,7 +744,7 @@ static void iwl_mvm_mac_ctxt_cmd_common(struct iwl_mvm *mvm,
744 * wake-ups. 744 * wake-ups.
745 */ 745 */
746 cmd->filter_flags |= cpu_to_le32(MAC_FILTER_IN_PROBE_REQUEST); 746 cmd->filter_flags |= cpu_to_le32(MAC_FILTER_IN_PROBE_REQUEST);
747 if (mvmvif->ap_assoc_sta_count) { 747 if (mvmvif->ap_assoc_sta_count || !mvm->drop_bcn_ap_mode) {
748 cmd->filter_flags |= cpu_to_le32(MAC_FILTER_IN_BEACON); 748 cmd->filter_flags |= cpu_to_le32(MAC_FILTER_IN_BEACON);
749 IWL_DEBUG_HC(mvm, "Asking FW to pass beacons\n"); 749 IWL_DEBUG_HC(mvm, "Asking FW to pass beacons\n");
750 } else { 750 } else {
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
index 747f7eb80f47..ebe37bb0ce4c 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
@@ -859,6 +859,12 @@ struct iwl_mvm {
859 859
860 u32 ciphers[6]; 860 u32 ciphers[6];
861 struct iwl_mvm_tof_data tof_data; 861 struct iwl_mvm_tof_data tof_data;
862
863 /*
864 * Drop beacons from other APs in AP mode when there are no connected
865 * clients.
866 */
867 bool drop_bcn_ap_mode;
862}; 868};
863 869
864/* Extract MVM priv from op_mode and _hw */ 870/* Extract MVM priv from op_mode and _hw */
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
index 325ff8aa33f5..09a94a5efb61 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
@@ -492,6 +492,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
492 } 492 }
493 mvm->sf_state = SF_UNINIT; 493 mvm->sf_state = SF_UNINIT;
494 mvm->cur_ucode = IWL_UCODE_INIT; 494 mvm->cur_ucode = IWL_UCODE_INIT;
495 mvm->drop_bcn_ap_mode = true;
495 496
496 mutex_init(&mvm->mutex); 497 mutex_init(&mvm->mutex);
497 mutex_init(&mvm->d0i3_suspend_mutex); 498 mutex_init(&mvm->d0i3_suspend_mutex);