diff options
author | Sam Leffler <sam@FreeBSD.org> | 2007-09-18 20:46:36 +0000 |
---|---|---|
committer | Sam Leffler <sam@FreeBSD.org> | 2007-09-18 20:46:36 +0000 |
commit | f0ee92d585d979d7d2505e54a2047a516e889dd4 (patch) | |
tree | 44f6dd3e3645ee9223aaf6b6d10ddb712ea004a6 /sys/net80211 | |
parent | b337fbc43531bc018c4d7728fc99a6fca61c7a00 (diff) | |
download | src-f0ee92d585d979d7d2505e54a2047a516e889dd4.tar.gz src-f0ee92d585d979d7d2505e54a2047a516e889dd4.zip |
o add IEEE80211_RATE_MCS to use instead of naked constant (for marking MCS)
o correct ieee80211_rate2media handling of MCS
o correct rate HT announcements for 11n devices
Approved by: re (blanket wireless)
Notes
Notes:
svn path=/head/; revision=172226
Diffstat (limited to 'sys/net80211')
-rw-r--r-- | sys/net80211/_ieee80211.h | 2 | ||||
-rw-r--r-- | sys/net80211/ieee80211.c | 6 | ||||
-rw-r--r-- | sys/net80211/ieee80211_ht.c | 3 |
3 files changed, 8 insertions, 3 deletions
diff --git a/sys/net80211/_ieee80211.h b/sys/net80211/_ieee80211.h index 0d79a2c38bd6..9f50e3c4d21a 100644 --- a/sys/net80211/_ieee80211.h +++ b/sys/net80211/_ieee80211.h @@ -288,6 +288,8 @@ struct ieee80211_htrateset { uint8_t rs_rates[IEEE80211_HTRATE_MAXSIZE]; }; +#define IEEE80211_RATE_MCS 0x80 + /* * Roaming state visible to user space. There are two * thresholds that control whether roaming is considered; diff --git a/sys/net80211/ieee80211.c b/sys/net80211/ieee80211.c index 7e929b1bd7fc..ab092566fa8a 100644 --- a/sys/net80211/ieee80211.c +++ b/sys/net80211/ieee80211.c @@ -1119,14 +1119,16 @@ ieee80211_rate2media(struct ieee80211com *ic, int rate, enum ieee80211_phymode m * Check 11n rates first for match as an MCS. */ if (mode == IEEE80211_MODE_11NA) { - if ((rate & IEEE80211_RATE_BASIC) == 0) { + if (rate & IEEE80211_RATE_MCS) { + rate &= ~IEEE80211_RATE_MCS; m = findmedia(htrates, N(htrates), rate); if (m != IFM_AUTO) return m | IFM_IEEE80211_11NA; } } else if (mode == IEEE80211_MODE_11NG) { /* NB: 12 is ambiguous, it will be treated as an MCS */ - if ((rate & IEEE80211_RATE_BASIC) == 0) { + if (rate & IEEE80211_RATE_MCS) { + rate &= ~IEEE80211_RATE_MCS; m = findmedia(htrates, N(htrates), rate); if (m != IFM_AUTO) return m | IFM_IEEE80211_11NG; diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c index efef383fda7b..b96e3d9d3698 100644 --- a/sys/net80211/ieee80211_ht.c +++ b/sys/net80211/ieee80211_ht.c @@ -155,7 +155,8 @@ ht_announce(struct ieee80211com *ic, int mode, if_printf(ifp, "%s MCS: ", ieee80211_phymode_name[mode]); for (i = 0; i < rs->rs_nrates; i++) { - mword = ieee80211_rate2media(ic, rs->rs_rates[i], mode); + mword = ieee80211_rate2media(ic, + rs->rs_rates[i] | IEEE80211_RATE_MCS, mode); if (IFM_SUBTYPE(mword) != IFM_IEEE80211_MCS) continue; rate = ieee80211_htrates[rs->rs_rates[i]]; |