ath79: ag71xx: update ethtool support
ethtool doesn't work currently as phy_ethtool_ioctl expects user space
pointer, but it's being passed kernel one. Fixing it doesn't make sense
as {s,g}et_settings were deprecated anyway.  So let's rather remove
phy_ethtool_ioctl and use new {s,g}et_link_ksettings instead. While at
it, update nway_reset as well.
Cc: John Crispin <john@phrozen.org>
Ref: https://bugs.openwrt.org/index.php?do=details&task_id=1982
Signed-off-by: Petr Štetiar <ynezz@true.cz>
			
			
This commit is contained in:
		| @@ -13,30 +13,6 @@ | |||||||
|  |  | ||||||
| #include "ag71xx.h" | #include "ag71xx.h" | ||||||
|  |  | ||||||
| static int ag71xx_ethtool_get_settings(struct net_device *dev, |  | ||||||
| 				       struct ethtool_cmd *cmd) |  | ||||||
| { |  | ||||||
| 	struct ag71xx *ag = netdev_priv(dev); |  | ||||||
| 	struct phy_device *phydev = ag->phy_dev; |  | ||||||
|  |  | ||||||
| 	if (!phydev) |  | ||||||
| 		return -ENODEV; |  | ||||||
|  |  | ||||||
| 	return phy_ethtool_ioctl(phydev, cmd); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static int ag71xx_ethtool_set_settings(struct net_device *dev, |  | ||||||
| 				       struct ethtool_cmd *cmd) |  | ||||||
| { |  | ||||||
| 	struct ag71xx *ag = netdev_priv(dev); |  | ||||||
| 	struct phy_device *phydev = ag->phy_dev; |  | ||||||
|  |  | ||||||
| 	if (!phydev) |  | ||||||
| 		return -ENODEV; |  | ||||||
|  |  | ||||||
| 	return phy_ethtool_ioctl(phydev, cmd); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static u32 ag71xx_ethtool_get_msglevel(struct net_device *dev) | static u32 ag71xx_ethtool_get_msglevel(struct net_device *dev) | ||||||
| { | { | ||||||
| 	struct ag71xx *ag = netdev_priv(dev); | 	struct ag71xx *ag = netdev_priv(dev); | ||||||
| @@ -108,13 +84,25 @@ static int ag71xx_ethtool_set_ringparam(struct net_device *dev, | |||||||
| 	return err; | 	return err; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static int ag71xx_ethtool_nway_reset(struct net_device *dev) | ||||||
|  | { | ||||||
|  | 	struct ag71xx *ag = netdev_priv(dev); | ||||||
|  | 	struct phy_device *phydev = ag->phy_dev; | ||||||
|  |  | ||||||
|  | 	if (!phydev) | ||||||
|  | 		return -ENODEV; | ||||||
|  |  | ||||||
|  | 	return genphy_restart_aneg(phydev); | ||||||
|  | } | ||||||
|  |  | ||||||
| struct ethtool_ops ag71xx_ethtool_ops = { | struct ethtool_ops ag71xx_ethtool_ops = { | ||||||
| 	.set_settings	= ag71xx_ethtool_set_settings, |  | ||||||
| 	.get_settings	= ag71xx_ethtool_get_settings, |  | ||||||
| 	.get_msglevel	= ag71xx_ethtool_get_msglevel, | 	.get_msglevel	= ag71xx_ethtool_get_msglevel, | ||||||
| 	.set_msglevel	= ag71xx_ethtool_set_msglevel, | 	.set_msglevel	= ag71xx_ethtool_set_msglevel, | ||||||
| 	.get_ringparam	= ag71xx_ethtool_get_ringparam, | 	.get_ringparam	= ag71xx_ethtool_get_ringparam, | ||||||
| 	.set_ringparam	= ag71xx_ethtool_set_ringparam, | 	.set_ringparam	= ag71xx_ethtool_set_ringparam, | ||||||
|  | 	.get_link_ksettings = phy_ethtool_get_link_ksettings, | ||||||
|  | 	.set_link_ksettings = phy_ethtool_set_link_ksettings, | ||||||
| 	.get_link	= ethtool_op_get_link, | 	.get_link	= ethtool_op_get_link, | ||||||
| 	.get_ts_info	= ethtool_op_get_ts_info, | 	.get_ts_info	= ethtool_op_get_ts_info, | ||||||
|  | 	.nway_reset	= ag71xx_ethtool_nway_reset, | ||||||
| }; | }; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Petr Štetiar
					Petr Štetiar