svn commit: r225660 - user/adrian/if_ath_tx/sys/dev/ath

Adrian Chadd adrian at FreeBSD.org
Mon Sep 19 09:52:04 UTC 2011


Author: adrian
Date: Mon Sep 19 09:52:03 2011
New Revision: 225660
URL: http://svn.freebsd.org/changeset/base/225660

Log:
  Un-break the handling of multi-rate retry in the TX path.

Modified:
  user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c

Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c	Mon Sep 19 08:52:06 2011	(r225659)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c	Mon Sep 19 09:52:03 2011	(r225660)
@@ -846,13 +846,21 @@ ath_tx_do_ratelookup(struct ath_softc *s
 	if (! bf->bf_state.bfs_doratelookup)
 		return;
 
+	/* Get rid of any previous state */
+	bzero(bf->bf_state.bfs_rc, sizeof(bf->bf_state.bfs_rc));
+
 	ATH_NODE_LOCK(ATH_NODE(bf->bf_node));
 	ath_rate_findrate(sc, ATH_NODE(bf->bf_node), bf->bf_state.bfs_shpream,
 	    bf->bf_state.bfs_pktlen, &rix, &try0, &rate);
-	/* XXX only do this if MRR is enabled for this frame? */
-	/* XXX and blank the rest if not? */
-	ath_rate_getxtxrates(sc, ATH_NODE(bf->bf_node), rix,
-	    bf->bf_state.bfs_rc);
+
+	/* In case MRR is disabled, make sure rc[0] is setup correctly */
+	bf->bf_state.bfs_rc[0].rix = rix;
+	bf->bf_state.bfs_rc[0].ratecode = rate;
+	bf->bf_state.bfs_rc[0].tries = try0;
+
+	if (bf->bf_state.bfs_ismrr && try0 != ATH_TXMAXTRY)
+		ath_rate_getxtxrates(sc, ATH_NODE(bf->bf_node), rix,
+		    bf->bf_state.bfs_rc);
 	ATH_NODE_UNLOCK(ATH_NODE(bf->bf_node));
 
 	sc->sc_txrix = rix;	/* for LED blinking */


More information about the svn-src-user mailing list