aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/566-ath9k_prepare_tid_queueing.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/566-ath9k_prepare_tid_queueing.patch')
-rw-r--r--package/kernel/mac80211/patches/566-ath9k_prepare_tid_queueing.patch67
1 files changed, 66 insertions, 1 deletions
diff --git a/package/kernel/mac80211/patches/566-ath9k_prepare_tid_queueing.patch b/package/kernel/mac80211/patches/566-ath9k_prepare_tid_queueing.patch
index 65e4be3e5d..b8e75a0ba1 100644
--- a/package/kernel/mac80211/patches/566-ath9k_prepare_tid_queueing.patch
+++ b/package/kernel/mac80211/patches/566-ath9k_prepare_tid_queueing.patch
@@ -1,6 +1,49 @@
--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
-@@ -1328,7 +1328,7 @@ void ath_tx_aggr_stop(struct ath_softc *
+@@ -672,7 +672,7 @@ static void ath_tx_process_buffer(struct
+ } else
+ ath_tx_complete_aggr(sc, txq, bf, bf_head, ts, txok);
+
+- if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) && !flush)
++ if (!flush)
+ ath_txq_schedule(sc, txq);
+ }
+
+@@ -848,6 +848,7 @@ static struct ath_buf *
+ ath_tx_get_tid_subframe(struct ath_softc *sc, struct ath_txq *txq,
+ struct ath_atx_tid *tid, struct sk_buff_head **q)
+ {
++ struct ieee80211_tx_info *tx_info;
+ struct ath_frame_info *fi;
+ struct sk_buff *skb;
+ struct ath_buf *bf;
+@@ -874,6 +875,16 @@ ath_tx_get_tid_subframe(struct ath_softc
+ continue;
+ }
+
++ bf->bf_next = NULL;
++ bf->bf_lastbf = bf;
++
++ tx_info = IEEE80211_SKB_CB(skb);
++ tx_info->flags &= ~IEEE80211_TX_CTL_CLEAR_PS_FILT;
++ if (!(tx_info->flags & IEEE80211_TX_CTL_AMPDU)) {
++ bf->bf_state.bf_type = 0;
++ return bf;
++ }
++
+ bf->bf_state.bf_type = BUF_AMPDU | BUF_AGGR;
+ seqno = bf->bf_state.seqno;
+
+@@ -893,8 +904,6 @@ ath_tx_get_tid_subframe(struct ath_softc
+ continue;
+ }
+
+- bf->bf_next = NULL;
+- bf->bf_lastbf = bf;
+ return bf;
+ }
+
+@@ -1328,7 +1337,7 @@ void ath_tx_aggr_stop(struct ath_softc *
ath_txq_lock(sc, txq);
txtid->active = false;
@@ -9,3 +52,25 @@
ath_tx_flush_tid(sc, txtid);
ath_txq_unlock_complete(sc, txq);
}
+@@ -2397,8 +2406,7 @@ static void ath_tx_processq(struct ath_s
+
+ if (list_empty(&txq->axq_q)) {
+ txq->axq_link = NULL;
+- if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT)
+- ath_txq_schedule(sc, txq);
++ ath_txq_schedule(sc, txq);
+ break;
+ }
+ bf = list_first_entry(&txq->axq_q, struct ath_buf, list);
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -1403,9 +1403,6 @@ static void ath9k_sta_notify(struct ieee
+ struct ath_softc *sc = hw->priv;
+ struct ath_node *an = (struct ath_node *) sta->drv_priv;
+
+- if (!sta->ht_cap.ht_supported)
+- return;
+-
+ switch (cmd) {
+ case STA_NOTIFY_SLEEP:
+ an->sleeping = true;