|
@@ -1009,6 +1009,45 @@ static int ieee80211_ioctl_giwencode(struct net_device *dev,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int ieee80211_ioctl_siwpower(struct net_device *dev,
|
|
|
+ struct iw_request_info *info,
|
|
|
+ struct iw_param *wrq,
|
|
|
+ char *extra)
|
|
|
+{
|
|
|
+ struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
|
|
|
+ struct ieee80211_conf *conf = &local->hw.conf;
|
|
|
+
|
|
|
+ if (wrq->disabled) {
|
|
|
+ conf->flags &= ~IEEE80211_CONF_PS;
|
|
|
+ return ieee80211_hw_config(local);
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (wrq->flags & IW_POWER_MODE) {
|
|
|
+ case IW_POWER_ON: /* If not specified */
|
|
|
+ case IW_POWER_MODE: /* If set all mask */
|
|
|
+ case IW_POWER_ALL_R: /* If explicitely state all */
|
|
|
+ conf->flags |= IEEE80211_CONF_PS;
|
|
|
+ break;
|
|
|
+ default: /* Otherwise we don't support it */
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ return ieee80211_hw_config(local);
|
|
|
+}
|
|
|
+
|
|
|
+static int ieee80211_ioctl_giwpower(struct net_device *dev,
|
|
|
+ struct iw_request_info *info,
|
|
|
+ union iwreq_data *wrqu,
|
|
|
+ char *extra)
|
|
|
+{
|
|
|
+ struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
|
|
|
+ struct ieee80211_conf *conf = &local->hw.conf;
|
|
|
+
|
|
|
+ wrqu->power.disabled = !(conf->flags & IEEE80211_CONF_PS);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int ieee80211_ioctl_siwauth(struct net_device *dev,
|
|
|
struct iw_request_info *info,
|
|
|
struct iw_param *data, char *extra)
|
|
@@ -1211,8 +1250,8 @@ static const iw_handler ieee80211_handler[] =
|
|
|
(iw_handler) ieee80211_ioctl_giwretry, /* SIOCGIWRETRY */
|
|
|
(iw_handler) ieee80211_ioctl_siwencode, /* SIOCSIWENCODE */
|
|
|
(iw_handler) ieee80211_ioctl_giwencode, /* SIOCGIWENCODE */
|
|
|
- (iw_handler) NULL, /* SIOCSIWPOWER */
|
|
|
- (iw_handler) NULL, /* SIOCGIWPOWER */
|
|
|
+ (iw_handler) ieee80211_ioctl_siwpower, /* SIOCSIWPOWER */
|
|
|
+ (iw_handler) ieee80211_ioctl_giwpower, /* SIOCGIWPOWER */
|
|
|
(iw_handler) NULL, /* -- hole -- */
|
|
|
(iw_handler) NULL, /* -- hole -- */
|
|
|
(iw_handler) ieee80211_ioctl_siwgenie, /* SIOCSIWGENIE */
|