Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Feb 2011 03:52:52 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r218907 - head/sys/dev/ath
Message-ID:  <201102210352.p1L3qq9F054938@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Mon Feb 21 03:52:51 2011
New Revision: 218907
URL: http://svn.freebsd.org/changeset/base/218907

Log:
  Implement setting the short preamble bit if it's needed for the current node.
  
  Short preamble rates are only for legacy rates; MCS rate codes don't have a short
  preamble code like this.

Modified:
  head/sys/dev/ath/if_ath_tx_ht.c

Modified: head/sys/dev/ath/if_ath_tx_ht.c
==============================================================================
--- head/sys/dev/ath/if_ath_tx_ht.c	Mon Feb 21 01:20:56 2011	(r218906)
+++ head/sys/dev/ath/if_ath_tx_ht.c	Mon Feb 21 03:52:51 2011	(r218907)
@@ -103,7 +103,6 @@ ath_rateseries_setup(struct ath_softc *s
 	HAL_BOOL shortPreamble = AH_FALSE;
 	const HAL_RATE_TABLE *rt = sc->sc_currates;
 	int i;
-	uint8_t txrate;
 
 	if ((ic->ic_flags & IEEE80211_F_SHPREAMBLE) &&
 	    (ni->ni_capinfo & IEEE80211_CAPINFO_SHORT_PREAMBLE))
@@ -111,7 +110,6 @@ ath_rateseries_setup(struct ath_softc *s
 
 	memset(series, 0, sizeof(HAL_11N_RATE_SERIES) * 4);
 	for (i = 0; i < 4;  i++) {
-		txrate = rt->info[rix[i]].rateCode;
 		series[i].Tries = try[i];
 		series[i].ChSel = sc->sc_txchainmask;
 		if (ic->ic_protmode == IEEE80211_PROT_RTSCTS ||
@@ -128,14 +126,16 @@ ath_rateseries_setup(struct ath_softc *s
 		if (ni->ni_htcap & IEEE80211_HTCAP_SHORTGI40)
 			series[i].RateFlags |= HAL_RATESERIES_HALFGI;
 
-		/* XXX should this check the short preamble value should be set for legacy rates? -adrian */
-		series[i].Rate = txrate;
+		series[i].Rate = rt->info[rix[i]].rateCode;
+		/* the short preamble field is only applicable for non-MCS rates */
+		if (shortPreamble && ! (series[i].Rate & IEEE80211_RATE_MCS))
+			series[i].Rate |= rt->info[rix[i]].shortPreamble;
 
 		/* PktDuration doesn't include slot, ACK, RTS, etc timing - it's just the packet duration */
-		if (txrate & IEEE80211_RATE_MCS) {
+		if (series[i].Rate & IEEE80211_RATE_MCS) {
 			series[i].PktDuration =
 			    ath_computedur_ht(pktlen
-				, txrate
+				, series[i].Rate
 				, ic->ic_txstream
 				, (ni->ni_htcap & IEEE80211_HTCAP_CHWIDTH40)
 				, series[i].RateFlags & HAL_RATESERIES_HALFGI);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201102210352.p1L3qq9F054938>