mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-23 19:28:36 +00:00
net80211: migrate ic_vhtcaps, ic_vht_mcsinfo, ic_flags_vht
Like for the VAP rename ic_flags_vht to ic_vht_flags for consistency to keep "VHT" fields together and merge ic_vhtcaps and ic_vht_mcsinfo into struct ieee80211_vht_cap ic_vht_cap. While the structure layout changes no other functional changes intended. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: adrian, cc Differential Revision: https://reviews.freebsd.org/D42421
This commit is contained in:
parent
fbba0d6b63
commit
562adbe1d3
|
@ -3556,16 +3556,16 @@ lkpi_ic_getradiocaps(struct ieee80211com *ic, int maxchan,
|
||||||
if (hw->wiphy->bands[NL80211_BAND_5GHZ]->vht_cap.vht_supported){
|
if (hw->wiphy->bands[NL80211_BAND_5GHZ]->vht_cap.vht_supported){
|
||||||
|
|
||||||
ic->ic_flags_ext |= IEEE80211_FEXT_VHT;
|
ic->ic_flags_ext |= IEEE80211_FEXT_VHT;
|
||||||
ic->ic_vhtcaps =
|
ic->ic_vht_cap.vht_cap_info =
|
||||||
hw->wiphy->bands[NL80211_BAND_5GHZ]->vht_cap.cap;
|
hw->wiphy->bands[NL80211_BAND_5GHZ]->vht_cap.cap;
|
||||||
|
|
||||||
setbit(bands, IEEE80211_MODE_VHT_5GHZ);
|
setbit(bands, IEEE80211_MODE_VHT_5GHZ);
|
||||||
chan_flags |= NET80211_CBW_FLAG_VHT80;
|
chan_flags |= NET80211_CBW_FLAG_VHT80;
|
||||||
if (IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160MHZ(
|
if (IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160MHZ(
|
||||||
ic->ic_vhtcaps))
|
ic->ic_vht_cap.vht_cap_info))
|
||||||
chan_flags |= NET80211_CBW_FLAG_VHT160;
|
chan_flags |= NET80211_CBW_FLAG_VHT160;
|
||||||
if (IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160_80P80MHZ(
|
if (IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160_80P80MHZ(
|
||||||
ic->ic_vhtcaps))
|
ic->ic_vht_cap.vht_cap_info))
|
||||||
chan_flags |= NET80211_CBW_FLAG_VHT80P80;
|
chan_flags |= NET80211_CBW_FLAG_VHT80P80;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -553,7 +553,7 @@ ieee80211_vap_setup(struct ieee80211com *ic, struct ieee80211vap *vap,
|
||||||
vap->iv_htextcaps = ic->ic_htextcaps;
|
vap->iv_htextcaps = ic->ic_htextcaps;
|
||||||
|
|
||||||
/* 11ac capabilities - XXX methodize */
|
/* 11ac capabilities - XXX methodize */
|
||||||
vap->iv_vht_cap.vht_cap_info = ic->ic_vhtcaps;
|
vap->iv_vht_cap.vht_cap_info = ic->ic_vht_cap.vht_cap_info;
|
||||||
vap->iv_vhtextcaps = ic->ic_vhtextcaps;
|
vap->iv_vhtextcaps = ic->ic_vhtextcaps;
|
||||||
|
|
||||||
vap->iv_opmode = opmode;
|
vap->iv_opmode = opmode;
|
||||||
|
@ -944,9 +944,9 @@ ieee80211_syncflag_vht_locked(struct ieee80211com *ic, int flag)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (bit)
|
if (bit)
|
||||||
ic->ic_flags_vht |= flag;
|
ic->ic_vht_flags |= flag;
|
||||||
else
|
else
|
||||||
ic->ic_flags_vht &= ~flag;
|
ic->ic_vht_flags &= ~flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -672,7 +672,7 @@ _db_show_com(const struct ieee80211com *ic, int showvaps, int showsta,
|
||||||
db_printf("\tcryptocaps=%b\n",
|
db_printf("\tcryptocaps=%b\n",
|
||||||
ic->ic_cryptocaps, IEEE80211_CRYPTO_BITS);
|
ic->ic_cryptocaps, IEEE80211_CRYPTO_BITS);
|
||||||
db_printf("\thtcaps=%b\n", ic->ic_htcaps, IEEE80211_HTCAP_BITS);
|
db_printf("\thtcaps=%b\n", ic->ic_htcaps, IEEE80211_HTCAP_BITS);
|
||||||
db_printf("\tvhtcaps=%b\n", ic->ic_vhtcaps, IEEE80211_VHTCAP_BITS);
|
db_printf("\tvhtcaps=%b\n", ic->ic_vht_cap.vht_cap_info, IEEE80211_VHTCAP_BITS);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
uint8_t ic_modecaps[2]; /* set of mode capabilities */
|
uint8_t ic_modecaps[2]; /* set of mode capabilities */
|
||||||
|
|
|
@ -711,7 +711,7 @@ ieee80211_ioctl_getdevcaps(struct ieee80211com *ic,
|
||||||
dc->dc_drivercaps = ic->ic_caps;
|
dc->dc_drivercaps = ic->ic_caps;
|
||||||
dc->dc_cryptocaps = ic->ic_cryptocaps;
|
dc->dc_cryptocaps = ic->ic_cryptocaps;
|
||||||
dc->dc_htcaps = ic->ic_htcaps;
|
dc->dc_htcaps = ic->ic_htcaps;
|
||||||
dc->dc_vhtcaps = ic->ic_vhtcaps;
|
dc->dc_vhtcaps = ic->ic_vht_cap.vht_cap_info;
|
||||||
ci = &dc->dc_chaninfo;
|
ci = &dc->dc_chaninfo;
|
||||||
ic->ic_getradiocaps(ic, maxchans, &ci->ic_nchans, ci->ic_chans);
|
ic->ic_getradiocaps(ic, maxchans, &ci->ic_nchans, ci->ic_chans);
|
||||||
KASSERT(ci->ic_nchans <= maxchans,
|
KASSERT(ci->ic_nchans <= maxchans,
|
||||||
|
|
|
@ -809,7 +809,7 @@ ieee80211_setupcurchan(struct ieee80211com *ic, struct ieee80211_channel *c)
|
||||||
* based on what HT has done; it may further promote the
|
* based on what HT has done; it may further promote the
|
||||||
* channel to VHT80 or above.
|
* channel to VHT80 or above.
|
||||||
*/
|
*/
|
||||||
if (ic->ic_vhtcaps != 0) {
|
if (ic->ic_vht_cap.vht_cap_info != 0) {
|
||||||
int flags = getvhtadjustflags(ic);
|
int flags = getvhtadjustflags(ic);
|
||||||
if (flags > ieee80211_vhtchanflags(c))
|
if (flags > ieee80211_vhtchanflags(c))
|
||||||
c = ieee80211_vht_adjust_channel(ic, c, flags);
|
c = ieee80211_vht_adjust_channel(ic, c, flags);
|
||||||
|
|
|
@ -149,10 +149,10 @@ ieee80211_init_channels(struct ieee80211com *ic,
|
||||||
if (isset(bands, IEEE80211_MODE_VHT_5GHZ)) {
|
if (isset(bands, IEEE80211_MODE_VHT_5GHZ)) {
|
||||||
cbw_flags |= NET80211_CBW_FLAG_HT40; /* Make sure this is set; or assert? */
|
cbw_flags |= NET80211_CBW_FLAG_HT40; /* Make sure this is set; or assert? */
|
||||||
cbw_flags |= NET80211_CBW_FLAG_VHT80;
|
cbw_flags |= NET80211_CBW_FLAG_VHT80;
|
||||||
if (IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160MHZ(ic->ic_vhtcaps))
|
if (IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160MHZ(ic->ic_vht_cap.vht_cap_info))
|
||||||
cbw_flags |= NET80211_CBW_FLAG_VHT160;
|
cbw_flags |= NET80211_CBW_FLAG_VHT160;
|
||||||
if (IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160_80P80MHZ(
|
if (IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160_80P80MHZ(
|
||||||
ic->ic_vhtcaps))
|
ic->ic_vht_cap.vht_cap_info))
|
||||||
cbw_flags |= NET80211_CBW_FLAG_VHT80P80;
|
cbw_flags |= NET80211_CBW_FLAG_VHT80P80;
|
||||||
ieee80211_add_channel_list_5ghz(chans, IEEE80211_CHAN_MAX,
|
ieee80211_add_channel_list_5ghz(chans, IEEE80211_CHAN_MAX,
|
||||||
nchans, def_chan_5ghz_band1, nitems(def_chan_5ghz_band1),
|
nchans, def_chan_5ghz_band1, nitems(def_chan_5ghz_band1),
|
||||||
|
|
|
@ -240,10 +240,9 @@ struct ieee80211com {
|
||||||
uint8_t ic_txstream; /* # TX streams */
|
uint8_t ic_txstream; /* # TX streams */
|
||||||
|
|
||||||
/* VHT information */
|
/* VHT information */
|
||||||
uint32_t ic_vhtcaps; /* VHT capabilities */
|
uint32_t ic_vht_flags; /* VHT state flags */
|
||||||
|
struct ieee80211_vht_cap ic_vht_cap; /* VHT capabilities + MCS info */
|
||||||
uint32_t ic_vhtextcaps; /* VHT extended capabilities (TODO) */
|
uint32_t ic_vhtextcaps; /* VHT extended capabilities (TODO) */
|
||||||
struct ieee80211_vht_mcs_info ic_vht_mcsinfo; /* Support TX/RX VHT MCS */
|
|
||||||
uint32_t ic_flags_vht; /* VHT state flags */
|
|
||||||
uint32_t ic_vht_spare[3];
|
uint32_t ic_vht_spare[3];
|
||||||
|
|
||||||
/* optional state for Atheros SuperG protocol extensions */
|
/* optional state for Atheros SuperG protocol extensions */
|
||||||
|
|
|
@ -144,7 +144,7 @@ ieee80211_vht_vattach(struct ieee80211vap *vap)
|
||||||
if (! IEEE80211_CONF_VHT(ic))
|
if (! IEEE80211_CONF_VHT(ic))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
vap->iv_vht_cap.vht_cap_info = ic->ic_vhtcaps;
|
vap->iv_vht_cap.vht_cap_info = ic->ic_vht_cap.vht_cap_info;
|
||||||
vap->iv_vhtextcaps = ic->ic_vhtextcaps;
|
vap->iv_vhtextcaps = ic->ic_vhtextcaps;
|
||||||
|
|
||||||
/* XXX assume VHT80 support; should really check vhtcaps */
|
/* XXX assume VHT80 support; should really check vhtcaps */
|
||||||
|
@ -157,7 +157,7 @@ ieee80211_vht_vattach(struct ieee80211vap *vap)
|
||||||
if (IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160_80P80MHZ(vap->iv_vht_cap.vht_cap_info))
|
if (IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160_80P80MHZ(vap->iv_vht_cap.vht_cap_info))
|
||||||
vap->iv_vht_flags |= IEEE80211_FVHT_USEVHT80P80;
|
vap->iv_vht_flags |= IEEE80211_FVHT_USEVHT80P80;
|
||||||
|
|
||||||
memcpy(&vap->iv_vht_cap.supp_mcs, &ic->ic_vht_mcsinfo,
|
memcpy(&vap->iv_vht_cap.supp_mcs, &ic->ic_vht_cap.supp_mcs,
|
||||||
sizeof(struct ieee80211_vht_mcs_info));
|
sizeof(struct ieee80211_vht_mcs_info));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,19 +199,19 @@ ieee80211_vht_announce(struct ieee80211com *ic)
|
||||||
|
|
||||||
/* Channel width */
|
/* Channel width */
|
||||||
ic_printf(ic, "[VHT] Channel Widths: 20MHz, 40MHz, 80MHz%s%s\n",
|
ic_printf(ic, "[VHT] Channel Widths: 20MHz, 40MHz, 80MHz%s%s\n",
|
||||||
(IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160MHZ(ic->ic_vhtcaps)) ?
|
(IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160MHZ(ic->ic_vht_cap.vht_cap_info)) ?
|
||||||
", 160MHz" : "",
|
", 160MHz" : "",
|
||||||
(IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160_80P80MHZ(ic->ic_vhtcaps)) ?
|
(IEEE80211_VHTCAP_SUPP_CHAN_WIDTH_IS_160_80P80MHZ(ic->ic_vht_cap.vht_cap_info)) ?
|
||||||
", 80+80MHz" : "");
|
", 80+80MHz" : "");
|
||||||
/* Features */
|
/* Features */
|
||||||
ic_printf(ic, "[VHT] Features: %b\n", ic->ic_vhtcaps,
|
ic_printf(ic, "[VHT] Features: %b\n", ic->ic_vht_cap.vht_cap_info,
|
||||||
IEEE80211_VHTCAP_BITS);
|
IEEE80211_VHTCAP_BITS);
|
||||||
|
|
||||||
/* For now, just 5GHz VHT. Worry about 2GHz VHT later */
|
/* For now, just 5GHz VHT. Worry about 2GHz VHT later */
|
||||||
for (i = 0; i < 8; i++) {
|
for (i = 0; i < 8; i++) {
|
||||||
/* Each stream is 2 bits */
|
/* Each stream is 2 bits */
|
||||||
tx = (ic->ic_vht_mcsinfo.tx_mcs_map >> (2*i)) & 0x3;
|
tx = (ic->ic_vht_cap.supp_mcs.tx_mcs_map >> (2*i)) & 0x3;
|
||||||
rx = (ic->ic_vht_mcsinfo.rx_mcs_map >> (2*i)) & 0x3;
|
rx = (ic->ic_vht_cap.supp_mcs.rx_mcs_map >> (2*i)) & 0x3;
|
||||||
if (tx == 3 && rx == 3)
|
if (tx == 3 && rx == 3)
|
||||||
continue;
|
continue;
|
||||||
ic_printf(ic, "[VHT] NSS %d: TX MCS 0..%d, RX MCS 0..%d\n",
|
ic_printf(ic, "[VHT] NSS %d: TX MCS 0..%d, RX MCS 0..%d\n",
|
||||||
|
|
Loading…
Reference in a new issue