diff options
author | adrian <adrian@FreeBSD.org> | 2016-04-26 01:29:26 +0000 |
---|---|---|
committer | adrian <adrian@FreeBSD.org> | 2016-04-26 01:29:26 +0000 |
commit | a99e12d2911355a8bb07bc823b9ec7b605e9b6c3 (patch) | |
tree | f4f2c8578fdb4531a53caa213658340bd0482a03 /sys/net80211 | |
parent | 16ee478f132580fc8f1a7df88d421bad73acb3b8 (diff) | |
download | FreeBSD-src-a99e12d2911355a8bb07bc823b9ec7b605e9b6c3.zip FreeBSD-src-a99e12d2911355a8bb07bc823b9ec7b605e9b6c3.tar.gz |
[net80211] add the STBC ioctl support.
This adds configurable STBC TX and RX support.
Diffstat (limited to 'sys/net80211')
-rw-r--r-- | sys/net80211/ieee80211_ioctl.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_ioctl.c b/sys/net80211/ieee80211_ioctl.c index 60898bd..c3b02e8 100644 --- a/sys/net80211/ieee80211_ioctl.c +++ b/sys/net80211/ieee80211_ioctl.c @@ -1128,6 +1128,13 @@ ieee80211_ioctl_get80211(struct ieee80211vap *vap, u_long cmd, ireq->i_val = (vap->iv_flags_ht & IEEE80211_FHT_RIFS) != 0; break; + case IEEE80211_IOC_STBC: + ireq->i_val = 0; + if (vap->iv_flags_ht & IEEE80211_FHT_STBC_TX) + ireq->i_val |= 1; + if (vap->iv_flags_ht & IEEE80211_FHT_STBC_RX) + ireq->i_val |= 2; + break; default: error = ieee80211_ioctl_getdefault(vap, ireq); break; @@ -3265,6 +3272,31 @@ ieee80211_ioctl_set80211(struct ieee80211vap *vap, u_long cmd, struct ieee80211r if (isvapht(vap)) error = ERESTART; break; + case IEEE80211_IOC_STBC: + /* Check if we can do STBC TX/RX before changing the setting */ + if ((ireq->i_val & 1) && + ((vap->iv_htcaps & IEEE80211_HTCAP_TXSTBC) == 0)) + return EOPNOTSUPP; + if ((ireq->i_val & 2) && + ((vap->iv_htcaps & IEEE80211_HTCAP_RXSTBC) == 0)) + return EOPNOTSUPP; + + /* TX */ + if (ireq->i_val & 1) + vap->iv_flags_ht |= IEEE80211_FHT_STBC_TX; + else + vap->iv_flags_ht &= ~IEEE80211_FHT_STBC_TX; + + /* RX */ + if (ireq->i_val & 2) + vap->iv_flags_ht |= IEEE80211_FHT_STBC_RX; + else + vap->iv_flags_ht &= ~IEEE80211_FHT_STBC_RX; + + /* NB: reset only if we're operating on an 11n channel */ + if (isvapht(vap)) + error = ERESTART; + break; default: error = ieee80211_ioctl_setdefault(vap, ireq); break; |