diff options
author | sam <sam@FreeBSD.org> | 2008-09-21 23:59:14 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2008-09-21 23:59:14 +0000 |
commit | 7b36216c91f1e4ec39b40c68ee415df5c327919c (patch) | |
tree | 7bd20b90da680e15e9b19b05542ecd4a6abe71ad /sys/net80211/ieee80211_ioctl.c | |
parent | b823d18ca491ab2a0d4996a20a7368650e7d7715 (diff) | |
download | FreeBSD-src-7b36216c91f1e4ec39b40c68ee415df5c327919c.zip FreeBSD-src-7b36216c91f1e4ec39b40c68ee415df5c327919c.tar.gz |
MIMO power save support; still needs callbacks for notifying drivers
of dynamic state change in station mode.
Diffstat (limited to 'sys/net80211/ieee80211_ioctl.c')
-rw-r--r-- | sys/net80211/ieee80211_ioctl.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_ioctl.c b/sys/net80211/ieee80211_ioctl.c index 3d2697c..8bfcdb8 100644 --- a/sys/net80211/ieee80211_ioctl.c +++ b/sys/net80211/ieee80211_ioctl.c @@ -1068,6 +1068,18 @@ ieee80211_ioctl_get80211(struct ieee80211vap *vap, u_long cmd, case IEEE80211_IOC_STA_VLAN: error = ieee80211_ioctl_getstavlan(vap, ireq); break; + case IEEE80211_IOC_SMPS: + if (vap->iv_opmode == IEEE80211_M_STA && + vap->iv_state == IEEE80211_S_RUN) { + if (vap->iv_bss->ni_flags & IEEE80211_NODE_MIMO_RTS) + ireq->i_val = IEEE80211_HTCAP_SMPS_DYNAMIC; + else if (vap->iv_bss->ni_flags & IEEE80211_NODE_MIMO_PS) + ireq->i_val = IEEE80211_HTCAP_SMPS_ENA; + else + ireq->i_val = IEEE80211_HTCAP_SMPS_OFF; + } else + ireq->i_val = vap->iv_htcaps & IEEE80211_HTCAP_SMPS; + break; default: error = EINVAL; break; @@ -3068,6 +3080,19 @@ ieee80211_ioctl_set80211(struct ieee80211vap *vap, u_long cmd, struct ieee80211r case IEEE80211_IOC_STA_VLAN: error = ieee80211_ioctl_setstavlan(vap, ireq); break; + case IEEE80211_IOC_SMPS: + if ((ireq->i_val &~ IEEE80211_HTCAP_SMPS) != 0 || + ireq->i_val == 0x0008) /* value of 2 is reserved */ + return EINVAL; + if (ireq->i_val != IEEE80211_HTCAP_SMPS_OFF && + (vap->iv_htcaps & IEEE80211_HTC_SMPS) == 0) + return EOPNOTSUPP; + vap->iv_htcaps = (vap->iv_htcaps &~ IEEE80211_HTCAP_SMPS) | + ireq->i_val; + /* NB: if not operating in 11n this can wait */ + if (isvapht(vap)) + error = ERESTART; + break; default: error = EINVAL; break; |