Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff7a68d0 authored by Matti Gottlieb's avatar Matti Gottlieb Committed by Luca Coelho
Browse files

iwlwifi: mvm: Do not open aggregations for null data packets



Currently we try to open an aggregation for every packet (given that one
is not already open).

This causes redundant overhead (addba/delba) for null data packets.

Do not open an aggregation for null data packets.

Signed-off-by: default avatarMatti Gottlieb <matti.gottlieb@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent d7fdd0e5
Loading
Loading
Loading
Loading
+7 −6
Original line number Original line Diff line number Diff line
@@ -399,7 +399,7 @@ static int iwl_hwrate_to_plcp_idx(u32 rate_n_flags)
static void rs_rate_scale_perform(struct iwl_mvm *mvm,
static void rs_rate_scale_perform(struct iwl_mvm *mvm,
				  struct ieee80211_sta *sta,
				  struct ieee80211_sta *sta,
				  struct iwl_lq_sta *lq_sta,
				  struct iwl_lq_sta *lq_sta,
				  int tid);
				  int tid, bool ndp);
static void rs_fill_lq_cmd(struct iwl_mvm *mvm,
static void rs_fill_lq_cmd(struct iwl_mvm *mvm,
			   struct ieee80211_sta *sta,
			   struct ieee80211_sta *sta,
			   struct iwl_lq_sta *lq_sta,
			   struct iwl_lq_sta *lq_sta,
@@ -1161,7 +1161,7 @@ static u8 rs_get_tid(struct ieee80211_hdr *hdr)
}
}


void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
			  int tid, struct ieee80211_tx_info *info)
			  int tid, struct ieee80211_tx_info *info, bool ndp)
{
{
	int legacy_success;
	int legacy_success;
	int retries;
	int retries;
@@ -1384,7 +1384,7 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
done:
done:
	/* See if there's a better rate or modulation mode to try. */
	/* See if there's a better rate or modulation mode to try. */
	if (sta->supp_rates[info->band])
	if (sta->supp_rates[info->band])
		rs_rate_scale_perform(mvm, sta, lq_sta, tid);
		rs_rate_scale_perform(mvm, sta, lq_sta, tid, ndp);
}
}


/*
/*
@@ -1407,7 +1407,8 @@ static void rs_mac80211_tx_status(void *mvm_r,
	    info->flags & IEEE80211_TX_CTL_NO_ACK)
	    info->flags & IEEE80211_TX_CTL_NO_ACK)
		return;
		return;


	iwl_mvm_rs_tx_status(mvm, sta, rs_get_tid(hdr), info);
	iwl_mvm_rs_tx_status(mvm, sta, rs_get_tid(hdr), info,
			     ieee80211_is_qos_nullfunc(hdr->frame_control));
}
}


/*
/*
@@ -2213,7 +2214,7 @@ static bool rs_tpc_perform(struct iwl_mvm *mvm,
static void rs_rate_scale_perform(struct iwl_mvm *mvm,
static void rs_rate_scale_perform(struct iwl_mvm *mvm,
				  struct ieee80211_sta *sta,
				  struct ieee80211_sta *sta,
				  struct iwl_lq_sta *lq_sta,
				  struct iwl_lq_sta *lq_sta,
				  int tid)
				  int tid, bool ndp)
{
{
	int low = IWL_RATE_INVALID;
	int low = IWL_RATE_INVALID;
	int high = IWL_RATE_INVALID;
	int high = IWL_RATE_INVALID;
@@ -2512,7 +2513,7 @@ static void rs_rate_scale_perform(struct iwl_mvm *mvm,
			    (lq_sta->tx_agg_tid_en & (1 << tid)) &&
			    (lq_sta->tx_agg_tid_en & (1 << tid)) &&
			    (tid != IWL_MAX_TID_COUNT)) {
			    (tid != IWL_MAX_TID_COUNT)) {
				tid_data = &sta_priv->tid_data[tid];
				tid_data = &sta_priv->tid_data[tid];
				if (tid_data->state == IWL_AGG_OFF) {
				if (tid_data->state == IWL_AGG_OFF && !ndp) {
					IWL_DEBUG_RATE(mvm,
					IWL_DEBUG_RATE(mvm,
						       "try to aggregate tid %d\n",
						       "try to aggregate tid %d\n",
						       tid);
						       tid);
+1 −1
Original line number Original line Diff line number Diff line
@@ -362,7 +362,7 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,


/* Notify RS about Tx status */
/* Notify RS about Tx status */
void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
			  int tid, struct ieee80211_tx_info *info);
			  int tid, struct ieee80211_tx_info *info, bool ndp);


/**
/**
 * iwl_rate_control_register - Register the rate control algorithm callbacks
 * iwl_rate_control_register - Register the rate control algorithm callbacks
+1 −1
Original line number Original line Diff line number Diff line
@@ -1660,7 +1660,7 @@ void iwl_mvm_rx_ba_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb)
		iwl_mvm_tx_info_from_ba_notif(&ba_info, ba_notif, tid_data);
		iwl_mvm_tx_info_from_ba_notif(&ba_info, ba_notif, tid_data);


		IWL_DEBUG_TX_REPLY(mvm, "No reclaim. Update rs directly\n");
		IWL_DEBUG_TX_REPLY(mvm, "No reclaim. Update rs directly\n");
		iwl_mvm_rs_tx_status(mvm, sta, tid, &ba_info);
		iwl_mvm_rs_tx_status(mvm, sta, tid, &ba_info, false);
	}
	}


out:
out: