diff options
author | Andrei Otcheretianski <andrei.otcheretianski@intel.com> | 2016-01-26 11:12:28 -0500 |
---|---|---|
committer | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2016-02-01 09:40:29 -0500 |
commit | c89e333d5e4a27f736c960b29040b261c21563a5 (patch) | |
tree | 6b2a23074ea27d210644c9894b8dec9a57cb5ca7 /drivers/net/wireless/intel/iwlwifi | |
parent | d56a7801b544d63b0d32bc8bca0c12a259b1d8e9 (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.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 6 | ||||
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 1 |
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); |