diff options
author | Russell King <rmk+kernel@armlinux.org.uk> | 2017-03-10 11:53:11 +0000 |
---|---|---|
committer | Russell King <rmk+kernel@armlinux.org.uk> | 2017-05-05 18:42:38 +0100 |
commit | 66d63b73494db6b0f948d8925b8bbd200e085432 (patch) | |
tree | 7f21586d9ab4822b15b1335c6bd83025a1a94ca4 | |
parent | c32cd1c82725b2acf73669d88a5e6045d0eb267b (diff) |
phylink: add wake-on-lan support
Add wake-on-lan support to phylink.
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
-rw-r--r-- | drivers/net/phy/phylink.c | 25 | ||||
-rw-r--r-- | include/linux/phylink.h | 3 |
2 files changed, 28 insertions, 0 deletions
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index fae39e919459..3ae907f16a93 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -613,6 +613,31 @@ void phylink_stop(struct phylink *pl) } EXPORT_SYMBOL_GPL(phylink_stop); +void phylink_ethtool_get_wol(struct phylink *pl, struct ethtool_wolinfo *wol) +{ + wol->supported = 0; + wol->wolopts = 0; + + mutex_lock(&pl->config_mutex); + if (pl->phydev) + phy_ethtool_get_wol(pl->phydev, wol); + mutex_unlock(&pl->config_mutex); +} +EXPORT_SYMBOL_GPL(phylink_ethtool_get_wol); + +int phylink_ethtool_set_wol(struct phylink *pl, struct ethtool_wolinfo *wol) +{ + int ret = -EOPNOTSUPP; + + mutex_lock(&pl->config_mutex); + if (pl->phydev) + ret = phy_ethtool_set_wol(pl->phydev, wol); + mutex_unlock(&pl->config_mutex); + + return ret; +} +EXPORT_SYMBOL_GPL(phylink_ethtool_set_wol); + static void phylink_merge_link_mode(unsigned long *dst, const unsigned long *b) { __ETHTOOL_DECLARE_LINK_MODE_MASK(mask); diff --git a/include/linux/phylink.h b/include/linux/phylink.h index 1fa3ad72f01a..f9f7725b91c2 100644 --- a/include/linux/phylink.h +++ b/include/linux/phylink.h @@ -119,6 +119,9 @@ void phylink_mac_change(struct phylink *, bool up); void phylink_start(struct phylink *); void phylink_stop(struct phylink *); +void phylink_ethtool_get_wol(struct phylink *, struct ethtool_wolinfo *); +int phylink_ethtool_set_wol(struct phylink *, struct ethtool_wolinfo *); + int phylink_ethtool_ksettings_get(struct phylink *, struct ethtool_link_ksettings *); int phylink_ethtool_ksettings_set(struct phylink *, |