Currently, most drivers only support get and set PHY settings by PHY ethtool API. For those drivers, it's better to supply common functions for get_settings and set_settings. This patch adds common functions implementation. Reviewed-by: Jiancheng Xue <xuejiancheng@xxxxxxxxxxxxx> Signed-off-by: Dongpo Li <lidongpo@xxxxxxxxxxxxx> --- include/linux/ethtool.h | 2 ++ net/core/ethtool.c | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 9ded8c6..e114db9 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h @@ -82,6 +82,8 @@ struct net_device; /* Some generic methods drivers may use in their ethtool_ops */ u32 ethtool_op_get_link(struct net_device *dev); int ethtool_op_get_ts_info(struct net_device *dev, struct ethtool_ts_info *eti); +int ethtool_op_get_settings(struct net_device *dev, struct ethtool_cmd *cmd); +int ethtool_op_set_settings(struct net_device *dev, struct ethtool_cmd *cmd); /** * ethtool_rxfh_indir_default - get default value for RX flow hash indirection diff --git a/net/core/ethtool.c b/net/core/ethtool.c index f403481..270b6d1 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c @@ -50,6 +50,27 @@ int ethtool_op_get_ts_info(struct net_device *dev, struct ethtool_ts_info *info) } EXPORT_SYMBOL(ethtool_op_get_ts_info); +int ethtool_op_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) +{ + if (!dev->phydev) + return -ENODEV; + + return phy_ethtool_gset(dev->phydev, cmd); +} +EXPORT_SYMBOL(ethtool_op_get_settings); + +int ethtool_op_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) +{ + if (!capable(CAP_NET_ADMIN)) + return -EPERM; + + if (!dev->phydev) + return -ENODEV; + + return phy_ethtool_sset(dev->phydev, cmd); +} +EXPORT_SYMBOL(ethtool_op_set_settings); + /* Handlers for each ethtool command */ #define ETHTOOL_DEV_FEATURE_WORDS ((NETDEV_FEATURE_COUNT + 31) / 32) -- 2.8.2 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html