PERFORCE change 151569 for review
Sam Leffler
sam at FreeBSD.org
Sun Oct 19 20:37:01 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=151569
Change 151569 by sam at sam_ebb on 2008/10/19 20:36:42
Fix calculation of the table that maps ieee rates to indices
into the hal phy/rate table: HT rate tables have overlapping
ieee rates as there are entries for both legacy rates and MCS.
Distinguish MCS using the IEEE80211_RATE_MCS bit. This fixes
complaints in sample about bogus rate codes when associated
to an 11n ap on an 11n channel.
Affected files ...
.. //depot/projects/vap/sys/dev/ath/if_ath.c#109 edit
Differences ...
==== //depot/projects/vap/sys/dev/ath/if_ath.c#109 (text+ko) ====
@@ -6171,8 +6171,13 @@
memset(sc->sc_rixmap, 0xff, sizeof(sc->sc_rixmap));
rt = sc->sc_rates[mode];
KASSERT(rt != NULL, ("no h/w rate set for phy mode %u", mode));
- for (i = 0; i < rt->rateCount; i++)
- sc->sc_rixmap[rt->info[i].dot11Rate & IEEE80211_RATE_VAL] = i;
+ for (i = 0; i < rt->rateCount; i++) {
+ uint8_t ieeerate = rt->info[i].dot11Rate & IEEE80211_RATE_VAL;
+ if (rt->info[i].phy != IEEE80211_T_HT)
+ sc->sc_rixmap[ieeerate] = i;
+ else
+ sc->sc_rixmap[ieeerate | IEEE80211_RATE_MCS] = i;
+ }
memset(sc->sc_hwmap, 0, sizeof(sc->sc_hwmap));
for (i = 0; i < N(sc->sc_hwmap); i++) {
if (i >= rt->rateCount) {
@@ -6183,7 +6188,7 @@
sc->sc_hwmap[i].ieeerate =
rt->info[i].dot11Rate & IEEE80211_RATE_VAL;
if (rt->info[i].phy == IEEE80211_T_HT)
- sc->sc_hwmap[i].ieeerate |= 0x80; /* MCS */
+ sc->sc_hwmap[i].ieeerate |= IEEE80211_RATE_MCS;
sc->sc_hwmap[i].txflags = IEEE80211_RADIOTAP_F_DATAPAD;
if (rt->info[i].shortPreamble ||
rt->info[i].phy == IEEE80211_T_OFDM)
More information about the p4-projects
mailing list