aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlan Peer <ilan.peer@intel.com>2018-01-22 09:44:09 -0500
committerLuca Coelho <luciano.coelho@intel.com>2018-03-28 15:43:37 -0400
commitd270e7b8fa8e68c6d08910e353b7674b182dc1c2 (patch)
tree2c5b44f861bd0d42ccd8607bfc7ef806ef3cbfd1
parent8f691af967293319668058efdc10f560b65bd651 (diff)
iwlwifi: mvm: Allow iwl_mvm_mac_mgd_prepare_tx() when associated
The FW does not allocate quota air time for the binding of a station MAC before iwlmvm indicates that it is associated. Currently iwlmvm indicates that the MAC is associated only after hearing a beacon from the AP. In case a deauthentication frame is sent before the MAC is associated, the frame might not be sent as the corresponding binding is not scheduled. To handle such cases, set IEEE80211_HW_DEAUTH_NEED_MGD_TX_PREP in the HW flags, requesting mac80211 to call the mgd_prepare_tx() callback before transmitting a deauthentication frame if associated but no beacon was heard from the AP. In addition, do not warn in iwl_mvm_mac_mgd_prepare_tx() when already associated as now the callback can be called also when associated. Signed-off-by: Ilan Peer <ilan.peer@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
index 82dc9dec4160..51b30424575b 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
@@ -421,6 +421,7 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
421 ieee80211_hw_set(hw, SUPPORTS_CLONED_SKBS); 421 ieee80211_hw_set(hw, SUPPORTS_CLONED_SKBS);
422 ieee80211_hw_set(hw, SUPPORTS_AMSDU_IN_AMPDU); 422 ieee80211_hw_set(hw, SUPPORTS_AMSDU_IN_AMPDU);
423 ieee80211_hw_set(hw, NEEDS_UNIQUE_STA_ADDR); 423 ieee80211_hw_set(hw, NEEDS_UNIQUE_STA_ADDR);
424 ieee80211_hw_set(hw, DEAUTH_NEED_MGD_TX_PREP);
424 425
425 if (iwl_mvm_has_tlc_offload(mvm)) { 426 if (iwl_mvm_has_tlc_offload(mvm)) {
426 ieee80211_hw_set(hw, TX_AMPDU_SETUP_IN_HW); 427 ieee80211_hw_set(hw, TX_AMPDU_SETUP_IN_HW);
@@ -2815,9 +2816,6 @@ static void iwl_mvm_mac_mgd_prepare_tx(struct ieee80211_hw *hw,
2815 u32 duration = IWL_MVM_TE_SESSION_PROTECTION_MAX_TIME_MS; 2816 u32 duration = IWL_MVM_TE_SESSION_PROTECTION_MAX_TIME_MS;
2816 u32 min_duration = IWL_MVM_TE_SESSION_PROTECTION_MIN_TIME_MS; 2817 u32 min_duration = IWL_MVM_TE_SESSION_PROTECTION_MIN_TIME_MS;
2817 2818
2818 if (WARN_ON_ONCE(vif->bss_conf.assoc))
2819 return;
2820
2821 /* 2819 /*
2822 * iwl_mvm_protect_session() reads directly from the device 2820 * iwl_mvm_protect_session() reads directly from the device
2823 * (the system time), so make sure it is available. 2821 * (the system time), so make sure it is available.