ath9k_htc: Update to upstream's commit d19607454d656cb14d8c16dfbf161eebb542e8fe dated...
[linux-libre-firmware.git] / ath9k_htc / target_firmware / wlan / if_owl.c
index e891de5456ad164c45c0edfc85006e744971051d..6dda78cef6b11c340fada4b4b900a118bed2ee50 100755 (executable)
@@ -57,6 +57,7 @@
 #include "if_athrate.h"
 #include "if_athvar.h"
 #include "ah_desc.h"
+#include "ah_internal.h"
 
 #define ath_tgt_free_skb  adf_nbuf_free
 
@@ -147,6 +148,8 @@ static void ath_tx_comp_cleanup(struct ath_softc_tgt *sc, struct ath_tx_buf *bf)
 int ath_tgt_tx_add_to_aggr(struct ath_softc_tgt *sc,
                           struct ath_buf *bf,int datatype,
                           ath_atx_tid_t *tid, int is_burst);
+int ath_tgt_tx_form_aggr(struct ath_softc_tgt *sc, ath_atx_tid_t *tid,
+                        ath_tx_bufhead *bf_q);
 
 struct ieee80211_frame *ATH_SKB_2_WH(adf_nbuf_t skb)
 {
@@ -228,9 +231,7 @@ static void ath_dma_map(struct ath_softc_tgt *sc, struct ath_tx_buf *bf)
 
 static void ath_dma_unmap(struct ath_softc_tgt *sc, struct ath_tx_buf *bf)
 {
-       adf_nbuf_t skb = bf->bf_skb;
-
-       skb = adf_nbuf_queue_first(&bf->bf_skbhead);
+       adf_nbuf_queue_first(&bf->bf_skbhead);
        adf_nbuf_unmap( sc->sc_dev, bf->bf_dmamap, ADF_OS_DMA_TO_DEVICE);
 }
 
@@ -881,14 +882,13 @@ static void ath_tgt_txq_add_ucast(struct ath_softc_tgt *sc, struct ath_tx_buf *b
 {
        struct ath_hal *ah = sc->sc_ah;
        struct ath_txq *txq;
-       HAL_STATUS status;
        volatile a_int32_t txe_val;
 
        adf_os_assert(bf);
 
        txq = bf->bf_txq;
 
-       status = ah->ah_procTxDesc(ah, bf->bf_lastds);
+       ah->ah_procTxDesc(ah, bf->bf_lastds);
 
        ATH_TXQ_INSERT_TAIL(txq, bf, bf_list);
 
@@ -969,9 +969,13 @@ ath_tgt_tx_send_normal(struct ath_softc_tgt *sc, struct ath_tx_buf *bf)
                                      rcs, &isProbe);
                ath_hal_memcpy(bf->bf_rcs, rcs, sizeof(rcs));
        } else {
+               struct ath_vap_target *avp;
+
+               avp = &sc->sc_vap[bf->vap_index];
+
                mrcs[1].tries = mrcs[2].tries = mrcs[3].tries = 0;
                mrcs[1].rix = mrcs[2].rix = mrcs[3].rix = 0;
-               mrcs[0].rix   = 0;
+               mrcs[0].rix = ath_get_minrateidx(sc, avp);
                mrcs[0].tries = 1;
                mrcs[0].flags = 0;
                ath_hal_memcpy(bf->bf_rcs, mrcs, sizeof(mrcs));
@@ -1023,13 +1027,15 @@ static void
 ath_update_stats(struct ath_softc_tgt *sc, struct ath_tx_buf *bf)
 {
        struct ath_tx_desc *ds = bf->bf_desc;
+       struct ieee80211_frame *wh = ATH_SKB2_WH(bf->bf_skb);
        u_int32_t sr, lr;
 
        if (ds->ds_txstat.ts_status == 0) {
                if (ds->ds_txstat.ts_rate & HAL_TXSTAT_ALTRATE)
                        sc->sc_tx_stats.ast_tx_altrate++;
        } else {
-               if (ds->ds_txstat.ts_status & HAL_TXERR_XRETRY)
+               if (ds->ds_txstat.ts_status & HAL_TXERR_XRETRY &&
+                   !IEEE80211_IS_MULTICAST(wh->i_addr1))
                        sc->sc_tx_stats.ast_tx_xretries++;
                if (ds->ds_txstat.ts_status & HAL_TXERR_FIFO)
                        sc->sc_tx_stats.ast_tx_fifoerr++;
@@ -1741,21 +1747,13 @@ ath_tx_comp_cleanup(struct ath_softc_tgt *sc, struct ath_tx_buf *bf)
        struct ath_tx_desc lastds;
        struct ath_tx_desc *ds = &lastds;
        struct ath_rc_series rcs[4];
-       u_int16_t seq_st;
-       u_int32_t *ba;
-       int ba_index;
        int nbad = 0;
        int nframes = bf->bf_nframes;
        struct ath_tx_buf *bf_next;
-       int tx_ok = 1;
 
        adf_os_mem_copy(ds, bf->bf_lastds, sizeof (struct ath_tx_desc));
        adf_os_mem_copy(rcs, bf->bf_rcs, sizeof(rcs));
 
-       seq_st = ATH_DS_BA_SEQ(ds);
-       ba     = ATH_DS_BA_BITMAP(ds);
-       tx_ok  = (ATH_DS_TX_STATUS(ds) == HAL_OK);
-
        if (!bf->bf_isaggr) {
                ath_update_stats(sc, bf);
 
@@ -1774,7 +1772,6 @@ ath_tx_comp_cleanup(struct ath_softc_tgt *sc, struct ath_tx_buf *bf)
        }
 
        while (bf) {
-               ba_index = ATH_BA_INDEX(seq_st, SEQNO_FROM_BF_SEQNO(bf->bf_seqno));
                bf_next  = bf->bf_next;
 
                ath_tx_status_update_aggr(sc, bf, ds, rcs, 0);
@@ -1961,9 +1958,6 @@ void ath_tgt_tx_cleanup(struct ath_softc_tgt *sc, struct ath_node_target *an,
 {
        struct ath_tx_buf *bf;
        struct ath_tx_buf *bf_next;
-       struct ath_txq *txq;
-
-       txq = TID_TO_ACTXQ(tid->tidno);
 
        bf = asf_tailq_first(&tid->buf_q);
 
@@ -2060,11 +2054,9 @@ static void ath_bar_tx_comp(struct ath_softc_tgt *sc, struct ath_tx_buf *bf)
        struct ath_tx_desc *ds = bf->bf_lastds;
        struct ath_node_target *an;
        ath_atx_tid_t *tid;
-       struct ath_txq *txq;
 
        an = (struct ath_node_target *)bf->bf_node;
        tid = &an->tid[bf->bf_tidno];
-       txq = TID_TO_ACTXQ(tid->tidno);
 
        if (ATH_DS_TX_STATUS(ds) & HAL_TXERR_XRETRY) {
                ath_bar_retry(sc, bf);
@@ -2087,7 +2079,6 @@ static void ath_bar_tx(struct ath_softc_tgt *sc,
        struct ath_hal *ah = sc->sc_ah;
        HAL_11N_RATE_SERIES series[4];
        int i = 0;
-       adf_nbuf_queue_t skbhead;
        a_uint8_t *anbdata;
        a_uint32_t anblen;
 
@@ -2138,7 +2129,6 @@ static void ath_bar_tx(struct ath_softc_tgt *sc,
                            | HAL_TXDESC_CLRDMASK
                            , 0, 0);
 
-       skbhead = bf->bf_skbhead;
        bf->bf_isaggr = 0;
        bf->bf_next = NULL;