summaryrefslogtreecommitdiffstats
path: root/sys/net80211
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2016-04-26 01:29:26 +0000
committeradrian <adrian@FreeBSD.org>2016-04-26 01:29:26 +0000
commita99e12d2911355a8bb07bc823b9ec7b605e9b6c3 (patch)
treef4f2c8578fdb4531a53caa213658340bd0482a03 /sys/net80211
parent16ee478f132580fc8f1a7df88d421bad73acb3b8 (diff)
downloadFreeBSD-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.c32
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;
OpenPOWER on IntegriCloud