|
|
|
@ -859,3 +859,40 @@ |
|
|
|
|
/* Test value. if 0 then attenuation is unused. Don't load anything. */
|
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
|
|
|
if (ah->txchainmask & BIT(i)) {
|
|
|
|
|
--- a/drivers/net/wireless/ath/ath9k/link.c
|
|
|
|
|
+++ b/drivers/net/wireless/ath/ath9k/link.c
|
|
|
|
|
@@ -28,21 +28,21 @@ void ath_tx_complete_poll_work(struct wo
|
|
|
|
|
int i;
|
|
|
|
|
bool needreset = false;
|
|
|
|
|
|
|
|
|
|
- for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
|
|
|
|
|
- if (ATH_TXQ_SETUP(sc, i)) {
|
|
|
|
|
- txq = &sc->tx.txq[i];
|
|
|
|
|
- ath_txq_lock(sc, txq);
|
|
|
|
|
- if (txq->axq_depth) {
|
|
|
|
|
- if (txq->axq_tx_inprogress) {
|
|
|
|
|
- needreset = true;
|
|
|
|
|
- ath_txq_unlock(sc, txq);
|
|
|
|
|
- break;
|
|
|
|
|
- } else {
|
|
|
|
|
- txq->axq_tx_inprogress = true;
|
|
|
|
|
- }
|
|
|
|
|
+ for (i = 0; i < IEEE80211_NUM_ACS; i++) {
|
|
|
|
|
+ txq = sc->tx.txq_map[i];
|
|
|
|
|
+
|
|
|
|
|
+ ath_txq_lock(sc, txq);
|
|
|
|
|
+ if (txq->axq_depth) {
|
|
|
|
|
+ if (txq->axq_tx_inprogress) {
|
|
|
|
|
+ needreset = true;
|
|
|
|
|
+ ath_txq_unlock(sc, txq);
|
|
|
|
|
+ break;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ txq->axq_tx_inprogress = true;
|
|
|
|
|
}
|
|
|
|
|
- ath_txq_unlock_complete(sc, txq);
|
|
|
|
|
}
|
|
|
|
|
+ ath_txq_unlock_complete(sc, txq);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
if (needreset) {
|
|
|
|
|
ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,
|
|
|
|
|