summaryrefslogtreecommitdiffstats
path: root/sys/net80211
diff options
context:
space:
mode:
authorrpaulo <rpaulo@FreeBSD.org>2010-03-23 12:03:09 +0000
committerrpaulo <rpaulo@FreeBSD.org>2010-03-23 12:03:09 +0000
commit417d4c8dbbaa164d6eedfba9e76267e52de4caeb (patch)
tree40ce2821f480e0698d91ac6339ce941bc5b0412d /sys/net80211
parentc95938299eedd42deab4cec6bce8ba82c8960cc3 (diff)
downloadFreeBSD-src-417d4c8dbbaa164d6eedfba9e76267e52de4caeb.zip
FreeBSD-src-417d4c8dbbaa164d6eedfba9e76267e52de4caeb.tar.gz
Add a new field for extended HT capabilities.
Submitted by: Alexander Egorenkov <egorenar at gmail.com> MFC after: 2 weeks Sponsored by: iXsystems, inc.
Diffstat (limited to 'sys/net80211')
-rw-r--r--sys/net80211/ieee80211.c1
-rw-r--r--sys/net80211/ieee80211_ht.c13
-rw-r--r--sys/net80211/ieee80211_var.h5
3 files changed, 16 insertions, 3 deletions
diff --git a/sys/net80211/ieee80211.c b/sys/net80211/ieee80211.c
index f72e10b..8a50bc0 100644
--- a/sys/net80211/ieee80211.c
+++ b/sys/net80211/ieee80211.c
@@ -404,6 +404,7 @@ ieee80211_vap_setup(struct ieee80211com *ic, struct ieee80211vap *vap,
vap->iv_flags_ven = ic->ic_flags_ven;
vap->iv_caps = ic->ic_caps &~ IEEE80211_C_OPMODE;
vap->iv_htcaps = ic->ic_htcaps;
+ vap->iv_htextcaps = ic->ic_htextcaps;
vap->iv_opmode = opmode;
vap->iv_caps |= ieee80211_opcap[opmode];
switch (opmode) {
diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c
index 4dbe917..2d44816 100644
--- a/sys/net80211/ieee80211_ht.c
+++ b/sys/net80211/ieee80211_ht.c
@@ -2346,7 +2346,7 @@ ieee80211_add_htcap_body(uint8_t *frm, struct ieee80211_node *ni)
frm += 2; \
} while (0)
struct ieee80211vap *vap = ni->ni_vap;
- uint16_t caps;
+ uint16_t caps, extcaps;
int rxmax, density;
/* HT capabilities */
@@ -2404,8 +2404,17 @@ ieee80211_add_htcap_body(uint8_t *frm, struct ieee80211_node *ni)
*/
ieee80211_set_htrates(frm, &ieee80211_rateset_11n);
- frm += sizeof(struct ieee80211_ie_htcap) -
+ frm += __offsetof(struct ieee80211_ie_htcap, hc_extcap) -
__offsetof(struct ieee80211_ie_htcap, hc_mcsset);
+
+ /* HT extended capabilities */
+ extcaps = vap->iv_htextcaps & 0xffff;
+
+ ADDSHORT(frm, extcaps);
+
+ frm += sizeof(struct ieee80211_ie_htcap) -
+ __offsetof(struct ieee80211_ie_htcap, hc_txbf);
+
return frm;
#undef ADDSHORT
}
diff --git a/sys/net80211/ieee80211_var.h b/sys/net80211/ieee80211_var.h
index d6f3e66..3916b6c 100644
--- a/sys/net80211/ieee80211_var.h
+++ b/sys/net80211/ieee80211_var.h
@@ -137,6 +137,7 @@ struct ieee80211com {
uint32_t ic_flags_ven; /* vendor state flags */
uint32_t ic_caps; /* capabilities */
uint32_t ic_htcaps; /* HT capabilities */
+ uint32_t ic_htextcaps; /* HT extended capabilities */
uint32_t ic_cryptocaps; /* crypto capabilities */
uint8_t ic_modecaps[2]; /* set of mode capabilities */
uint8_t ic_promisc; /* vap's needing promisc mode */
@@ -313,7 +314,8 @@ struct ieee80211com {
int batimeout, int baseqctl);
void (*ic_ampdu_rx_stop)(struct ieee80211_node *,
struct ieee80211_rx_ampdu *);
- uint64_t ic_spare[8];
+ uint64_t ic_spare[7];
+ uint32_t ic_spare2;
};
struct ieee80211_aclator;
@@ -340,6 +342,7 @@ struct ieee80211vap {
uint32_t iv_flags_ven; /* vendor state flags */
uint32_t iv_caps; /* capabilities */
uint32_t iv_htcaps; /* HT capabilities */
+ uint32_t iv_htextcaps; /* HT extended capabilities */
enum ieee80211_opmode iv_opmode; /* operation mode */
enum ieee80211_state iv_state; /* state machine state */
enum ieee80211_state iv_nstate; /* pending state */
OpenPOWER on IntegriCloud