Re: [PATCH] net: silan: sc92031: use new api ethtool_{get|set}_link_ksettings

2017-03-06 Thread David Miller
From: Philippe Reynes 
Date: Mon, 27 Feb 2017 22:50:25 +0100

> The ethtool api {get|set}_settings is deprecated.
> We move this driver to new api {get|set}_link_ksettings.
> 
> As I don't have the hardware, I'd be very pleased if
> someone may test this patch.
> 
> Signed-off-by: Philippe Reynes 

Applied.


[PATCH] net: silan: sc92031: use new api ethtool_{get|set}_link_ksettings

2017-02-27 Thread Philippe Reynes
The ethtool api {get|set}_settings is deprecated.
We move this driver to new api {get|set}_link_ksettings.

As I don't have the hardware, I'd be very pleased if
someone may test this patch.

Signed-off-by: Philippe Reynes 
---
 drivers/net/ethernet/silan/sc92031.c |   83 +++---
 1 files changed, 47 insertions(+), 36 deletions(-)

diff --git a/drivers/net/ethernet/silan/sc92031.c 
b/drivers/net/ethernet/silan/sc92031.c
index 6c2e2b3..751c818 100644
--- a/drivers/net/ethernet/silan/sc92031.c
+++ b/drivers/net/ethernet/silan/sc92031.c
@@ -1122,14 +1122,16 @@ static void sc92031_poll_controller(struct net_device 
*dev)
 }
 #endif
 
-static int sc92031_ethtool_get_settings(struct net_device *dev,
-   struct ethtool_cmd *cmd)
+static int
+sc92031_ethtool_get_link_ksettings(struct net_device *dev,
+  struct ethtool_link_ksettings *cmd)
 {
struct sc92031_priv *priv = netdev_priv(dev);
void __iomem *port_base = priv->port_base;
u8 phy_address;
u32 phy_ctrl;
u16 output_status;
+   u32 supported, advertising;
 
spin_lock_bh(>lock);
 
@@ -1142,68 +1144,77 @@ static int sc92031_ethtool_get_settings(struct 
net_device *dev,
 
spin_unlock_bh(>lock);
 
-   cmd->supported = SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full
+   supported = SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full
| SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full
| SUPPORTED_Autoneg | SUPPORTED_TP | SUPPORTED_MII;
 
-   cmd->advertising = ADVERTISED_TP | ADVERTISED_MII;
+   advertising = ADVERTISED_TP | ADVERTISED_MII;
 
if ((phy_ctrl & (PhyCtrlDux | PhyCtrlSpd100 | PhyCtrlSpd10))
== (PhyCtrlDux | PhyCtrlSpd100 | PhyCtrlSpd10))
-   cmd->advertising |= ADVERTISED_Autoneg;
+   advertising |= ADVERTISED_Autoneg;
 
if ((phy_ctrl & PhyCtrlSpd10) == PhyCtrlSpd10)
-   cmd->advertising |= ADVERTISED_10baseT_Half;
+   advertising |= ADVERTISED_10baseT_Half;
 
if ((phy_ctrl & (PhyCtrlSpd10 | PhyCtrlDux))
== (PhyCtrlSpd10 | PhyCtrlDux))
-   cmd->advertising |= ADVERTISED_10baseT_Full;
+   advertising |= ADVERTISED_10baseT_Full;
 
if ((phy_ctrl & PhyCtrlSpd100) == PhyCtrlSpd100)
-   cmd->advertising |= ADVERTISED_100baseT_Half;
+   advertising |= ADVERTISED_100baseT_Half;
 
if ((phy_ctrl & (PhyCtrlSpd100 | PhyCtrlDux))
== (PhyCtrlSpd100 | PhyCtrlDux))
-   cmd->advertising |= ADVERTISED_100baseT_Full;
+   advertising |= ADVERTISED_100baseT_Full;
 
if (phy_ctrl & PhyCtrlAne)
-   cmd->advertising |= ADVERTISED_Autoneg;
+   advertising |= ADVERTISED_Autoneg;
 
-   ethtool_cmd_speed_set(cmd,
- (output_status & 0x2) ? SPEED_100 : SPEED_10);
-   cmd->duplex = (output_status & 0x4) ? DUPLEX_FULL : DUPLEX_HALF;
-   cmd->port = PORT_MII;
-   cmd->phy_address = phy_address;
-   cmd->transceiver = XCVR_INTERNAL;
-   cmd->autoneg = (phy_ctrl & PhyCtrlAne) ? AUTONEG_ENABLE : 
AUTONEG_DISABLE;
+   cmd->base.speed = (output_status & 0x2) ? SPEED_100 : SPEED_10;
+   cmd->base.duplex = (output_status & 0x4) ? DUPLEX_FULL : DUPLEX_HALF;
+   cmd->base.port = PORT_MII;
+   cmd->base.phy_address = phy_address;
+   cmd->base.autoneg = (phy_ctrl & PhyCtrlAne) ?
+   AUTONEG_ENABLE : AUTONEG_DISABLE;
+
+   ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
+   supported);
+   ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
+   advertising);
 
return 0;
 }
 
-static int sc92031_ethtool_set_settings(struct net_device *dev,
-   struct ethtool_cmd *cmd)
+static int
+sc92031_ethtool_set_link_ksettings(struct net_device *dev,
+  const struct ethtool_link_ksettings *cmd)
 {
struct sc92031_priv *priv = netdev_priv(dev);
void __iomem *port_base = priv->port_base;
-   u32 speed = ethtool_cmd_speed(cmd);
+   u32 speed = cmd->base.speed;
u32 phy_ctrl;
u32 old_phy_ctrl;
+   u32 advertising;
+
+   ethtool_convert_link_mode_to_legacy_u32(,
+   cmd->link_modes.advertising);
 
if (!(speed == SPEED_10 || speed == SPEED_100))
return -EINVAL;
-   if (!(cmd->duplex == DUPLEX_HALF || cmd->duplex == DUPLEX_FULL))
-   return -EINVAL;
-   if (!(cmd->port == PORT_MII))
+   if (!(cmd->base.duplex == DUPLEX_HALF ||
+ cmd->base.duplex == DUPLEX_FULL))
return -EINVAL;
-   if (!(cmd->phy_address == 0x1f))
+   if