diff options
author | attilio <attilio@FreeBSD.org> | 2011-06-04 22:05:20 +0000 |
---|---|---|
committer | attilio <attilio@FreeBSD.org> | 2011-06-04 22:05:20 +0000 |
commit | 8e66ca1ff16b21df31a40fa743f8df3844507305 (patch) | |
tree | 7235c316aab81a86e3bfc131b1abae5475040624 /sys/net80211/ieee80211_ht.c | |
parent | 91525e4ff96713dd3149a3477069cc7213d0abae (diff) | |
parent | 786c89f781c52e7423abdc562256ef0830f60be6 (diff) | |
download | FreeBSD-src-8e66ca1ff16b21df31a40fa743f8df3844507305.zip FreeBSD-src-8e66ca1ff16b21df31a40fa743f8df3844507305.tar.gz |
MFC
Diffstat (limited to 'sys/net80211/ieee80211_ht.c')
-rw-r--r-- | sys/net80211/ieee80211_ht.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c index 8c4d7d3..c9d8448 100644 --- a/sys/net80211/ieee80211_ht.c +++ b/sys/net80211/ieee80211_ht.c @@ -2520,6 +2520,7 @@ ieee80211_add_htcap_body(uint8_t *frm, struct ieee80211_node *ni) frm[1] = (v) >> 8; \ frm += 2; \ } while (0) + struct ieee80211com *ic = ni->ni_ic; struct ieee80211vap *vap = ni->ni_vap; uint16_t caps, extcaps; int rxmax, density; @@ -2543,6 +2544,17 @@ ieee80211_add_htcap_body(uint8_t *frm, struct ieee80211_node *ni) /* use advertised setting (XXX locally constraint) */ rxmax = MS(ni->ni_htparam, IEEE80211_HTCAP_MAXRXAMPDU); density = MS(ni->ni_htparam, IEEE80211_HTCAP_MPDUDENSITY); + + /* + * NB: Hardware might support HT40 on some but not all + * channels. We can't determine this earlier because only + * after association the channel is upgraded to HT based + * on the negotiated capabilities. + */ + if (ni->ni_chan != IEEE80211_CHAN_ANYC && + findhtchan(ic, ni->ni_chan, IEEE80211_CHAN_HT40U) == NULL && + findhtchan(ic, ni->ni_chan, IEEE80211_CHAN_HT40D) == NULL) + caps &= ~IEEE80211_HTCAP_CHWIDTH40; } else { /* override 20/40 use based on current channel */ if (IEEE80211_IS_CHAN_HT40(ni->ni_chan)) |