ath9k: use ath_tx_process_buffer instead of open-coding similar code
Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
1381559ba4
commit
81b519504f
1 changed files with 32 additions and 37 deletions
|
@ -604,6 +604,37 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
|
||||||
ath9k_queue_reset(sc, RESET_TYPE_TX_ERROR);
|
ath9k_queue_reset(sc, RESET_TYPE_TX_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool bf_is_ampdu_not_probing(struct ath_buf *bf)
|
||||||
|
{
|
||||||
|
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(bf->bf_mpdu);
|
||||||
|
return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ath_tx_process_buffer(struct ath_softc *sc, struct ath_txq *txq,
|
||||||
|
struct ath_tx_status *ts, struct ath_buf *bf,
|
||||||
|
struct list_head *bf_head)
|
||||||
|
{
|
||||||
|
bool txok, flush;
|
||||||
|
|
||||||
|
txok = !(ts->ts_status & ATH9K_TXERR_MASK);
|
||||||
|
flush = !!(ts->ts_status & ATH9K_TX_FLUSH);
|
||||||
|
txq->axq_tx_inprogress = false;
|
||||||
|
|
||||||
|
txq->axq_depth--;
|
||||||
|
if (bf_is_ampdu_not_probing(bf))
|
||||||
|
txq->axq_ampdu_depth--;
|
||||||
|
|
||||||
|
if (!bf_isampdu(bf)) {
|
||||||
|
if (!flush)
|
||||||
|
ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok);
|
||||||
|
ath_tx_complete_buf(sc, bf, txq, bf_head, ts, txok);
|
||||||
|
} else
|
||||||
|
ath_tx_complete_aggr(sc, txq, bf, bf_head, ts, txok);
|
||||||
|
|
||||||
|
if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) && !flush)
|
||||||
|
ath_txq_schedule(sc, txq);
|
||||||
|
}
|
||||||
|
|
||||||
static bool ath_lookup_legacy(struct ath_buf *bf)
|
static bool ath_lookup_legacy(struct ath_buf *bf)
|
||||||
{
|
{
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
|
@ -1453,12 +1484,6 @@ int ath_cabq_update(struct ath_softc *sc)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool bf_is_ampdu_not_probing(struct ath_buf *bf)
|
|
||||||
{
|
|
||||||
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(bf->bf_mpdu);
|
|
||||||
return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ath_drain_txq_list(struct ath_softc *sc, struct ath_txq *txq,
|
static void ath_drain_txq_list(struct ath_softc *sc, struct ath_txq *txq,
|
||||||
struct list_head *list)
|
struct list_head *list)
|
||||||
{
|
{
|
||||||
|
@ -1482,15 +1507,7 @@ static void ath_drain_txq_list(struct ath_softc *sc, struct ath_txq *txq,
|
||||||
|
|
||||||
lastbf = bf->bf_lastbf;
|
lastbf = bf->bf_lastbf;
|
||||||
list_cut_position(&bf_head, list, &lastbf->list);
|
list_cut_position(&bf_head, list, &lastbf->list);
|
||||||
|
ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head);
|
||||||
txq->axq_depth--;
|
|
||||||
if (bf_is_ampdu_not_probing(bf))
|
|
||||||
txq->axq_ampdu_depth--;
|
|
||||||
|
|
||||||
if (bf_isampdu(bf))
|
|
||||||
ath_tx_complete_aggr(sc, txq, bf, &bf_head, &ts, 0);
|
|
||||||
else
|
|
||||||
ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2152,28 +2169,6 @@ static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf,
|
||||||
tx_info->status.rates[tx_rateindex].count = ts->ts_longretry + 1;
|
tx_info->status.rates[tx_rateindex].count = ts->ts_longretry + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ath_tx_process_buffer(struct ath_softc *sc, struct ath_txq *txq,
|
|
||||||
struct ath_tx_status *ts, struct ath_buf *bf,
|
|
||||||
struct list_head *bf_head)
|
|
||||||
{
|
|
||||||
int txok;
|
|
||||||
|
|
||||||
txq->axq_depth--;
|
|
||||||
txok = !(ts->ts_status & ATH9K_TXERR_MASK);
|
|
||||||
txq->axq_tx_inprogress = false;
|
|
||||||
if (bf_is_ampdu_not_probing(bf))
|
|
||||||
txq->axq_ampdu_depth--;
|
|
||||||
|
|
||||||
if (!bf_isampdu(bf)) {
|
|
||||||
ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok);
|
|
||||||
ath_tx_complete_buf(sc, bf, txq, bf_head, ts, txok);
|
|
||||||
} else
|
|
||||||
ath_tx_complete_aggr(sc, txq, bf, bf_head, ts, txok);
|
|
||||||
|
|
||||||
if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT)
|
|
||||||
ath_txq_schedule(sc, txq);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq)
|
static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq)
|
||||||
{
|
{
|
||||||
struct ath_hw *ah = sc->sc_ah;
|
struct ath_hw *ah = sc->sc_ah;
|
||||||
|
|
Loading…
Reference in a new issue