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

Adrian Chadd adrian at FreeBSD.org
Tue Aug 16 13:34:35 UTC 2011


Author: adrian
Date: Tue Aug 16 13:34:34 2011
New Revision: 224909
URL: http://svn.freebsd.org/changeset/base/224909

Log:
  Break out the descriptor setup code and stuff it into
  ath_tx_setds().
  
  The reference code also sets up the descriptor chain
  in this function. I'm not doing this just yet.

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

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	Tue Aug 16 10:52:29 2011	(r224908)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_ath_tx.c	Tue Aug 16 13:34:34 2011	(r224909)
@@ -603,6 +603,34 @@ ath_tx_calc_ctsduration(struct ath_hal *
 	return ctsduration;
 }
 
+
+/*
+ * Setup the descriptor chain for a normal or fast-frame
+ * frame.
+ */
+static void
+ath_tx_setds(struct ath_softc *sc, struct ath_buf *bf)
+{
+	struct ath_desc *ds = bf->bf_desc;
+	struct ath_hal *ah = sc->sc_ah;
+
+	ath_hal_setuptxdesc(ah, ds
+		, bf->bf_state.bfs_pktlen	/* packet length */
+		, bf->bf_state.bfs_hdrlen	/* header length */
+		, bf->bf_state.bfs_atype	/* Atheros packet type */
+		, bf->bf_state.bfs_txpower	/* txpower */
+		, bf->bf_state.bfs_txrate0
+		, bf->bf_state.bfs_try0		/* series 0 rate/tries */
+		, bf->bf_state.bfs_keyix	/* key cache index */
+		, bf->bf_state.bfs_txantenna	/* antenna mode */
+		, bf->bf_state.bfs_flags	/* flags */
+		, bf->bf_state.bfs_ctsrate	/* rts/cts rate */
+		, bf->bf_state.bfs_ctsduration	/* rts/cts duration */
+	);
+
+	/* XXX TODO: Setup descriptor chain */
+}
+
 static int
 ath_tx_normal_setup(struct ath_softc *sc, struct ieee80211_node *ni,
     struct ath_buf *bf, struct mbuf *m0)
