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

Adrian Chadd adrian at FreeBSD.org
Thu Aug 18 00:19:12 UTC 2011


Author: adrian
Date: Thu Aug 18 00:19:12 2011
New Revision: 224954
URL: http://svn.freebsd.org/changeset/base/224954

Log:
  In preparation for forming aggregates, push the descriptor setup and
  descriptor chain code into the software queue routine, and leave setting
  the rate control stuff until the packet is actually queued to the hardware.

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	Thu Aug 18 00:05:09 2011	(r224953)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c	Thu Aug 18 00:19:12 2011	(r224954)
@@ -1397,10 +1397,10 @@ ath_tx_raw_start(struct ath_softc *sc, s
 	 */
 
 	if (do_override) {
-		ATH_TXQ_LOCK(sc->sc_ac2q[pri]);
 		ath_tx_setds(sc, bf);
 		ath_tx_set_ratectrl(sc, ni, bf);
 		ath_tx_chaindesclist(sc, bf);
+		ATH_TXQ_LOCK(sc->sc_ac2q[pri]);
 		ath_tx_handoff(sc, sc->sc_ac2q[pri], bf);
 		ATH_TXQ_UNLOCK(sc->sc_ac2q[pri]);
 	}
@@ -1792,6 +1792,16 @@ ath_tx_swq(struct ath_softc *sc, struct 
 	bf->bf_state.bfs_aggr = 0;
 	bf->bf_state.bfs_aggrburst = 0;
 
+	/*
+	 * Program first and chain the descriptors together.
+	 *
+	 * These fields (along with the DMA map setup) are needed
+	 * by the aggregate forming code, which only overrides
+	 * the rate control setup and the aggregation fields.
+	 */
+	ath_tx_setds(sc, bf);
+	ath_tx_chaindesclist(sc, bf);
+
 	/* Queue frame to the tail of the software queue */
 	ATH_TXQ_LOCK(atid);
 	ATH_TXQ_INSERT_TAIL(atid, bf, bf_list);
@@ -2636,10 +2646,8 @@ ath_tx_tid_hw_queue_aggr(struct ath_soft
 		if (bf->bf_state.bfs_tid == IEEE80211_NONQOS_TID)
 			device_printf(sc->sc_dev, "%s: TID=16?\n", __func__);
 
-		/* Program descriptor */
-		ath_tx_setds(sc, bf);
+		/* Program rate control */
 		ath_tx_set_ratectrl(sc, ni, bf);
-		ath_tx_chaindesclist(sc, bf);
 
 		/* Punt to hardware or software txq */
 		ATH_TXQ_LOCK(txq);
@@ -2700,10 +2708,8 @@ ath_tx_tid_hw_queue_norm(struct ath_soft
 		/* Normal completion handler */
 		bf->bf_comp = ath_tx_normal_comp;
 
-		/* Program descriptor */
-		ath_tx_setds(sc, bf);
+		/* Program rate control*/
 		ath_tx_set_ratectrl(sc, ni, bf);
-		ath_tx_chaindesclist(sc, bf);
 
 		/* Punt to hardware or software txq */
 		ATH_TXQ_LOCK(txq);


More information about the svn-src-user mailing list