1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-21 11:13:30 +00:00

Enable STBC for the given rate series if it's negotiated:

* If both ends have negotiated (at least) one stream;
* Only if it's a single stream rate (MCS0-7);
* Only if there's more than one TX chain enabled.

Tested:

* AR9280 STA mode -> Atheros AP; tested both MCS2 (STBC) and MCS12 (no STBC.)
  Verified using athalq to inspect the TX descriptors.

TODO:

* Test AR5416 - no STBC should be enabled;
* Test AR9280 with one TX chain enabled - no STBC should be enabled.
This commit is contained in:
Adrian Chadd 2013-02-27 00:49:32 +00:00
parent 5df4935e7a
commit 1a3a560767
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=247368

View File

@ -536,17 +536,30 @@ ath_rateseries_setup(struct ath_softc *sc, struct ieee80211_node *ni,
series[i].RateFlags |= HAL_RATESERIES_HALFGI;
/*
* XXX TODO: STBC if it's possible
* Setup rate and TX power cap for this series.
*/
series[i].Rate = rt->info[rc[i].rix].rateCode;
series[i].RateIndex = rc[i].rix;
series[i].tx_power_cap = 0x3f; /* XXX for now */
/*
* If we have STBC TX enabled and the receiver
* can receive (at least) 1 stream STBC, AND it's
* MCS 0-7, AND we have at least two chains enabled,
* enable STBC.
*/
if (ic->ic_htcaps & IEEE80211_HTCAP_TXSTBC &&
ni->ni_htcap & IEEE80211_HTCAP_RXSTBC_1STREAM &&
(sc->sc_cur_txchainmask > 1) &&
HT_RC_2_STREAMS(series[i].Rate) == 1) {
series[i].RateFlags |= HAL_RATESERIES_STBC;
}
/*
* XXX TODO: LDPC if it's possible
*/
series[i].Rate = rt->info[rc[i].rix].rateCode;
series[i].RateIndex = rc[i].rix;
series[i].tx_power_cap = 0x3f; /* XXX for now */
/*
* PktDuration doesn't include slot, ACK, RTS, etc timing -
* it's just the packet duration