1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- From: Johannes Berg <johannes.berg@intel.com>
- Date: Mon, 13 Mar 2023 12:05:35 +0100
- Subject: [PATCH] wifi: iwlwifi: mvm: support new flush_sta method
- For iwlwifi this is simple to implement, and on newer hardware
- it's an improvement since we have per-station queues.
- Signed-off-by: Johannes Berg <johannes.berg@intel.com>
- Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
- ---
- --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
- +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
- @@ -4890,6 +4890,31 @@ static void iwl_mvm_mac_flush(struct iee
- iwl_trans_wait_tx_queues_empty(mvm->trans, msk);
- }
-
- +static void iwl_mvm_mac_flush_sta(struct ieee80211_hw *hw,
- + struct ieee80211_vif *vif,
- + struct ieee80211_sta *sta)
- +{
- + struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
- + int i;
- +
- + mutex_lock(&mvm->mutex);
- + for (i = 0; i < mvm->fw->ucode_capa.num_stations; i++) {
- + struct iwl_mvm_sta *mvmsta;
- + struct ieee80211_sta *tmp;
- +
- + tmp = rcu_dereference_protected(mvm->fw_id_to_mac_id[i],
- + lockdep_is_held(&mvm->mutex));
- + if (tmp != sta)
- + continue;
- +
- + mvmsta = iwl_mvm_sta_from_mac80211(sta);
- +
- + if (iwl_mvm_flush_sta(mvm, mvmsta, false))
- + IWL_ERR(mvm, "flush request fail\n");
- + }
- + mutex_unlock(&mvm->mutex);
- +}
- +
- static int iwl_mvm_mac_get_survey(struct ieee80211_hw *hw, int idx,
- struct survey_info *survey)
- {
- @@ -5417,6 +5442,7 @@ const struct ieee80211_ops iwl_mvm_hw_op
- .mgd_complete_tx = iwl_mvm_mac_mgd_complete_tx,
- .mgd_protect_tdls_discover = iwl_mvm_mac_mgd_protect_tdls_discover,
- .flush = iwl_mvm_mac_flush,
- + .flush_sta = iwl_mvm_mac_flush_sta,
- .sched_scan_start = iwl_mvm_mac_sched_scan_start,
- .sched_scan_stop = iwl_mvm_mac_sched_scan_stop,
- .set_key = iwl_mvm_mac_set_key,
|