|
@@ -294,11 +294,11 @@ static u32 rs_tl_get_load(struct iwl_lq_sta *lq_data, u8 tid)
|
|
|
return tl->total;
|
|
|
}
|
|
|
|
|
|
-static void rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv,
|
|
|
+static int rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv,
|
|
|
struct iwl_lq_sta *lq_data, u8 tid,
|
|
|
struct ieee80211_sta *sta)
|
|
|
{
|
|
|
- int ret;
|
|
|
+ int ret = -EAGAIN;
|
|
|
|
|
|
if (rs_tl_get_load(lq_data, tid) > IWL_AGG_LOAD_THRESHOLD) {
|
|
|
IWL_DEBUG_HT(priv, "Starting Tx agg: STA: %pM tid: %d\n",
|
|
@@ -312,29 +312,29 @@ static void rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv,
|
|
|
*/
|
|
|
IWL_DEBUG_HT(priv, "Fail start Tx agg on tid: %d\n",
|
|
|
tid);
|
|
|
- ret = ieee80211_stop_tx_ba_session(sta, tid,
|
|
|
+ ieee80211_stop_tx_ba_session(sta, tid,
|
|
|
WLAN_BACK_INITIATOR);
|
|
|
}
|
|
|
- }
|
|
|
+ } else
|
|
|
+ IWL_ERR(priv, "Fail finding valid aggregation tid: %d\n", tid);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static void rs_tl_turn_on_agg(struct iwl_priv *priv, u8 tid,
|
|
|
struct iwl_lq_sta *lq_data,
|
|
|
struct ieee80211_sta *sta)
|
|
|
{
|
|
|
- if ((tid < TID_MAX_LOAD_COUNT))
|
|
|
- rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta);
|
|
|
- else if (tid == IWL_AGG_ALL_TID)
|
|
|
- for (tid = 0; tid < TID_MAX_LOAD_COUNT; tid++)
|
|
|
- rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta);
|
|
|
- if (priv->cfg->use_rts_for_ht) {
|
|
|
- /*
|
|
|
- * switch to RTS/CTS if it is the prefer protection method
|
|
|
- * for HT traffic
|
|
|
- */
|
|
|
- IWL_DEBUG_HT(priv, "use RTS/CTS protection for HT\n");
|
|
|
- priv->staging_rxon.flags &= ~RXON_FLG_SELF_CTS_EN;
|
|
|
- iwlcore_commit_rxon(priv);
|
|
|
+ if ((tid < TID_MAX_LOAD_COUNT) &&
|
|
|
+ !rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta)) {
|
|
|
+ if (priv->cfg->use_rts_for_ht) {
|
|
|
+ /*
|
|
|
+ * switch to RTS/CTS if it is the prefer protection
|
|
|
+ * method for HT traffic
|
|
|
+ */
|
|
|
+ IWL_DEBUG_HT(priv, "use RTS/CTS protection for HT\n");
|
|
|
+ priv->staging_rxon.flags &= ~RXON_FLG_SELF_CTS_EN;
|
|
|
+ iwlcore_commit_rxon(priv);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|