Hi Werner,

This is a basic power management switch for ar6k, using the standard
SIWPOWER wireless extension.

Signed-off-by: Samuel Ortiz <[EMAIL PROTECTED]>
---
 drivers/sdio/function/wlan/ar6000/ar6000/wireless_ext.c |   33 ++++++++++++++--
 1 file changed, 30 insertions(+), 3 deletions(-)

Index: 
linux-2.6.24-rc8-omoko-svn/drivers/sdio/function/wlan/ar6000/ar6000/wireless_ext.c
===================================================================
--- 
linux-2.6.24-rc8-omoko-svn.orig/drivers/sdio/function/wlan/ar6000/ar6000/wireless_ext.c
     2008-01-31 21:05:23.000000000 +0100
+++ 
linux-2.6.24-rc8-omoko-svn/drivers/sdio/function/wlan/ar6000/ar6000/wireless_ext.c
  2008-01-31 21:32:49.000000000 +0100
@@ -890,7 +890,7 @@
               struct iw_request_info *info,
               struct iw_point *erq, char *key)
 {
-    AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
+    AR_SOFTC_T *ar = (AR_SOFTC_T *)netdev_priv(dev);
     A_UINT8 keyIndex;
     struct ar_wep_key *wk;
 
@@ -932,6 +932,33 @@
     return 0;
 }
 
+static int ar6000_ioctl_siwpower(struct net_device *dev,
+                                struct iw_request_info *info,
+                                union iwreq_data *wrqu, char *extra)
+{
+       AR_SOFTC_T *ar = (AR_SOFTC_T *)netdev_priv(dev);
+       WMI_POWER_MODE power_mode;
+
+       if (wrqu->power.disabled)
+               power_mode = MAX_PERF_POWER;
+       else
+               power_mode = REC_POWER;
+
+       if (wmi_powermode_cmd(ar->arWmi, power_mode) < 0)
+               return -EIO;
+
+       return 0;
+}
+
+static int ar6000_ioctl_giwpower(struct net_device *dev,
+                                struct iw_request_info *info,
+                                union iwreq_data *wrqu, char *extra)
+{
+       AR_SOFTC_T *ar = (AR_SOFTC_T *)netdev_priv(dev);
+
+       return wmi_get_power_mode_cmd(ar->arWmi);
+}
+
 static int ar6000_ioctl_siwgenie(struct net_device *dev,
                                 struct iw_request_info *info,
                                 struct iw_point *dwrq,
@@ -1841,8 +1868,8 @@
     (iw_handler) ar6000_ioctl_giwretry,         /* SIOCGIWRETRY */
     (iw_handler) ar6000_ioctl_siwencode,        /* SIOCSIWENCODE */
     (iw_handler) ar6000_ioctl_giwencode,        /* SIOCGIWENCODE */
-    (iw_handler) NULL,         /* SIOCSIWPOWER */
-    (iw_handler) NULL,         /* SIOCGIWPOWER */
+    (iw_handler) ar6000_ioctl_siwpower,         /* SIOCSIWPOWER */
+    (iw_handler) ar6000_ioctl_giwpower,         /* SIOCGIWPOWER */
     (iw_handler) NULL, /* -- hole -- */
     (iw_handler) NULL, /* -- hole -- */
     (iw_handler) ar6000_ioctl_siwgenie,        /* SIOCSIWGENIE */


Reply via email to