source: trunk/package/mac80211/patches/310-ath9k_pending_work.patch @ 25056

Last change on this file since 25056 was 25056, checked in by nbd, 6 years ago

ath9k: disable PA predistortion on AR93xx for now until it is properly fixed

File size: 3.4 KB
  • drivers/net/wireless/ath/ath9k/xmit.c

    a b void ath_tx_cleanupq(struct ath_softc *s 
    12211221        sc->tx.txqsetup &= ~(1<<txq->axq_qnum); 
    12221222} 
    12231223 
     1224/* For each axq_acq entry, for each tid, try to schedule packets 
     1225 * for transmit until ampdu_depth has reached min Q depth. 
     1226 */ 
    12241227void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq) 
    12251228{ 
    1226         struct ath_atx_ac *ac; 
    1227         struct ath_atx_tid *tid, *last; 
     1229        struct ath_atx_ac *ac, *ac_tmp, *last_ac; 
     1230        struct ath_atx_tid *tid, *last_tid; 
    12281231 
    12291232        if (list_empty(&txq->axq_acq) || 
    12301233            txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) 
    12311234                return; 
    12321235 
    12331236        ac = list_first_entry(&txq->axq_acq, struct ath_atx_ac, list); 
    1234         last = list_entry(ac->tid_q.prev, struct ath_atx_tid, list); 
    1235         list_del(&ac->list); 
    1236         ac->sched = false; 
     1237        last_ac = list_entry(txq->axq_acq.prev, struct ath_atx_ac, list); 
    12371238 
    1238         do { 
    1239                 if (list_empty(&ac->tid_q)) 
    1240                         return; 
    1241  
    1242                 tid = list_first_entry(&ac->tid_q, struct ath_atx_tid, list); 
    1243                 list_del(&tid->list); 
    1244                 tid->sched = false; 
     1239        list_for_each_entry_safe(ac, ac_tmp, &txq->axq_acq, list) { 
     1240                last_tid = list_entry(ac->tid_q.prev, struct ath_atx_tid, list); 
     1241                list_del(&ac->list); 
     1242                ac->sched = false; 
     1243 
     1244                while (!list_empty(&ac->tid_q)) { 
     1245                        tid = list_first_entry(&ac->tid_q, struct ath_atx_tid, 
     1246                                               list); 
     1247                        list_del(&tid->list); 
     1248                        tid->sched = false; 
    12451249 
    1246                 if (tid->paused) 
    1247                         continue; 
     1250                        if (tid->paused) 
     1251                                continue; 
    12481252 
    1249                 ath_tx_sched_aggr(sc, txq, tid); 
     1253                        ath_tx_sched_aggr(sc, txq, tid); 
    12501254 
    1251                 /* 
    1252                 * add tid to round-robin queue if more frames 
    1253                 * are pending for the tid 
    1254                 */ 
    1255                 if (!list_empty(&tid->buf_q)) 
    1256                         ath_tx_queue_tid(txq, tid); 
     1255                        /* 
     1256                        * add tid to round-robin queue if more frames 
     1257                        * are pending for the tid 
     1258                        */ 
     1259                        if (!list_empty(&tid->buf_q)) 
     1260                                ath_tx_queue_tid(txq, tid); 
    12571261 
    1258                 if (tid == last || txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) 
    1259                         break; 
    1260         } while (!list_empty(&ac->tid_q)); 
     1262                        if (tid == last_tid || 
     1263                            txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) 
     1264                                break; 
     1265                } 
    12611266 
    1262         if (!list_empty(&ac->tid_q)) { 
    1263                 if (!ac->sched) { 
    1264                         ac->sched = true; 
    1265                         list_add_tail(&ac->list, &txq->axq_acq); 
     1267                if (!list_empty(&ac->tid_q)) { 
     1268                        if (!ac->sched) { 
     1269                                ac->sched = true; 
     1270                                list_add_tail(&ac->list, &txq->axq_acq); 
     1271                        } 
    12661272                } 
     1273 
     1274                if (ac == last_ac || 
     1275                    txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) 
     1276                        return; 
    12671277        } 
    12681278} 
    12691279 
  • drivers/net/wireless/ath/ath9k/hw.c

    a b static void ath9k_hw_init_config(struct  
    369369        else 
    370370                ah->config.ht_enable = 0; 
    371371 
     372        /* PAPRD needs some more work to be enabled */ 
     373        ah->config.paprd_disable = 1; 
     374 
    372375        ah->config.rx_intr_mitigation = true; 
    373376        ah->config.pcieSerDesWrite = true; 
    374377 
    int ath9k_hw_fill_cap_info(struct ath_hw 
    19491952                pCap->rx_status_len = sizeof(struct ar9003_rxs); 
    19501953                pCap->tx_desc_len = sizeof(struct ar9003_txc); 
    19511954                pCap->txs_len = sizeof(struct ar9003_txs); 
    1952                 if (ah->eep_ops->get_eeprom(ah, EEP_PAPRD)) 
     1955                if (!ah->config.paprd_disable && 
     1956                    ah->eep_ops->get_eeprom(ah, EEP_PAPRD)) 
    19531957                        pCap->hw_caps |= ATH9K_HW_CAP_PAPRD; 
    19541958        } else { 
    19551959                pCap->tx_desc_len = sizeof(struct ath_desc); 
  • drivers/net/wireless/ath/ath9k/hw.h

    a b struct ath9k_ops_config { 
    228228        u32 pcie_waen; 
    229229        u8 analog_shiftreg; 
    230230        u8 ht_enable; 
     231        u8 paprd_disable; 
    231232        u32 ofdm_trig_low; 
    232233        u32 ofdm_trig_high; 
    233234        u32 cck_trig_high; 
Note: See TracBrowser for help on using the repository browser.