diff options
-rw-r--r-- | drivers/net/wireless/ath/ath9k/mac.h | 5 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/recv.c | 22 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/xmit.c | 20 |
3 files changed, 22 insertions, 25 deletions
diff --git a/drivers/net/wireless/ath/ath9k/mac.h b/drivers/net/wireless/ath/ath9k/mac.h index d1d5b238cdee..68dbd7a8ddca 100644 --- a/drivers/net/wireless/ath/ath9k/mac.h +++ b/drivers/net/wireless/ath/ath9k/mac.h | |||
@@ -233,11 +233,6 @@ struct ath_desc { | |||
233 | u32 ds_ctl0; | 233 | u32 ds_ctl0; |
234 | u32 ds_ctl1; | 234 | u32 ds_ctl1; |
235 | u32 ds_hw[20]; | 235 | u32 ds_hw[20]; |
236 | union { | ||
237 | struct ath_tx_status tx; | ||
238 | struct ath_rx_status rx; | ||
239 | void *stats; | ||
240 | } ds_us; | ||
241 | void *ds_vdata; | 236 | void *ds_vdata; |
242 | } __packed; | 237 | } __packed; |
243 | 238 | ||
diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c index 9617887907b7..94560e2fe376 100644 --- a/drivers/net/wireless/ath/ath9k/recv.c +++ b/drivers/net/wireless/ath/ath9k/recv.c | |||
@@ -477,7 +477,6 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush) | |||
477 | 477 | ||
478 | struct ath_buf *bf; | 478 | struct ath_buf *bf; |
479 | struct ath_desc *ds; | 479 | struct ath_desc *ds; |
480 | struct ath_rx_status *rx_stats; | ||
481 | struct sk_buff *skb = NULL, *requeue_skb; | 480 | struct sk_buff *skb = NULL, *requeue_skb; |
482 | struct ieee80211_rx_status *rxs; | 481 | struct ieee80211_rx_status *rxs; |
483 | struct ath_hw *ah = sc->sc_ah; | 482 | struct ath_hw *ah = sc->sc_ah; |
@@ -491,6 +490,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush) | |||
491 | struct ieee80211_hdr *hdr; | 490 | struct ieee80211_hdr *hdr; |
492 | int retval; | 491 | int retval; |
493 | bool decrypt_error = false; | 492 | bool decrypt_error = false; |
493 | struct ath_rx_status rs; | ||
494 | 494 | ||
495 | spin_lock_bh(&sc->rx.rxbuflock); | 495 | spin_lock_bh(&sc->rx.rxbuflock); |
496 | 496 | ||
@@ -506,7 +506,6 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush) | |||
506 | 506 | ||
507 | bf = list_first_entry(&sc->rx.rxbuf, struct ath_buf, list); | 507 | bf = list_first_entry(&sc->rx.rxbuf, struct ath_buf, list); |
508 | ds = bf->bf_desc; | 508 | ds = bf->bf_desc; |
509 | rx_stats = &ds->ds_us.rx; | ||
510 | 509 | ||
511 | /* | 510 | /* |
512 | * Must provide the virtual address of the current | 511 | * Must provide the virtual address of the current |
@@ -519,11 +518,14 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush) | |||
519 | * on. All this is necessary because of our use of | 518 | * on. All this is necessary because of our use of |
520 | * a self-linked list to avoid rx overruns. | 519 | * a self-linked list to avoid rx overruns. |
521 | */ | 520 | */ |
522 | retval = ath9k_hw_rxprocdesc(ah, ds, rx_stats, 0); | 521 | memset(&rs, 0, sizeof(rs)); |
522 | retval = ath9k_hw_rxprocdesc(ah, ds, &rs, 0); | ||
523 | if (retval == -EINPROGRESS) { | 523 | if (retval == -EINPROGRESS) { |
524 | struct ath_rx_status trs; | ||
524 | struct ath_buf *tbf; | 525 | struct ath_buf *tbf; |
525 | struct ath_desc *tds; | 526 | struct ath_desc *tds; |
526 | 527 | ||
528 | memset(&trs, 0, sizeof(trs)); | ||
527 | if (list_is_last(&bf->list, &sc->rx.rxbuf)) { | 529 | if (list_is_last(&bf->list, &sc->rx.rxbuf)) { |
528 | sc->rx.rxlink = NULL; | 530 | sc->rx.rxlink = NULL; |
529 | break; | 531 | break; |
@@ -543,7 +545,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush) | |||
543 | */ | 545 | */ |
544 | 546 | ||
545 | tds = tbf->bf_desc; | 547 | tds = tbf->bf_desc; |
546 | retval = ath9k_hw_rxprocdesc(ah, tds, &tds->ds_us.rx, 0); | 548 | retval = ath9k_hw_rxprocdesc(ah, tds, &trs, 0); |
547 | if (retval == -EINPROGRESS) { | 549 | if (retval == -EINPROGRESS) { |
548 | break; | 550 | break; |
549 | } | 551 | } |
@@ -567,7 +569,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush) | |||
567 | 569 | ||
568 | hw = ath_get_virt_hw(sc, hdr); | 570 | hw = ath_get_virt_hw(sc, hdr); |
569 | 571 | ||
570 | ath_debug_stat_rx(sc, rx_stats); | 572 | ath_debug_stat_rx(sc, &rs); |
571 | 573 | ||
572 | /* | 574 | /* |
573 | * If we're asked to flush receive queue, directly | 575 | * If we're asked to flush receive queue, directly |
@@ -576,7 +578,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush) | |||
576 | if (flush) | 578 | if (flush) |
577 | goto requeue; | 579 | goto requeue; |
578 | 580 | ||
579 | retval = ath9k_cmn_rx_skb_preprocess(common, hw, skb, rx_stats, | 581 | retval = ath9k_cmn_rx_skb_preprocess(common, hw, skb, &rs, |
580 | rxs, &decrypt_error); | 582 | rxs, &decrypt_error); |
581 | if (retval) | 583 | if (retval) |
582 | goto requeue; | 584 | goto requeue; |
@@ -597,9 +599,9 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush) | |||
597 | common->rx_bufsize, | 599 | common->rx_bufsize, |
598 | DMA_FROM_DEVICE); | 600 | DMA_FROM_DEVICE); |
599 | 601 | ||
600 | skb_put(skb, rx_stats->rs_datalen); | 602 | skb_put(skb, rs.rs_datalen); |
601 | 603 | ||
602 | ath9k_cmn_rx_skb_postprocess(common, skb, rx_stats, | 604 | ath9k_cmn_rx_skb_postprocess(common, skb, &rs, |
603 | rxs, decrypt_error); | 605 | rxs, decrypt_error); |
604 | 606 | ||
605 | /* We will now give hardware our shiny new allocated skb */ | 607 | /* We will now give hardware our shiny new allocated skb */ |
@@ -622,9 +624,9 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush) | |||
622 | * change the default rx antenna if rx diversity chooses the | 624 | * change the default rx antenna if rx diversity chooses the |
623 | * other antenna 3 times in a row. | 625 | * other antenna 3 times in a row. |
624 | */ | 626 | */ |
625 | if (sc->rx.defant != rx_stats->rs_antenna) { | 627 | if (sc->rx.defant != rs.rs_antenna) { |
626 | if (++sc->rx.rxotherant >= 3) | 628 | if (++sc->rx.rxotherant >= 3) |
627 | ath_setdefantenna(sc, rx_stats->rs_antenna); | 629 | ath_setdefantenna(sc, rs.rs_antenna); |
628 | } else { | 630 | } else { |
629 | sc->rx.rxotherant = 0; | 631 | sc->rx.rxotherant = 0; |
630 | } | 632 | } |
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index 9d5d102b23bd..1d04ca86df56 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -2000,7 +2000,7 @@ static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq) | |||
2000 | struct ath_buf *bf, *lastbf, *bf_held = NULL; | 2000 | struct ath_buf *bf, *lastbf, *bf_held = NULL; |
2001 | struct list_head bf_head; | 2001 | struct list_head bf_head; |
2002 | struct ath_desc *ds; | 2002 | struct ath_desc *ds; |
2003 | struct ath_tx_status *ts; | 2003 | struct ath_tx_status ts; |
2004 | int txok; | 2004 | int txok; |
2005 | int status; | 2005 | int status; |
2006 | 2006 | ||
@@ -2039,9 +2039,9 @@ static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq) | |||
2039 | 2039 | ||
2040 | lastbf = bf->bf_lastbf; | 2040 | lastbf = bf->bf_lastbf; |
2041 | ds = lastbf->bf_desc; | 2041 | ds = lastbf->bf_desc; |
2042 | ts = &ds->ds_us.tx; | ||
2043 | 2042 | ||
2044 | status = ath9k_hw_txprocdesc(ah, ds, ts); | 2043 | memset(&ts, 0, sizeof(ts)); |
2044 | status = ath9k_hw_txprocdesc(ah, ds, &ts); | ||
2045 | if (status == -EINPROGRESS) { | 2045 | if (status == -EINPROGRESS) { |
2046 | spin_unlock_bh(&txq->axq_lock); | 2046 | spin_unlock_bh(&txq->axq_lock); |
2047 | break; | 2047 | break; |
@@ -2052,7 +2052,7 @@ static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq) | |||
2052 | * can disable RX. | 2052 | * can disable RX. |
2053 | */ | 2053 | */ |
2054 | if (bf->bf_isnullfunc && | 2054 | if (bf->bf_isnullfunc && |
2055 | (ts->ts_status & ATH9K_TX_ACKED)) { | 2055 | (ts.ts_status & ATH9K_TX_ACKED)) { |
2056 | if ((sc->ps_flags & PS_ENABLED)) | 2056 | if ((sc->ps_flags & PS_ENABLED)) |
2057 | ath9k_enable_ps(sc); | 2057 | ath9k_enable_ps(sc); |
2058 | else | 2058 | else |
@@ -2071,7 +2071,7 @@ static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq) | |||
2071 | &txq->axq_q, lastbf->list.prev); | 2071 | &txq->axq_q, lastbf->list.prev); |
2072 | 2072 | ||
2073 | txq->axq_depth--; | 2073 | txq->axq_depth--; |
2074 | txok = !(ts->ts_status & ATH9K_TXERR_MASK); | 2074 | txok = !(ts.ts_status & ATH9K_TXERR_MASK); |
2075 | txq->axq_tx_inprogress = false; | 2075 | txq->axq_tx_inprogress = false; |
2076 | spin_unlock_bh(&txq->axq_lock); | 2076 | spin_unlock_bh(&txq->axq_lock); |
2077 | 2077 | ||
@@ -2086,16 +2086,16 @@ static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq) | |||
2086 | * This frame is sent out as a single frame. | 2086 | * This frame is sent out as a single frame. |
2087 | * Use hardware retry status for this frame. | 2087 | * Use hardware retry status for this frame. |
2088 | */ | 2088 | */ |
2089 | bf->bf_retries = ts->ts_longretry; | 2089 | bf->bf_retries = ts.ts_longretry; |
2090 | if (ts->ts_status & ATH9K_TXERR_XRETRY) | 2090 | if (ts.ts_status & ATH9K_TXERR_XRETRY) |
2091 | bf->bf_state.bf_type |= BUF_XRETRY; | 2091 | bf->bf_state.bf_type |= BUF_XRETRY; |
2092 | ath_tx_rc_status(bf, ts, 0, txok, true); | 2092 | ath_tx_rc_status(bf, &ts, 0, txok, true); |
2093 | } | 2093 | } |
2094 | 2094 | ||
2095 | if (bf_isampdu(bf)) | 2095 | if (bf_isampdu(bf)) |
2096 | ath_tx_complete_aggr(sc, txq, bf, &bf_head, ts, txok); | 2096 | ath_tx_complete_aggr(sc, txq, bf, &bf_head, &ts, txok); |
2097 | else | 2097 | else |
2098 | ath_tx_complete_buf(sc, bf, txq, &bf_head, ts, txok, 0); | 2098 | ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, txok, 0); |
2099 | 2099 | ||
2100 | ath_wake_mac80211_queue(sc, txq); | 2100 | ath_wake_mac80211_queue(sc, txq); |
2101 | 2101 | ||