2023-03-29 15:54:19 +00:00
|
|
|
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
|
2024-06-27 23:32:46 +00:00
|
|
|
@@ -4880,6 +4880,31 @@ static void iwl_mvm_mac_flush(struct iee
|
2023-03-29 15:54:19 +00:00
|
|
|
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)
|
|
|
|
{
|
2024-06-27 23:32:46 +00:00
|
|
|
@@ -5407,6 +5432,7 @@ const struct ieee80211_ops iwl_mvm_hw_op
|
2023-03-29 15:54:19 +00:00
|
|
|
.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,
|