e1000e: check WoL mode is among set of supported modes
authorBruce Allan <bruce.w.allan@intel.com>
Fri, 20 Nov 2009 23:22:01 +0000 (23:22 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 21 Nov 2009 19:33:42 +0000 (11:33 -0800)
When setting WoL feature, check the supplied modes are all supported rather
than checking for no support.  This way, if any new modes are added the
driver does not default to not complaining about it if we don't really
support it.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/e1000e/ethtool.c

index c430dc8b70a33236972885c30ba92e7e5b947e71..3af5ee4a4cc80964b69dccda38cb3e61dbf9aee6 100644 (file)
@@ -1777,12 +1777,11 @@ static int e1000_set_wol(struct net_device *netdev,
 {
        struct e1000_adapter *adapter = netdev_priv(netdev);
 
-       if (wol->wolopts & WAKE_MAGICSECURE)
-               return -EOPNOTSUPP;
-
        if (!(adapter->flags & FLAG_HAS_WOL) ||
-           !device_can_wakeup(&adapter->pdev->dev))
-               return wol->wolopts ? -EOPNOTSUPP : 0;
+           !device_can_wakeup(&adapter->pdev->dev) ||
+           (wol->wolopts & ~(WAKE_UCAST | WAKE_MCAST | WAKE_BCAST |
+                             WAKE_MAGIC | WAKE_PHY | WAKE_ARP)))
+               return -EOPNOTSUPP;
 
        /* these settings will always override what we currently have */
        adapter->wol = 0;