libertas: allow for PS mode to be disabled when firmware doesn't support it
authorDavid Woodhouse <dwmw2@infradead.org>
Mon, 17 Dec 2007 19:41:13 +0000 (14:41 -0500)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Jan 2008 23:07:42 +0000 (15:07 -0800)
Otherwise, we go into an endless busy loop trying to enable PS mode when
the command queue is empty, dealing with the error response, and then
trying to enable PS mode again because the command queue is empty.... it
doesn't really save much power.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/libertas/dev.h
drivers/net/wireless/libertas/host.h
drivers/net/wireless/libertas/wext.c

index fe5045757356af1b2ba4f3287ab4dfe0c5fadab9..1c6ec4d619888b2aa425fadd504b9e1e76772312 100644 (file)
@@ -260,6 +260,7 @@ struct lbs_private {
        u16 psmode;             /* Wlan802_11PowermodeCAM=disable
                                   Wlan802_11PowermodeMAX_PSP=enable */
        u32 psstate;
+       char ps_supported;
        u8 needtowakeup;
 
        struct PS_CMD_ConfirmSleep lbs_ps_confirm_sleep;
index 4c03e12fd6a3415318ad160bea0aad2d0ce55bba..1aa04076b1ac72379d14fb46567a174800bed9bc 100644 (file)
 #define        CMD_TYPE_MAX_PSP                0x0001
 #define CMD_TYPE_FAST_PSP              0x0002
 
+/* Options for CMD_802_11_FW_WAKE_METHOD */
+#define CMD_WAKE_METHOD_UNCHANGED      0x0000
+#define CMD_WAKE_METHOD_COMMAND_INT    0x0001
+#define CMD_WAKE_METHOD_GPIO           0x0002
+
 /* Define action or option for CMD_BT_ACCESS */
 enum cmd_bt_access_opts {
        /* The bt commands start at 5 instead of 1 because the old dft commands
index b1e24723f2f9f9b83fbed281d04ec82f75d8a099..3e8d555ba3a97bc0d2de00f4ef47a5c6dafda124 100644 (file)
@@ -734,6 +734,13 @@ static int lbs_set_power(struct net_device *dev, struct iw_request_info *info,
 
        lbs_deb_enter(LBS_DEB_WEXT);
 
+       if (!priv->ps_supported) {
+               if (vwrq->disabled)
+                       return 0;
+               else
+                       return -EINVAL;
+       }
+
        /* PS is currently supported only in Infrastructure mode
         * Remove this check if it is to be supported in IBSS mode also
         */