3c59x: Add ethtool WOL support
authorAndrew O. Shadoura <andrew@beldisplaytech.com>
Sat, 24 Jul 2010 16:24:17 +0000 (16:24 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 25 Jul 2010 23:48:44 +0000 (16:48 -0700)
This patch adds wrappers for ethtool to get or set wake-on-LAN
setting without re-inserting the kernel module.

Signed-off-by: Andrew O. Shadoura <andrew@beldisplaytech.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/3c59x.c

index c44d599cc5efbdc5d85540ea8ace5e47a168be36..c754d88e5ec92d0af82d80094a4576256a50dc61 100644 (file)
@@ -2918,6 +2918,36 @@ static void vortex_get_drvinfo(struct net_device *dev,
        }
 }
 
+static void vortex_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
+{
+       struct vortex_private *vp = netdev_priv(dev);
+
+       spin_lock_irq(&vp->lock);
+       wol->supported = WAKE_MAGIC;
+
+       wol->wolopts = 0;
+       if (vp->enable_wol)
+               wol->wolopts |= WAKE_MAGIC;
+       spin_unlock_irq(&vp->lock);
+}
+
+static int vortex_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
+{
+       struct vortex_private *vp = netdev_priv(dev);
+       if (wol->wolopts & ~WAKE_MAGIC)
+               return -EINVAL;
+
+       spin_lock_irq(&vp->lock);
+       if (wol->wolopts & WAKE_MAGIC)
+               vp->enable_wol = 1;
+       else
+               vp->enable_wol = 0;
+       acpi_set_WOL(dev);
+       spin_unlock_irq(&vp->lock);
+
+       return 0;
+}
+
 static const struct ethtool_ops vortex_ethtool_ops = {
        .get_drvinfo            = vortex_get_drvinfo,
        .get_strings            = vortex_get_strings,
@@ -2929,6 +2959,8 @@ static const struct ethtool_ops vortex_ethtool_ops = {
        .set_settings           = vortex_set_settings,
        .get_link               = ethtool_op_get_link,
        .nway_reset             = vortex_nway_reset,
+       .get_wol                = vortex_get_wol,
+       .set_wol                = vortex_set_wol,
 };
 
 #ifdef CONFIG_PCI