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>