Commit 39176296 authored by Johannes Berg's avatar Johannes Berg
Browse files

wifi: iwlwifi: mvm: change iwl_mvm_flush_sta() API



This API is type unsafe and needs an extra parameter to know
what kind of station was passed, so it has two, but really it
only needs two values. Just pass the values instead of doing
this type-unsafe dance, which will also make it better to use
for multi-link.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20231011130030.aeb3bf4204cd.I5b0e6d64a67455784bc8fbdaf9ceaf03699d9ce1@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent abea0d06
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -5674,7 +5674,8 @@ void iwl_mvm_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
		}

		if (drop) {
			if (iwl_mvm_flush_sta(mvm, mvmsta, false))
			if (iwl_mvm_flush_sta(mvm, mvmsta->deflink.sta_id,
					      mvmsta->tfd_queue_msk))
				IWL_ERR(mvm, "flush request fail\n");
		} else {
			if (iwl_mvm_has_new_tx_api(mvm))
@@ -5711,7 +5712,8 @@ void iwl_mvm_mac_flush_sta(struct ieee80211_hw *hw, struct ieee80211_vif *vif,

		mvmsta = iwl_mvm_sta_from_mac80211(sta);

		if (iwl_mvm_flush_sta(mvm, mvmsta, false))
		if (iwl_mvm_flush_sta(mvm, mvmsta->deflink.sta_id,
				      mvmsta->tfd_queue_msk))
			IWL_ERR(mvm, "flush request fail\n");
	}
	mutex_unlock(&mvm->mutex);
+1 −1
Original line number Diff line number Diff line
@@ -347,7 +347,7 @@ static int iwl_mvm_mld_rm_int_sta(struct iwl_mvm *mvm,
		return -EINVAL;

	if (flush)
		iwl_mvm_flush_sta(mvm, int_sta, true);
		iwl_mvm_flush_sta(mvm, int_sta->sta_id, int_sta->tfd_queue_msk);

	iwl_mvm_mld_disable_txq(mvm, BIT(int_sta->sta_id), queuptr, tid);

+1 −1
Original line number Diff line number Diff line
@@ -1674,7 +1674,7 @@ const char *iwl_mvm_get_tx_fail_reason(u32 status);
static inline const char *iwl_mvm_get_tx_fail_reason(u32 status) { return ""; }
#endif
int iwl_mvm_flush_tx_path(struct iwl_mvm *mvm, u32 tfd_msk);
int iwl_mvm_flush_sta(struct iwl_mvm *mvm, void *sta, bool internal);
int iwl_mvm_flush_sta(struct iwl_mvm *mvm, u32 sta_id, u32 tfd_queue_mask);
int iwl_mvm_flush_sta_tids(struct iwl_mvm *mvm, u32 sta_id, u16 tids);

/* Utils to extract sta related data */
+6 −3
Original line number Diff line number Diff line
@@ -2098,7 +2098,8 @@ int iwl_mvm_rm_sta(struct iwl_mvm *mvm,
		return ret;

	/* flush its queues here since we are freeing mvm_sta */
	ret = iwl_mvm_flush_sta(mvm, mvm_sta, false);
	ret = iwl_mvm_flush_sta(mvm, mvm_sta->deflink.sta_id,
				mvm_sta->tfd_queue_msk);
	if (ret)
		return ret;
	if (iwl_mvm_has_new_tx_api(mvm)) {
@@ -2409,7 +2410,8 @@ void iwl_mvm_free_bcast_sta_queues(struct iwl_mvm *mvm,

	lockdep_assert_held(&mvm->mutex);

	iwl_mvm_flush_sta(mvm, &mvmvif->deflink.bcast_sta, true);
	iwl_mvm_flush_sta(mvm, mvmvif->deflink.bcast_sta.sta_id,
			  mvmvif->deflink.bcast_sta.tfd_queue_msk);

	switch (vif->type) {
	case NL80211_IFTYPE_AP:
@@ -2665,7 +2667,8 @@ int iwl_mvm_rm_mcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)

	lockdep_assert_held(&mvm->mutex);

	iwl_mvm_flush_sta(mvm, &mvmvif->deflink.mcast_sta, true);
	iwl_mvm_flush_sta(mvm, mvmvif->deflink.mcast_sta.sta_id,
			  mvmvif->deflink.mcast_sta.tfd_queue_msk);

	iwl_mvm_disable_txq(mvm, NULL, mvmvif->deflink.mcast_sta.sta_id,
			    &mvmvif->deflink.cab_queue, 0);
+4 −3
Original line number Diff line number Diff line
@@ -81,8 +81,8 @@ void iwl_mvm_roc_done_wk(struct work_struct *wk)
			struct ieee80211_vif *vif = mvm->p2p_device_vif;

			mvmvif = iwl_mvm_vif_from_mac80211(vif);
			iwl_mvm_flush_sta(mvm, &mvmvif->deflink.bcast_sta,
					  true);
			iwl_mvm_flush_sta(mvm, mvmvif->deflink.bcast_sta.sta_id,
					  mvmvif->deflink.bcast_sta.tfd_queue_msk);

			if (mvm->mld_api_is_used) {
				iwl_mvm_mld_rm_bcast_sta(mvm, vif,
@@ -113,7 +113,8 @@ void iwl_mvm_roc_done_wk(struct work_struct *wk)
	 */
	if (test_and_clear_bit(IWL_MVM_STATUS_ROC_AUX_RUNNING, &mvm->status)) {
		/* do the same in case of hot spot 2.0 */
		iwl_mvm_flush_sta(mvm, &mvm->aux_sta, true);
		iwl_mvm_flush_sta(mvm, mvm->aux_sta.sta_id,
				  mvm->aux_sta.tfd_queue_msk);

		if (mvm->mld_api_is_used) {
			iwl_mvm_mld_rm_aux_sta(mvm);
Loading