summaryrefslogtreecommitdiffstats
path: root/sys/dev/ath
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2005-07-07 00:04:50 +0000
committersam <sam@FreeBSD.org>2005-07-07 00:04:50 +0000
commit2d2fef2be0a1ca4fe9f05c621bb2494d7a9ca47c (patch)
tree3a50b925c06cee02322f165106722967e2a713e8 /sys/dev/ath
parentbbc077981c1c1dbffff49d7afcd74292d442eb62 (diff)
downloadFreeBSD-src-2d2fef2be0a1ca4fe9f05c621bb2494d7a9ca47c.zip
FreeBSD-src-2d2fef2be0a1ca4fe9f05c621bb2494d7a9ca47c.tar.gz
only invoke ath_rate_tx_complete to update rate control state when the
frame being sent is to be ack'd and hasn't been filtered by the h/w; this insures we don't pass in tx descriptors that have no meaningful state (e.g. mcast/bcast frames are not acked and so have no tx retry counts) Approved by: re (scottl) Obtained from: Atheros
Diffstat (limited to 'sys/dev/ath')
-rw-r--r--sys/dev/ath/if_ath.c5
-rw-r--r--sys/dev/ath/if_athvar.h1
2 files changed, 5 insertions, 1 deletions
diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c
index 10adb9b..65d2892 100644
--- a/sys/dev/ath/if_ath.c
+++ b/sys/dev/ath/if_ath.c
@@ -3534,6 +3534,7 @@ ath_tx_start(struct ath_softc *sc, struct ieee80211_node *ni, struct ath_buf *bf
, ctsrate /* rts/cts rate */
, ctsduration /* rts/cts duration */
);
+ bf->bf_flags = flags;
/*
* Setup the multi-rate retry state only when we're
* going to use it. This assumes ath_hal_setuptxdesc
@@ -3709,7 +3710,9 @@ ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq)
/*
* Hand the descriptor to the rate control algorithm.
*/
- ath_rate_tx_complete(sc, an, ds, ds0);
+ if ((ds->ds_txstat.ts_status & HAL_TXERR_FILT) == 0 &&
+ (bf->bf_flags & HAL_TXDESC_NOACK) == 0)
+ ath_rate_tx_complete(sc, an, ds, ds0);
/*
* Reclaim reference to node.
*
diff --git a/sys/dev/ath/if_athvar.h b/sys/dev/ath/if_athvar.h
index 543b249..95aa365 100644
--- a/sys/dev/ath/if_athvar.h
+++ b/sys/dev/ath/if_athvar.h
@@ -98,6 +98,7 @@ struct ath_node {
struct ath_buf {
STAILQ_ENTRY(ath_buf) bf_list;
int bf_nseg;
+ int bf_flags; /* tx descriptor flags */
struct ath_desc *bf_desc; /* virtual addr of desc */
bus_addr_t bf_daddr; /* physical addr of desc */
bus_dmamap_t bf_dmamap; /* DMA map for mbuf chain */
OpenPOWER on IntegriCloud