enetc: ethtool: add wake-on-lan callbacks
authorMichael Walle <michael@walle.cc>
Thu, 7 Nov 2019 08:40:00 +0000 (09:40 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 7 Nov 2019 23:25:35 +0000 (15:25 -0800)
If there is an external PHY, pass the wake-on-lan request to the PHY.

Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/enetc/enetc_ethtool.c

index fcb52efec0753e35060d56109f0feeb3060a5749..880a8ed8bb4743dee4619daf1bd1da8b672a04c6 100644 (file)
@@ -584,6 +584,31 @@ static int enetc_get_ts_info(struct net_device *ndev,
        return 0;
 }
 
+static void enetc_get_wol(struct net_device *dev,
+                         struct ethtool_wolinfo *wol)
+{
+       wol->supported = 0;
+       wol->wolopts = 0;
+
+       if (dev->phydev)
+               phy_ethtool_get_wol(dev->phydev, wol);
+}
+
+static int enetc_set_wol(struct net_device *dev,
+                        struct ethtool_wolinfo *wol)
+{
+       int ret;
+
+       if (!dev->phydev)
+               return -EOPNOTSUPP;
+
+       ret = phy_ethtool_set_wol(dev->phydev, wol);
+       if (!ret)
+               device_set_wakeup_enable(&dev->dev, wol->wolopts);
+
+       return ret;
+}
+
 static const struct ethtool_ops enetc_pf_ethtool_ops = {
        .get_regs_len = enetc_get_reglen,
        .get_regs = enetc_get_regs,
@@ -601,6 +626,8 @@ static const struct ethtool_ops enetc_pf_ethtool_ops = {
        .set_link_ksettings = phy_ethtool_set_link_ksettings,
        .get_link = ethtool_op_get_link,
        .get_ts_info = enetc_get_ts_info,
+       .get_wol = enetc_get_wol,
+       .set_wol = enetc_set_wol,
 };
 
 static const struct ethtool_ops enetc_vf_ethtool_ops = {