@@ -917,7 +945,6 @@ ath_tx_normal_setup(struct ath_softc *sc
 
 	/* This point forward is actual TX bits */
 
-
 	/*
 	 * At this point we are committed to sending the frame
 	 * and we don't need to look at m_nextpkt; clear it in
@@ -945,31 +972,33 @@ ath_tx_normal_setup(struct ath_softc *sc
 		ieee80211_radiotap_tx(vap, m0);
 	}
 
-
 	if (ath_tx_is_11n(sc)) {
 		rate[0] = rix;
 		try[0] = try0;
 	}
 
+	/* Store the decided rate index values away */
+	bf->bf_state.bfs_pktlen = pktlen;
+	bf->bf_state.bfs_hdrlen = hdrlen;
+	bf->bf_state.bfs_atype = atype;
+	bf->bf_state.bfs_txpower = ni->ni_txpower;
+	bf->bf_state.bfs_txrate0 = txrate;
+	bf->bf_state.bfs_try0 = try0;
+	bf->bf_state.bfs_keyix = keyix;
+	bf->bf_state.bfs_txantenna = sc->sc_txantenna;
+	bf->bf_state.bfs_flags = flags;
+	bf->bf_txflags = flags;
+
+	/* XXX this should be done in ath_tx_setrate() */
+	bf->bf_state.bfs_ctsrate = ctsrate;
+	bf->bf_state.bfs_ctsduration = ctsduration;
+	bf->bf_state.bfs_ismrr = ismrr;
+
 	/*
 	 * Formulate first tx descriptor with tx controls.
 	 */
-	/* XXX check return value? */
-	/* XXX is this ok to call for 11n descriptors? */
-	/* XXX or should it go through the first, next, last 11n calls? */
-	ath_hal_setuptxdesc(ah, ds
-		, pktlen		/* packet length */
-		, hdrlen		/* header length */
-		, atype			/* Atheros packet type */
-		, ni->ni_txpower	/* txpower */
-		, txrate, try0		/* series 0 rate/tries */
-		, keyix			/* key cache index */
-		, sc->sc_txantenna	/* antenna mode */
-		, flags			/* flags */
-		, ctsrate		/* rts/cts rate */
-		, ctsduration		/* rts/cts duration */
-	);
-	bf->bf_txflags = flags;
+	ath_tx_setds(sc, bf);
+
 	/*
 	 * Setup the multi-rate retry state only when we're
 	 * going to use it.  This assumes ath_hal_setuptxdesc
@@ -986,6 +1015,7 @@ ath_tx_normal_setup(struct ath_softc *sc
 		ATH_NODE_UNLOCK(an);
         }
 
+	/* Setup 11n rate scenario for 11n NICs only */
         if (ath_tx_is_11n(sc)) {
                 ath_buf_set_rate(sc, ni, bf, pktlen, flags, ctsrate,
 		    (atype == HAL_PKT_TYPE_PSPOLL), rate, try);
@@ -1277,20 +1307,26 @@ ath_tx_raw_start(struct ath_softc *sc, s
 	 */
 	ds = bf->bf_desc;
 	/* XXX check return value? */
-	ath_hal_setuptxdesc(ah, ds
-		, pktlen		/* packet length */
-		, hdrlen		/* header length */
-		, atype			/* Atheros packet type */
-		, params->ibp_power	/* txpower */
-		, txrate, try0		/* series 0 rate/tries */
-		, keyix			/* key cache index */
-		, txantenna		/* antenna mode */
-		, flags			/* flags */
-		, ctsrate		/* rts/cts rate */
-		, ctsduration		/* rts/cts duration */
-	);
+
+	/* Store the decided rate index values away */
+	bf->bf_state.bfs_pktlen = pktlen;
+	bf->bf_state.bfs_hdrlen = hdrlen;
+	bf->bf_state.bfs_atype = atype;
+	bf->bf_state.bfs_txpower = params->ibp_power;
+	bf->bf_state.bfs_txrate0 = txrate;
+	bf->bf_state.bfs_try0 = try0;
+	bf->bf_state.bfs_keyix = keyix;
+	bf->bf_state.bfs_txantenna = txantenna;
+	bf->bf_state.bfs_flags = flags;
 	bf->bf_txflags = flags;
 
+	/* XXX this should be done in ath_tx_setrate() */
+	bf->bf_state.bfs_ctsrate = ctsrate;
+	bf->bf_state.bfs_ctsduration = ctsduration;
+	bf->bf_state.bfs_ismrr = ismrr;
+
+	ath_tx_setds(sc, bf);
+
 	if (ath_tx_is_11n(sc)) {
 		rate[0] = ath_tx_findrix(sc, params->ibp_rate0);
 		try[0] = params->ibp_try0;

Modified: user/adrian/if_ath_tx/sys/dev/ath/if_athvar.h
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/if_athvar.h	Tue Aug 16 10:52:29 2011	(r224908)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_athvar.h	Tue Aug 16 13:34:34 2011	(r224909)
@@ -209,6 +209,7 @@ struct ath_buf {
 		int bfs_dobaw:1;	/* actually check against BAW? */
 		int bfs_shpream:1;	/* use short preamble */
 		int bfs_istxfrag:1;	/* is fragmented */
+		int bfs_ismrr:1;	/* do multi-rate TX retry */
 		int bfs_nfl;		/* next fragment length */
 
 		/*
@@ -220,10 +221,15 @@ struct ath_buf {
 		int bfs_hdrlen;		/* length of this packet header */
 		uint16_t bfs_al;	/* length of aggregate */
 		int bfs_flags;		/* HAL descriptor flags */
+		int bfs_txrate0;	/* first TX rate */
+		int bfs_try0;		/* first try count */
 		int bfs_keyix;		/* crypto key index */
-		int bfs_keytype;	/* crypto key type */
+		int bfs_txpower;	/* tx power */
+		int bfs_txantenna;	/* TX antenna config */
 		enum ieee80211_protmode bfs_protmode;
 		HAL_11N_RATE_SERIES bfs_rc11n[4];	/* 11n TX series */
+		int bfs_ctsrate;	/* CTS rate */
+		int bfs_ctsduration;	/* CTS duration (pre-11n NICs) */
 		struct ath_rc_series bfs_rc[4];	/* non-11n TX series */
 	} bf_state;
 };


More information about the svn-src-user mailing list