diff options
Diffstat (limited to 'package/mac80211/patches/310-ath9k_pending_work.patch')
-rw-r--r-- | package/mac80211/patches/310-ath9k_pending_work.patch | 122 |
1 files changed, 0 insertions, 122 deletions
diff --git a/package/mac80211/patches/310-ath9k_pending_work.patch b/package/mac80211/patches/310-ath9k_pending_work.patch deleted file mode 100644 index d0c2f3914..000000000 --- a/package/mac80211/patches/310-ath9k_pending_work.patch +++ /dev/null @@ -1,122 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/xmit.c -+++ b/drivers/net/wireless/ath/ath9k/xmit.c -@@ -1221,49 +1221,59 @@ void ath_tx_cleanupq(struct ath_softc *s - sc->tx.txqsetup &= ~(1<<txq->axq_qnum); - } - -+/* For each axq_acq entry, for each tid, try to schedule packets -+ * for transmit until ampdu_depth has reached min Q depth. -+ */ - void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq) - { -- struct ath_atx_ac *ac; -- struct ath_atx_tid *tid, *last; -+ struct ath_atx_ac *ac, *ac_tmp, *last_ac; -+ struct ath_atx_tid *tid, *last_tid; - - if (list_empty(&txq->axq_acq) || - txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) - return; - - ac = list_first_entry(&txq->axq_acq, struct ath_atx_ac, list); -- last = list_entry(ac->tid_q.prev, struct ath_atx_tid, list); -- list_del(&ac->list); -- ac->sched = false; -+ last_ac = list_entry(txq->axq_acq.prev, struct ath_atx_ac, list); - -- do { -- if (list_empty(&ac->tid_q)) -- return; -- -- tid = list_first_entry(&ac->tid_q, struct ath_atx_tid, list); -- list_del(&tid->list); -- tid->sched = false; -+ list_for_each_entry_safe(ac, ac_tmp, &txq->axq_acq, list) { -+ last_tid = list_entry(ac->tid_q.prev, struct ath_atx_tid, list); -+ list_del(&ac->list); -+ ac->sched = false; -+ -+ while (!list_empty(&ac->tid_q)) { -+ tid = list_first_entry(&ac->tid_q, struct ath_atx_tid, -+ list); -+ list_del(&tid->list); -+ tid->sched = false; - -- if (tid->paused) -- continue; -+ if (tid->paused) -+ continue; - -- ath_tx_sched_aggr(sc, txq, tid); -+ ath_tx_sched_aggr(sc, txq, tid); - -- /* -- * add tid to round-robin queue if more frames -- * are pending for the tid -- */ -- if (!list_empty(&tid->buf_q)) -- ath_tx_queue_tid(txq, tid); -+ /* -+ * add tid to round-robin queue if more frames -+ * are pending for the tid -+ */ -+ if (!list_empty(&tid->buf_q)) -+ ath_tx_queue_tid(txq, tid); - -- if (tid == last || txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) -- break; -- } while (!list_empty(&ac->tid_q)); -+ if (tid == last_tid || -+ txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) -+ break; -+ } - -- if (!list_empty(&ac->tid_q)) { -- if (!ac->sched) { -- ac->sched = true; -- list_add_tail(&ac->list, &txq->axq_acq); -+ if (!list_empty(&ac->tid_q)) { -+ if (!ac->sched) { -+ ac->sched = true; -+ list_add_tail(&ac->list, &txq->axq_acq); -+ } - } -+ -+ if (ac == last_ac || -+ txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) -+ return; - } - } - ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -369,6 +369,9 @@ static void ath9k_hw_init_config(struct - else - ah->config.ht_enable = 0; - -+ /* PAPRD needs some more work to be enabled */ -+ ah->config.paprd_disable = 1; -+ - ah->config.rx_intr_mitigation = true; - ah->config.pcieSerDesWrite = true; - -@@ -1949,7 +1952,8 @@ int ath9k_hw_fill_cap_info(struct ath_hw - pCap->rx_status_len = sizeof(struct ar9003_rxs); - pCap->tx_desc_len = sizeof(struct ar9003_txc); - pCap->txs_len = sizeof(struct ar9003_txs); -- if (ah->eep_ops->get_eeprom(ah, EEP_PAPRD)) -+ if (!ah->config.paprd_disable && -+ ah->eep_ops->get_eeprom(ah, EEP_PAPRD)) - pCap->hw_caps |= ATH9K_HW_CAP_PAPRD; - } else { - pCap->tx_desc_len = sizeof(struct ath_desc); ---- a/drivers/net/wireless/ath/ath9k/hw.h -+++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -228,6 +228,7 @@ struct ath9k_ops_config { - u32 pcie_waen; - u8 analog_shiftreg; - u8 ht_enable; -+ u8 paprd_disable; - u32 ofdm_trig_low; - u32 ofdm_trig_high; - u32 cck_trig_high; |