diff options
Diffstat (limited to 'sys/contrib/dev/iwlwifi/mvm/sta.c')
| -rw-r--r-- | sys/contrib/dev/iwlwifi/mvm/sta.c | 244 | 
1 files changed, 89 insertions, 155 deletions
| diff --git a/sys/contrib/dev/iwlwifi/mvm/sta.c b/sys/contrib/dev/iwlwifi/mvm/sta.c index f47b3f6b8f64..3fc774c2ca39 100644 --- a/sys/contrib/dev/iwlwifi/mvm/sta.c +++ b/sys/contrib/dev/iwlwifi/mvm/sta.c @@ -1,6 +1,6 @@  // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause  /* - * Copyright (C) 2012-2015, 2018-2024 Intel Corporation + * Copyright (C) 2012-2015, 2018-2025 Intel Corporation   * Copyright (C) 2013-2015 Intel Mobile Communications GmbH   * Copyright (C) 2016-2017 Intel Deutschland GmbH   */ @@ -32,7 +32,7 @@ int iwl_mvm_find_free_sta_id(struct iwl_mvm *mvm, enum nl80211_iftype iftype)  	int sta_id;  	u32 reserved_ids = 0; -	BUILD_BUG_ON(IWL_MVM_STATION_COUNT_MAX > 32); +	BUILD_BUG_ON(IWL_STATION_COUNT_MAX > 32);  	WARN_ON_ONCE(test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status));  	lockdep_assert_held(&mvm->mutex); @@ -50,7 +50,7 @@ int iwl_mvm_find_free_sta_id(struct iwl_mvm *mvm, enum nl80211_iftype iftype)  					       lockdep_is_held(&mvm->mutex)))  			return sta_id;  	} -	return IWL_MVM_INVALID_STA; +	return IWL_INVALID_STA;  }  /* Calculate the ampdu density and max size */ @@ -256,7 +256,7 @@ int iwl_mvm_sta_send_to_fw(struct iwl_mvm *mvm, struct ieee80211_sta *sta,  static void iwl_mvm_rx_agg_session_expired(struct timer_list *t)  {  	struct iwl_mvm_baid_data *data = -		from_timer(data, t, session_timer); +		timer_container_of(data, t, session_timer);  	struct iwl_mvm_baid_data __rcu **rcu_ptr = data->rcu_ptr;  	struct iwl_mvm_baid_data *ba_data;  	struct ieee80211_sta *sta; @@ -794,10 +794,10 @@ static int iwl_mvm_find_free_queue(struct iwl_mvm *mvm, u8 sta_id,  	lockdep_assert_held(&mvm->mutex); -	if (WARN(maxq >= mvm->trans->trans_cfg->base_params->num_of_queues, +	if (WARN(maxq >= mvm->trans->mac_cfg->base->num_of_queues,  		 "max queue %d >= num_of_queues (%d)", maxq, -		 mvm->trans->trans_cfg->base_params->num_of_queues)) -		maxq = mvm->trans->trans_cfg->base_params->num_of_queues - 1; +		 mvm->trans->mac_cfg->base->num_of_queues)) +		maxq = mvm->trans->mac_cfg->base->num_of_queues - 1;  	/* This should not be hit with new TX path */  	if (WARN_ON(iwl_mvm_has_new_tx_api(mvm))) @@ -855,7 +855,7 @@ int iwl_mvm_tvqm_enable_txq(struct iwl_mvm *mvm,  	if (tid == IWL_MAX_TID_COUNT) {  		tid = IWL_MGMT_TID;  		size = max_t(u32, IWL_MGMT_QUEUE_SIZE, -			     mvm->trans->cfg->min_txq_size); +			     mvm->trans->mac_cfg->base->min_txq_size);  	} else {  		size = iwl_mvm_get_queue_size(sta);  	} @@ -903,7 +903,7 @@ static int iwl_mvm_sta_alloc_queue_tvqm(struct iwl_mvm *mvm,  	struct iwl_mvm_txq *mvmtxq =  		iwl_mvm_txq_from_tid(sta, tid);  	unsigned int wdg_timeout = -		iwl_mvm_get_wd_timeout(mvm, mvmsta->vif, false, false); +		iwl_mvm_get_wd_timeout(mvm, mvmsta->vif);  	int queue = -1;  	lockdep_assert_held(&mvm->mutex); @@ -1083,7 +1083,7 @@ static void iwl_mvm_unshare_queue(struct iwl_mvm *mvm, int queue)  		return;  	mvmsta = iwl_mvm_sta_from_mac80211(sta); -	wdg_timeout = iwl_mvm_get_wd_timeout(mvm, mvmsta->vif, false, false); +	wdg_timeout = iwl_mvm_get_wd_timeout(mvm, mvmsta->vif);  	ssn = IEEE80211_SEQ_TO_SN(mvmsta->tid_data[tid].seq_number); @@ -1219,7 +1219,7 @@ static bool iwl_mvm_remove_inactive_tids(struct iwl_mvm *mvm,   * can be unshared and finding one (and only one) that can be   * reused.   * This function is also invoked as a sort of clean-up task, - * in which case @alloc_for_sta is IWL_MVM_INVALID_STA. + * in which case @alloc_for_sta is IWL_INVALID_STA.   *   * Returns the queue number, or -ENOSPC.   */ @@ -1312,7 +1312,7 @@ static int iwl_mvm_inactivity_check(struct iwl_mvm *mvm, u8 alloc_for_sta)  	rcu_read_unlock(); -	if (free_queue >= 0 && alloc_for_sta != IWL_MVM_INVALID_STA) { +	if (free_queue >= 0 && alloc_for_sta != IWL_INVALID_STA) {  		ret = iwl_mvm_free_inactive_queue(mvm, free_queue, queue_owner,  						  alloc_for_sta);  		if (ret) @@ -1333,7 +1333,7 @@ static int iwl_mvm_sta_alloc_queue(struct iwl_mvm *mvm,  		.frame_limit = IWL_FRAME_LIMIT,  	};  	unsigned int wdg_timeout = -		iwl_mvm_get_wd_timeout(mvm, mvmsta->vif, false, false); +		iwl_mvm_get_wd_timeout(mvm, mvmsta->vif);  	int queue = -1;  	u16 queue_tmp;  	unsigned long disable_agg_tids = 0; @@ -1523,9 +1523,14 @@ void iwl_mvm_add_new_dqa_stream_wk(struct work_struct *wk)  	struct iwl_mvm *mvm = container_of(wk, struct iwl_mvm,  					   add_stream_wk); -	mutex_lock(&mvm->mutex); +	guard(mvm)(mvm); -	iwl_mvm_inactivity_check(mvm, IWL_MVM_INVALID_STA); +	/* will reschedule to run after restart */ +	if (test_bit(IWL_MVM_STATUS_HW_RESTART_REQUESTED, &mvm->status) || +	    test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status)) +		return; + +	iwl_mvm_inactivity_check(mvm, IWL_INVALID_STA);  	while (!list_empty(&mvm->add_stream_txqs)) {  		struct iwl_mvm_txq *mvmtxq; @@ -1567,8 +1572,6 @@ void iwl_mvm_add_new_dqa_stream_wk(struct work_struct *wk)  		iwl_mvm_mac_itxq_xmit(mvm->hw, txq);  		local_bh_enable();  	} - -	mutex_unlock(&mvm->mutex);  }  static int iwl_mvm_reserve_sta_stream(struct iwl_mvm *mvm, @@ -1583,7 +1586,7 @@ static int iwl_mvm_reserve_sta_stream(struct iwl_mvm *mvm,  		return 0;  	/* run the general cleanup/unsharing of queues */ -	iwl_mvm_inactivity_check(mvm, IWL_MVM_INVALID_STA); +	iwl_mvm_inactivity_check(mvm, IWL_INVALID_STA);  	/* Make sure we have free resources for this STA */  	if (vif_type == NL80211_IFTYPE_STATION && !sta->tdls && @@ -1625,7 +1628,7 @@ void iwl_mvm_realloc_queues_after_restart(struct iwl_mvm *mvm,  {  	struct iwl_mvm_sta *mvm_sta = iwl_mvm_sta_from_mac80211(sta);  	unsigned int wdg = -		iwl_mvm_get_wd_timeout(mvm, mvm_sta->vif, false, false); +		iwl_mvm_get_wd_timeout(mvm, mvm_sta->vif);  	int i;  	struct iwl_trans_txq_scd_cfg cfg = {  		.sta_id = mvm_sta->deflink.sta_id, @@ -1759,13 +1762,13 @@ int iwl_mvm_sta_init(struct iwl_mvm *mvm, struct ieee80211_vif *vif,  	 * this function  	 */  	if (!mvm->mld_api_is_used) { -		if (WARN_ON(sta_id == IWL_MVM_INVALID_STA)) +		if (WARN_ON(sta_id == IWL_INVALID_STA))  			return -EINVAL;  		mvm_sta->deflink.sta_id = sta_id;  		rcu_assign_pointer(mvm_sta->link[0], &mvm_sta->deflink); -		if (!mvm->trans->trans_cfg->gen2) +		if (!mvm->trans->mac_cfg->gen2)  			mvm_sta->deflink.lq_sta.rs_drv.pers.max_agg_bufsize =  				LINK_QUAL_AGG_FRAME_LIMIT_DEF;  		else @@ -1798,7 +1801,7 @@ int iwl_mvm_sta_init(struct iwl_mvm *mvm, struct ieee80211_vif *vif,  	if (iwl_mvm_has_new_rx_api(mvm)) {  		int q; -		dup_data = kcalloc(mvm->trans->num_rx_queues, +		dup_data = kcalloc(mvm->trans->info.num_rxqs,  				   sizeof(*dup_data), GFP_KERNEL);  		if (!dup_data)  			return -ENOMEM; @@ -1811,7 +1814,7 @@ int iwl_mvm_sta_init(struct iwl_mvm *mvm, struct ieee80211_vif *vif,  		 * This thus allows receiving a packet with seqno 0 and the  		 * retry bit set as the very first packet on a new TID.  		 */ -		for (q = 0; q < mvm->trans->num_rx_queues; q++) +		for (q = 0; q < mvm->trans->info.num_rxqs; q++)  			memset(dup_data[q].last_seq, 0xff,  			       sizeof(dup_data[q].last_seq));  		mvm_sta->dup_data = dup_data; @@ -1839,11 +1842,11 @@ int iwl_mvm_sta_init(struct iwl_mvm *mvm, struct ieee80211_vif *vif,  	if (vif->type == NL80211_IFTYPE_STATION && !vif->p2p &&  	    !sta->tdls && ieee80211_vif_is_mld(vif)) {  		mvm_sta->mpdu_counters = -			kcalloc(mvm->trans->num_rx_queues, +			kcalloc(mvm->trans->info.num_rxqs,  				sizeof(*mvm_sta->mpdu_counters),  				GFP_KERNEL);  		if (mvm_sta->mpdu_counters) -			for (int q = 0; q < mvm->trans->num_rx_queues; q++) +			for (int q = 0; q < mvm->trans->info.num_rxqs; q++)  				spin_lock_init(&mvm_sta->mpdu_counters[q].lock);  	} @@ -1868,7 +1871,7 @@ int iwl_mvm_add_sta(struct iwl_mvm *mvm,  	else  		sta_id = mvm_sta->deflink.sta_id; -	if (sta_id == IWL_MVM_INVALID_STA) +	if (sta_id == IWL_INVALID_STA)  		return -ENOSPC;  	spin_lock_init(&mvm_sta->lock); @@ -1906,10 +1909,10 @@ update_fw:  	if (vif->type == NL80211_IFTYPE_STATION) {  		if (!sta->tdls) { -			WARN_ON(mvmvif->deflink.ap_sta_id != IWL_MVM_INVALID_STA); +			WARN_ON(mvmvif->deflink.ap_sta_id != IWL_INVALID_STA);  			mvmvif->deflink.ap_sta_id = sta_id;  		} else { -			WARN_ON(mvmvif->deflink.ap_sta_id == IWL_MVM_INVALID_STA); +			WARN_ON(mvmvif->deflink.ap_sta_id == IWL_INVALID_STA);  		}  	} @@ -2053,9 +2056,9 @@ int iwl_mvm_wait_sta_queues_empty(struct iwl_mvm *mvm,   * Returns if we're done with removing the station, either   * with error or success   */ -bool iwl_mvm_sta_del(struct iwl_mvm *mvm, struct ieee80211_vif *vif, +void iwl_mvm_sta_del(struct iwl_mvm *mvm, struct ieee80211_vif *vif,  		     struct ieee80211_sta *sta, -		     struct ieee80211_link_sta *link_sta, int *ret) +		     struct ieee80211_link_sta *link_sta)  {  	struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);  	struct iwl_mvm_vif_link_info *mvm_link = @@ -2071,39 +2074,13 @@ bool iwl_mvm_sta_del(struct iwl_mvm *mvm, struct ieee80211_vif *vif,  					  lockdep_is_held(&mvm->mutex));  	sta_id = mvm_link_sta->sta_id; -	/* If there is a TXQ still marked as reserved - free it */ -	if (mvm_sta->reserved_queue != IEEE80211_INVAL_HW_QUEUE) { -		u8 reserved_txq = mvm_sta->reserved_queue; -		enum iwl_mvm_queue_status *status; - -		/* -		 * If no traffic has gone through the reserved TXQ - it -		 * is still marked as IWL_MVM_QUEUE_RESERVED, and -		 * should be manually marked as free again -		 */ -		status = &mvm->queue_info[reserved_txq].status; -		if (WARN((*status != IWL_MVM_QUEUE_RESERVED) && -			 (*status != IWL_MVM_QUEUE_FREE), -			 "sta_id %d reserved txq %d status %d", -			 sta_id, reserved_txq, *status)) { -			*ret = -EINVAL; -			return true; -		} - -		*status = IWL_MVM_QUEUE_FREE; -	} -  	if (vif->type == NL80211_IFTYPE_STATION &&  	    mvm_link->ap_sta_id == sta_id) { -		/* if associated - we can't remove the AP STA now */ -		if (vif->cfg.assoc) -			return true; -  		/* first remove remaining keys */ -		iwl_mvm_sec_key_remove_ap(mvm, vif, mvm_link, 0); +		iwl_mvm_sec_key_remove_ap(mvm, vif, mvm_link, +					  link_sta->link_id); -		/* unassoc - go ahead - remove the AP STA now */ -		mvm_link->ap_sta_id = IWL_MVM_INVALID_STA; +		mvm_link->ap_sta_id = IWL_INVALID_STA;  	}  	/* @@ -2111,11 +2088,9 @@ bool iwl_mvm_sta_del(struct iwl_mvm *mvm, struct ieee80211_vif *vif,  	 * before the STA is removed.  	 */  	if (WARN_ON_ONCE(mvm->tdls_cs.peer.sta_id == sta_id)) { -		mvm->tdls_cs.peer.sta_id = IWL_MVM_INVALID_STA; +		mvm->tdls_cs.peer.sta_id = IWL_INVALID_STA;  		cancel_delayed_work(&mvm->tdls_cs.dwork);  	} - -	return false;  }  int iwl_mvm_rm_sta(struct iwl_mvm *mvm, @@ -2151,8 +2126,27 @@ int iwl_mvm_rm_sta(struct iwl_mvm *mvm,  	iwl_mvm_disable_sta_queues(mvm, vif, sta); -	if (iwl_mvm_sta_del(mvm, vif, sta, &sta->deflink, &ret)) -		return ret; +	/* If there is a TXQ still marked as reserved - free it */ +	if (mvm_sta->reserved_queue != IEEE80211_INVAL_HW_QUEUE) { +		u8 reserved_txq = mvm_sta->reserved_queue; +		enum iwl_mvm_queue_status *status; + +		/* +		 * If no traffic has gone through the reserved TXQ - it +		 * is still marked as IWL_MVM_QUEUE_RESERVED, and +		 * should be manually marked as free again +		 */ +		status = &mvm->queue_info[reserved_txq].status; +		if (WARN((*status != IWL_MVM_QUEUE_RESERVED) && +			 (*status != IWL_MVM_QUEUE_FREE), +			 "sta_id %d reserved txq %d status %d", +			 mvm_sta->deflink.sta_id, reserved_txq, *status)) +			return -EINVAL; + +		*status = IWL_MVM_QUEUE_FREE; +	} + +	iwl_mvm_sta_del(mvm, vif, sta, &sta->deflink);  	ret = iwl_mvm_rm_sta_common(mvm, mvm_sta->deflink.sta_id);  	RCU_INIT_POINTER(mvm->fw_id_to_mac_id[mvm_sta->deflink.sta_id], NULL); @@ -2178,9 +2172,9 @@ int iwl_mvm_allocate_int_sta(struct iwl_mvm *mvm,  			     u8 type)  {  	if (!test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status) || -	    sta->sta_id == IWL_MVM_INVALID_STA) { +	    sta->sta_id == IWL_INVALID_STA) {  		sta->sta_id = iwl_mvm_find_free_sta_id(mvm, iftype); -		if (WARN_ON_ONCE(sta->sta_id == IWL_MVM_INVALID_STA)) +		if (WARN_ON_ONCE(sta->sta_id == IWL_INVALID_STA))  			return -ENOSPC;  	} @@ -2196,14 +2190,14 @@ void iwl_mvm_dealloc_int_sta(struct iwl_mvm *mvm, struct iwl_mvm_int_sta *sta)  {  	RCU_INIT_POINTER(mvm->fw_id_to_mac_id[sta->sta_id], NULL);  	memset(sta, 0, sizeof(struct iwl_mvm_int_sta)); -	sta->sta_id = IWL_MVM_INVALID_STA; +	sta->sta_id = IWL_INVALID_STA;  }  static void iwl_mvm_enable_aux_snif_queue(struct iwl_mvm *mvm, u16 queue,  					  u8 sta_id, u8 fifo)  {  	unsigned int wdg_timeout = -		mvm->trans->trans_cfg->base_params->wd_timeout; +		mvm->trans->mac_cfg->base->wd_timeout;  	struct iwl_trans_txq_scd_cfg cfg = {  		.fifo = fifo,  		.sta_id = sta_id, @@ -2220,7 +2214,7 @@ static void iwl_mvm_enable_aux_snif_queue(struct iwl_mvm *mvm, u16 queue,  static int iwl_mvm_enable_aux_snif_queue_tvqm(struct iwl_mvm *mvm, u8 sta_id)  {  	unsigned int wdg_timeout = -		mvm->trans->trans_cfg->base_params->wd_timeout; +		mvm->trans->mac_cfg->base->wd_timeout;  	WARN_ON(!iwl_mvm_has_new_tx_api(mvm)); @@ -2314,7 +2308,7 @@ int iwl_mvm_rm_snif_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)  	lockdep_assert_held(&mvm->mutex); -	if (WARN_ON_ONCE(mvm->snif_sta.sta_id == IWL_MVM_INVALID_STA)) +	if (WARN_ON_ONCE(mvm->snif_sta.sta_id == IWL_INVALID_STA))  		return -EINVAL;  	iwl_mvm_disable_txq(mvm, NULL, mvm->snif_sta.sta_id, @@ -2332,7 +2326,7 @@ int iwl_mvm_rm_aux_sta(struct iwl_mvm *mvm)  	lockdep_assert_held(&mvm->mutex); -	if (WARN_ON_ONCE(mvm->aux_sta.sta_id == IWL_MVM_INVALID_STA)) +	if (WARN_ON_ONCE(mvm->aux_sta.sta_id == IWL_INVALID_STA))  		return -EINVAL;  	iwl_mvm_disable_txq(mvm, NULL, mvm->aux_sta.sta_id, @@ -2367,7 +2361,7 @@ int iwl_mvm_send_add_bcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)  	int queue;  	int ret;  	unsigned int wdg_timeout = -		iwl_mvm_get_wd_timeout(mvm, vif, false, false); +		iwl_mvm_get_wd_timeout(mvm, vif);  	struct iwl_trans_txq_scd_cfg cfg = {  		.fifo = IWL_MVM_TX_FIFO_VO,  		.sta_id = mvmvif->deflink.bcast_sta.sta_id, @@ -2397,7 +2391,7 @@ int iwl_mvm_send_add_bcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)  	if (vif->type == NL80211_IFTYPE_ADHOC)  		baddr = vif->bss_conf.bssid; -	if (WARN_ON_ONCE(bsta->sta_id == IWL_MVM_INVALID_STA)) +	if (WARN_ON_ONCE(bsta->sta_id == IWL_INVALID_STA))  		return -ENOSPC;  	ret = iwl_mvm_add_int_sta_common(mvm, bsta, baddr, @@ -2475,7 +2469,7 @@ void iwl_mvm_free_bcast_sta_queues(struct iwl_mvm *mvm,  	mvmvif->deflink.bcast_sta.tfd_queue_msk &= ~BIT(queue);  } -/* Send the FW a request to remove the station from it's internal data +/* Send the FW a request to remove the station from its internal data   * structures, but DO NOT remove the entry from the local data structures. */  int iwl_mvm_send_rm_bcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)  { @@ -2538,7 +2532,7 @@ void iwl_mvm_dealloc_bcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)  }  /* - * Send the FW a request to remove the station from it's internal data + * Send the FW a request to remove the station from its internal data   * structures, and in addition remove it from the local data structure.   */  int iwl_mvm_rm_p2p_bcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif) @@ -2576,7 +2570,7 @@ int iwl_mvm_add_mcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif)  		.aggregate = false,  		.frame_limit = IWL_FRAME_LIMIT,  	}; -	unsigned int timeout = iwl_mvm_get_wd_timeout(mvm, vif, false, false); +	unsigned int timeout = iwl_mvm_get_wd_timeout(mvm, vif);  	int ret;  	lockdep_assert_held(&mvm->mutex); @@ -2652,7 +2646,7 @@ static int __iwl_mvm_remove_sta_key(struct iwl_mvm *mvm, u8 sta_id,  	u32 status;  	/* This is a valid situation for GTK removal */ -	if (sta_id == IWL_MVM_INVALID_STA) +	if (sta_id == IWL_INVALID_STA)  		return 0;  	key_flags = cpu_to_le16((keyconf->keyidx << STA_KEY_FLG_KEYID_POS) & @@ -2691,7 +2685,7 @@ static int __iwl_mvm_remove_sta_key(struct iwl_mvm *mvm, u8 sta_id,  }  /* - * Send the FW a request to remove the station from it's internal data + * Send the FW a request to remove the station from its internal data   * structures, and in addition remove it from the local data structure.   */  int iwl_mvm_rm_mcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif) @@ -2731,7 +2725,7 @@ static void iwl_mvm_free_reorder(struct iwl_mvm *mvm,  	iwl_mvm_sync_rxq_del_ba(mvm, data->baid); -	for (i = 0; i < mvm->trans->num_rx_queues; i++) { +	for (i = 0; i < mvm->trans->info.num_rxqs; i++) {  		int j;  		struct iwl_mvm_reorder_buffer *reorder_buf =  			&data->reorder_buf[i]; @@ -2764,7 +2758,7 @@ static void iwl_mvm_init_reorder_buffer(struct iwl_mvm *mvm,  {  	int i; -	for (i = 0; i < mvm->trans->num_rx_queues; i++) { +	for (i = 0; i < mvm->trans->info.num_rxqs; i++) {  		struct iwl_mvm_reorder_buffer *reorder_buf =  			&data->reorder_buf[i];  		struct iwl_mvm_reorder_buf_entry *entries = @@ -2920,7 +2914,7 @@ int iwl_mvm_sta_rx_agg(struct iwl_mvm *mvm, struct ieee80211_sta *sta,  		/*  		 * The division below will be OK if either the cache line size  		 * can be divided by the entry size (ALIGN will round up) or if -		 * if the entry size can be divided by the cache line size, in +		 * the entry size can be divided by the cache line size, in  		 * which case the ALIGN() will do nothing.  		 */  		BUILD_BUG_ON(SMP_CACHE_BYTES % sizeof(baid_data->entries[0]) && @@ -2939,7 +2933,7 @@ int iwl_mvm_sta_rx_agg(struct iwl_mvm *mvm, struct ieee80211_sta *sta,  		 * before starting the BA session in the firmware  		 */  		baid_data = kzalloc(sizeof(*baid_data) + -				    mvm->trans->num_rx_queues * +				    mvm->trans->info.num_rxqs *  				    reorder_buf_size,  				    GFP_KERNEL);  		if (!baid_data) @@ -3191,7 +3185,7 @@ int iwl_mvm_sta_tx_agg_start(struct iwl_mvm *mvm, struct ieee80211_vif *vif,  	 * to align the wrap around of ssn so we compare relevant values.  	 */  	normalized_ssn = tid_data->ssn; -	if (mvm->trans->trans_cfg->gen2) +	if (mvm->trans->mac_cfg->gen2)  		normalized_ssn &= 0xff;  	if (normalized_ssn == tid_data->next_reclaimed) { @@ -3215,7 +3209,7 @@ int iwl_mvm_sta_tx_agg_oper(struct iwl_mvm *mvm, struct ieee80211_vif *vif,  	struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);  	struct iwl_mvm_tid_data *tid_data = &mvmsta->tid_data[tid];  	unsigned int wdg_timeout = -		iwl_mvm_get_wd_timeout(mvm, vif, sta->tdls, false); +		iwl_mvm_get_wd_timeout(mvm, vif);  	int queue, ret;  	bool alloc_queue = true;  	enum iwl_mvm_queue_status queue_status; @@ -3522,7 +3516,7 @@ static struct iwl_mvm_sta *iwl_mvm_get_key_sta(struct iwl_mvm *mvm,  	 * station ID, then use AP's station ID.  	 */  	if (vif->type == NL80211_IFTYPE_STATION && -	    mvmvif->deflink.ap_sta_id != IWL_MVM_INVALID_STA) { +	    mvmvif->deflink.ap_sta_id != IWL_INVALID_STA) {  		u8 sta_id = mvmvif->deflink.ap_sta_id;  		sta = rcu_dereference_check(mvm->fw_id_to_mac_id[sta_id], @@ -3577,7 +3571,7 @@ static int iwl_mvm_send_sta_key(struct iwl_mvm *mvm,  	int api_ver = iwl_fw_lookup_cmd_ver(mvm->fw, ADD_STA_KEY,  					    new_api ? 2 : 1); -	if (sta_id == IWL_MVM_INVALID_STA) +	if (sta_id == IWL_INVALID_STA)  		return -EINVAL;  	keyidx = (key->keyidx << STA_KEY_FLG_KEYID_POS) & @@ -3736,7 +3730,7 @@ static int iwl_mvm_send_sta_igtk(struct iwl_mvm *mvm,  	if (remove_key) {  		/* This is a valid situation for IGTK */ -		if (sta_id == IWL_MVM_INVALID_STA) +		if (sta_id == IWL_INVALID_STA)  			return 0;  		igtk_cmd.ctrl_flags |= cpu_to_le32(STA_KEY_NOT_VALID); @@ -3803,7 +3797,7 @@ static inline u8 *iwl_mvm_get_mac_addr(struct iwl_mvm *mvm,  		return sta->addr;  	if (vif->type == NL80211_IFTYPE_STATION && -	    mvmvif->deflink.ap_sta_id != IWL_MVM_INVALID_STA) { +	    mvmvif->deflink.ap_sta_id != IWL_INVALID_STA) {  		u8 sta_id = mvmvif->deflink.ap_sta_id;  		sta = rcu_dereference_protected(mvm->fw_id_to_mac_id[sta_id],  						lockdep_is_held(&mvm->mutex)); @@ -3873,7 +3867,7 @@ int iwl_mvm_set_sta_key(struct iwl_mvm *mvm,  {  	bool mcast = !(keyconf->flags & IEEE80211_KEY_FLAG_PAIRWISE);  	struct iwl_mvm_sta *mvm_sta; -	u8 sta_id = IWL_MVM_INVALID_STA; +	u8 sta_id = IWL_INVALID_STA;  	int ret;  	static const u8 __maybe_unused zero_addr[ETH_ALEN] = {0}; @@ -3974,7 +3968,7 @@ int iwl_mvm_remove_sta_key(struct iwl_mvm *mvm,  {  	bool mcast = !(keyconf->flags & IEEE80211_KEY_FLAG_PAIRWISE);  	struct iwl_mvm_sta *mvm_sta; -	u8 sta_id = IWL_MVM_INVALID_STA; +	u8 sta_id = IWL_INVALID_STA;  	int ret, i;  	lockdep_assert_held(&mvm->mutex); @@ -4281,7 +4275,7 @@ void iwl_mvm_modify_all_sta_disable_tx(struct iwl_mvm *mvm,  		return;  	/* Need to block/unblock also multicast station */ -	if (mvmvif->deflink.mcast_sta.sta_id != IWL_MVM_INVALID_STA) +	if (mvmvif->deflink.mcast_sta.sta_id != IWL_INVALID_STA)  		iwl_mvm_int_sta_modify_disable_tx(mvm, mvmvif,  						  &mvmvif->deflink.mcast_sta,  						  disable); @@ -4290,7 +4284,7 @@ void iwl_mvm_modify_all_sta_disable_tx(struct iwl_mvm *mvm,  	 * Only unblock the broadcast station (FW blocks it for immediate  	 * quiet, not the driver)  	 */ -	if (!disable && mvmvif->deflink.bcast_sta.sta_id != IWL_MVM_INVALID_STA) +	if (!disable && mvmvif->deflink.bcast_sta.sta_id != IWL_INVALID_STA)  		iwl_mvm_int_sta_modify_disable_tx(mvm, mvmvif,  						  &mvmvif->deflink.bcast_sta,  						  disable); @@ -4319,72 +4313,12 @@ u16 iwl_mvm_tid_queued(struct iwl_mvm *mvm, struct iwl_mvm_tid_data *tid_data)  	 * In 22000 HW, the next_reclaimed index is only 8 bit, so we'll need  	 * to align the wrap around of ssn so we compare relevant values.  	 */ -	if (mvm->trans->trans_cfg->gen2) +	if (mvm->trans->mac_cfg->gen2)  		sn &= 0xff;  	return ieee80211_sn_sub(sn, tid_data->next_reclaimed);  } -#if defined(__linux__) -int iwl_mvm_add_pasn_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif, -			 struct iwl_mvm_int_sta *sta, u8 *addr, u32 cipher, -			 u8 *key, u32 key_len, -			 struct ieee80211_key_conf *keyconf) -{ -	int ret; -	u16 queue; -	struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); -	unsigned int wdg_timeout = -		iwl_mvm_get_wd_timeout(mvm, vif, false, false); -	bool mld = iwl_mvm_has_mld_api(mvm->fw); -	u32 type = mld ? STATION_TYPE_PEER : IWL_STA_LINK; - -	ret = iwl_mvm_allocate_int_sta(mvm, sta, 0, -				       NL80211_IFTYPE_UNSPECIFIED, type); -	if (ret) -		return ret; - -	if (mld) -		ret = iwl_mvm_mld_add_int_sta_with_queue(mvm, sta, addr, -							 mvmvif->deflink.fw_link_id, -							 &queue, -							 IWL_MAX_TID_COUNT, -							 &wdg_timeout); -	else -		ret = iwl_mvm_add_int_sta_with_queue(mvm, mvmvif->id, -						     mvmvif->color, addr, sta, -						     &queue, -						     IWL_MVM_TX_FIFO_BE); -	if (ret) -		goto out; - -	keyconf->cipher = cipher; -	memcpy(keyconf->key, key, key_len); -	keyconf->keylen = key_len; -	keyconf->flags = IEEE80211_KEY_FLAG_PAIRWISE; - -	if (mld) { -		/* The MFP flag is set according to the station mfp field. Since -		 * we don't have a station, set it manually. -		 */ -		u32 key_flags = -			iwl_mvm_get_sec_flags(mvm, vif, NULL, keyconf) | -			IWL_SEC_KEY_FLAG_MFP; -		u32 sta_mask = BIT(sta->sta_id); - -		ret = iwl_mvm_mld_send_key(mvm, sta_mask, key_flags, keyconf); -	} else { -		ret = iwl_mvm_send_sta_key(mvm, sta->sta_id, keyconf, false, -					   0, NULL, 0, 0, true); -	} - -out: -	if (ret) -		iwl_mvm_dealloc_int_sta(mvm, sta); -	return ret; -} -#endif -  void iwl_mvm_cancel_channel_switch(struct iwl_mvm *mvm,  				   struct ieee80211_vif *vif,  				   u32 id) @@ -4465,10 +4399,10 @@ void iwl_mvm_count_mpdu(struct iwl_mvm_sta *mvm_sta, u8 fw_sta_id, u32 count,  		       sizeof(queue_counter->per_link));  		queue_counter->window_start = jiffies; -		IWL_DEBUG_STATS(mvm, "MPDU counters are cleared\n"); +		IWL_DEBUG_INFO(mvm, "MPDU counters are cleared\n");  	} -	for (int i = 0; i < IWL_MVM_FW_MAX_LINK_ID; i++) +	for (int i = 0; i < IWL_FW_MAX_LINK_ID; i++)  		total_mpdus += tx ? queue_counter->per_link[i].tx :  				    queue_counter->per_link[i].rx; | 
