diff options
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.patch | 67 |
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; |