| 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 |
| @@ -4853,6 +4853,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) |
| { |
| @@ -5366,6 +5391,7 @@ const struct ieee80211_ops iwl_mvm_hw_op |
| .mgd_prepare_tx = iwl_mvm_mac_mgd_prepare_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, |