summaryrefslogtreecommitdiffstats
path: root/sys/net80211
diff options
context:
space:
mode:
authorbschmidt <bschmidt@FreeBSD.org>2011-03-13 11:47:43 +0000
committerbschmidt <bschmidt@FreeBSD.org>2011-03-13 11:47:43 +0000
commit865ccb7c058c5bbeb1817948ed5e551a2115f82e (patch)
tree32ac0998b0c4632d7fc251a6bd000623ac2fa533 /sys/net80211
parentcc089361067545187c0723bb96884ed3e4155609 (diff)
downloadFreeBSD-src-865ccb7c058c5bbeb1817948ed5e551a2115f82e.zip
FreeBSD-src-865ccb7c058c5bbeb1817948ed5e551a2115f82e.tar.gz
While determining the maxrate for ieee80211_media_setup() honor
the device capabilities.
Diffstat (limited to 'sys/net80211')
-rw-r--r--sys/net80211/ieee80211.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/sys/net80211/ieee80211.c b/sys/net80211/ieee80211.c
index c433c2c..cf5945a 100644
--- a/sys/net80211/ieee80211.c
+++ b/sys/net80211/ieee80211.c
@@ -1076,10 +1076,18 @@ ieee80211_media_setup(struct ieee80211com *ic,
isset(ic->ic_modecaps, IEEE80211_MODE_11NG)) {
addmedia(media, caps, addsta,
IEEE80211_MODE_AUTO, IFM_IEEE80211_MCS);
- /* XXX could walk htrates */
- /* XXX known array size */
- if (ieee80211_htrates[15].ht40_rate_400ns > maxrate)
- maxrate = ieee80211_htrates[15].ht40_rate_400ns;
+ i = ic->ic_txstream * 8 - 1;
+ if ((ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40) &&
+ (ic->ic_htcaps & IEEE80211_HTCAP_SHORTGI40))
+ rate = ieee80211_htrates[i].ht40_rate_400ns;
+ else if ((ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40))
+ rate = ieee80211_htrates[i].ht40_rate_800ns;
+ else if ((ic->ic_htcaps & IEEE80211_HTCAP_SHORTGI20))
+ rate = ieee80211_htrates[i].ht20_rate_400ns;
+ else
+ rate = ieee80211_htrates[i].ht20_rate_800ns;
+ if (rate > maxrate)
+ maxrate = rate;
}
return maxrate;
}
OpenPOWER on IntegriCloud