net: mv643xx_eth: use new api ethtool_{get|set}_link_ksettings
authorPhilippe Reynes <tremyfr@gmail.com>
Sun, 2 Oct 2016 10:06:49 +0000 (12:06 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 12 Oct 2016 05:40:25 +0000 (01:40 -0400)
The ethtool api {get|set}_settings is deprecated.
We move this driver to new api {get|set}_link_ksettings.

Signed-off-by: Philippe Reynes <tremyfr@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/mv643xx_eth.c

index ae7370daf6fa3066f3de1ea61ad51e6f4ab3b32b..18e6bb6e386728ae5ae52019555a623f7facd8a3 100644 (file)
@@ -1495,56 +1495,69 @@ static const struct mv643xx_eth_stats mv643xx_eth_stats[] = {
 };
 
 static int
-mv643xx_eth_get_settings_phy(struct mv643xx_eth_private *mp,
-                            struct ethtool_cmd *cmd)
+mv643xx_eth_get_link_ksettings_phy(struct mv643xx_eth_private *mp,
+                                  struct ethtool_link_ksettings *cmd)
 {
        struct net_device *dev = mp->dev;
        int err;
+       u32 supported, advertising;
 
        err = phy_read_status(dev->phydev);
        if (err == 0)
-               err = phy_ethtool_gset(dev->phydev, cmd);
+               err = phy_ethtool_ksettings_get(dev->phydev, cmd);
 
        /*
         * The MAC does not support 1000baseT_Half.
         */
-       cmd->supported &= ~SUPPORTED_1000baseT_Half;
-       cmd->advertising &= ~ADVERTISED_1000baseT_Half;
+       ethtool_convert_link_mode_to_legacy_u32(&supported,
+                                               cmd->link_modes.supported);
+       ethtool_convert_link_mode_to_legacy_u32(&advertising,
+                                               cmd->link_modes.advertising);
+       supported &= ~SUPPORTED_1000baseT_Half;
+       advertising &= ~ADVERTISED_1000baseT_Half;
+       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 err;
 }
 
 static int
-mv643xx_eth_get_settings_phyless(struct mv643xx_eth_private *mp,
-                                struct ethtool_cmd *cmd)
+mv643xx_eth_get_link_ksettings_phyless(struct mv643xx_eth_private *mp,
+                                      struct ethtool_link_ksettings *cmd)
 {
        u32 port_status;
+       u32 supported, advertising;
 
        port_status = rdlp(mp, PORT_STATUS);
 
-       cmd->supported = SUPPORTED_MII;
-       cmd->advertising = ADVERTISED_MII;
+       supported = SUPPORTED_MII;
+       advertising = ADVERTISED_MII;
        switch (port_status & PORT_SPEED_MASK) {
        case PORT_SPEED_10:
-               ethtool_cmd_speed_set(cmd, SPEED_10);
+               cmd->base.speed = SPEED_10;
                break;
        case PORT_SPEED_100:
-               ethtool_cmd_speed_set(cmd, SPEED_100);
+               cmd->base.speed = SPEED_100;
                break;
        case PORT_SPEED_1000:
-               ethtool_cmd_speed_set(cmd, SPEED_1000);
+               cmd->base.speed = SPEED_1000;
                break;
        default:
-               cmd->speed = -1;
+               cmd->base.speed = -1;
                break;
        }
-       cmd->duplex = (port_status & FULL_DUPLEX) ? DUPLEX_FULL : DUPLEX_HALF;
-       cmd->port = PORT_MII;
-       cmd->phy_address = 0;
-       cmd->transceiver = XCVR_INTERNAL;
-       cmd->autoneg = AUTONEG_DISABLE;
-       cmd->maxtxpkt = 1;
-       cmd->maxrxpkt = 1;
+       cmd->base.duplex = (port_status & FULL_DUPLEX) ?
+               DUPLEX_FULL : DUPLEX_HALF;
+       cmd->base.port = PORT_MII;
+       cmd->base.phy_address = 0;
+       cmd->base.autoneg = 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;
 }
@@ -1576,19 +1589,23 @@ mv643xx_eth_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
 }
 
 static int
-mv643xx_eth_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+mv643xx_eth_get_link_ksettings(struct net_device *dev,
+                              struct ethtool_link_ksettings *cmd)
 {
        struct mv643xx_eth_private *mp = netdev_priv(dev);
 
        if (dev->phydev)
-               return mv643xx_eth_get_settings_phy(mp, cmd);
+               return mv643xx_eth_get_link_ksettings_phy(mp, cmd);
        else
-               return mv643xx_eth_get_settings_phyless(mp, cmd);
+               return mv643xx_eth_get_link_ksettings_phyless(mp, cmd);
 }
 
 static int
-mv643xx_eth_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+mv643xx_eth_set_link_ksettings(struct net_device *dev,
+                              const struct ethtool_link_ksettings *cmd)
 {
+       struct ethtool_link_ksettings c = *cmd;
+       u32 advertising;
        int ret;
 
        if (!dev->phydev)
@@ -1597,9 +1614,13 @@ mv643xx_eth_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
        /*
         * The MAC does not support 1000baseT_Half.
         */
-       cmd->advertising &= ~ADVERTISED_1000baseT_Half;
+       ethtool_convert_link_mode_to_legacy_u32(&advertising,
+                                               c.link_modes.advertising);
+       advertising &= ~ADVERTISED_1000baseT_Half;
+       ethtool_convert_legacy_u32_to_link_mode(c.link_modes.advertising,
+                                               advertising);
 
-       ret = phy_ethtool_sset(dev->phydev, cmd);
+       ret = phy_ethtool_ksettings_set(dev->phydev, &c);
        if (!ret)
                mv643xx_eth_adjust_link(dev);
        return ret;
@@ -1746,8 +1767,6 @@ static int mv643xx_eth_get_sset_count(struct net_device *dev, int sset)
 }
 
 static const struct ethtool_ops mv643xx_eth_ethtool_ops = {
-       .get_settings           = mv643xx_eth_get_settings,
-       .set_settings           = mv643xx_eth_set_settings,
        .get_drvinfo            = mv643xx_eth_get_drvinfo,
        .nway_reset             = mv643xx_eth_nway_reset,
        .get_link               = ethtool_op_get_link,
@@ -1761,6 +1780,8 @@ static const struct ethtool_ops mv643xx_eth_ethtool_ops = {
        .get_ts_info            = ethtool_op_get_ts_info,
        .get_wol                = mv643xx_eth_get_wol,
        .set_wol                = mv643xx_eth_set_wol,
+       .get_link_ksettings     = mv643xx_eth_get_link_ksettings,
+       .set_link_ksettings     = mv643xx_eth_set_link_ksettings,
 };
 
 
@@ -2328,11 +2349,12 @@ static void port_start(struct mv643xx_eth_private *mp)
         * Perform PHY reset, if there is a PHY.
         */
        if (dev->phydev) {
-               struct ethtool_cmd cmd;
+               struct ethtool_link_ksettings cmd;
 
-               mv643xx_eth_get_settings(dev, &cmd);
+               mv643xx_eth_get_link_ksettings(dev, &cmd);
                phy_init_hw(dev->phydev);
-               mv643xx_eth_set_settings(dev, &cmd);
+               mv643xx_eth_set_link_ksettings(
+                       dev, (const struct ethtool_link_ksettings *)&cmd);
                phy_start(dev->phydev);
        }