diff options
author | Ilan Peer <ilan.peer@intel.com> | 2018-01-22 09:44:09 -0500 |
---|---|---|
committer | Luca Coelho <luciano.coelho@intel.com> | 2018-03-28 15:43:37 -0400 |
commit | d270e7b8fa8e68c6d08910e353b7674b182dc1c2 (patch) | |
tree | 2c5b44f861bd0d42ccd8607bfc7ef806ef3cbfd1 | |
parent | 8f691af967293319668058efdc10f560b65bd651 (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.c | 4 |
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. |