Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1685e785 authored by Philippe Reynes's avatar Philippe Reynes Committed by David S. Miller
Browse files

net: stmmac: use new api ethtool_{get|set}_link_ksettings



The ethtool api {get|set}_settings is deprecated.
We move this driver to new api {get|set}_link_ksettings.

Signed-off-by: default avatarPhilippe Reynes <tremyfr@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d6d50c7e
Loading
Loading
Loading
Loading
+56 −41
Original line number Original line Diff line number Diff line
@@ -269,8 +269,8 @@ static void stmmac_ethtool_getdrvinfo(struct net_device *dev,
	strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
	strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
}
}


static int stmmac_ethtool_getsettings(struct net_device *dev,
static int stmmac_ethtool_get_link_ksettings(struct net_device *dev,
				      struct ethtool_cmd *cmd)
					     struct ethtool_link_ksettings *cmd)
{
{
	struct stmmac_priv *priv = netdev_priv(dev);
	struct stmmac_priv *priv = netdev_priv(dev);
	struct phy_device *phy = dev->phydev;
	struct phy_device *phy = dev->phydev;
@@ -279,15 +279,16 @@ static int stmmac_ethtool_getsettings(struct net_device *dev,
	if (priv->hw->pcs & STMMAC_PCS_RGMII ||
	if (priv->hw->pcs & STMMAC_PCS_RGMII ||
	    priv->hw->pcs & STMMAC_PCS_SGMII) {
	    priv->hw->pcs & STMMAC_PCS_SGMII) {
		struct rgmii_adv adv;
		struct rgmii_adv adv;
		u32 supported, advertising, lp_advertising;


		if (!priv->xstats.pcs_link) {
		if (!priv->xstats.pcs_link) {
			ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN);
			cmd->base.speed = SPEED_UNKNOWN;
			cmd->duplex = DUPLEX_UNKNOWN;
			cmd->base.duplex = DUPLEX_UNKNOWN;
			return 0;
			return 0;
		}
		}
		cmd->duplex = priv->xstats.pcs_duplex;
		cmd->base.duplex = priv->xstats.pcs_duplex;


		ethtool_cmd_speed_set(cmd, priv->xstats.pcs_speed);
		cmd->base.speed = priv->xstats.pcs_speed;


		/* Get and convert ADV/LP_ADV from the HW AN registers */
		/* Get and convert ADV/LP_ADV from the HW AN registers */
		if (!priv->hw->mac->pcs_get_adv_lp)
		if (!priv->hw->mac->pcs_get_adv_lp)
@@ -297,45 +298,59 @@ static int stmmac_ethtool_getsettings(struct net_device *dev,


		/* Encoding of PSE bits is defined in 802.3z, 37.2.1.4 */
		/* Encoding of PSE bits is defined in 802.3z, 37.2.1.4 */


		ethtool_convert_link_mode_to_legacy_u32(
			&supported, cmd->link_modes.supported);
		ethtool_convert_link_mode_to_legacy_u32(
			&advertising, cmd->link_modes.advertising);
		ethtool_convert_link_mode_to_legacy_u32(
			&lp_advertising, cmd->link_modes.lp_advertising);

		if (adv.pause & STMMAC_PCS_PAUSE)
		if (adv.pause & STMMAC_PCS_PAUSE)
			cmd->advertising |= ADVERTISED_Pause;
			advertising |= ADVERTISED_Pause;
		if (adv.pause & STMMAC_PCS_ASYM_PAUSE)
		if (adv.pause & STMMAC_PCS_ASYM_PAUSE)
			cmd->advertising |= ADVERTISED_Asym_Pause;
			advertising |= ADVERTISED_Asym_Pause;
		if (adv.lp_pause & STMMAC_PCS_PAUSE)
		if (adv.lp_pause & STMMAC_PCS_PAUSE)
			cmd->lp_advertising |= ADVERTISED_Pause;
			lp_advertising |= ADVERTISED_Pause;
		if (adv.lp_pause & STMMAC_PCS_ASYM_PAUSE)
		if (adv.lp_pause & STMMAC_PCS_ASYM_PAUSE)
			cmd->lp_advertising |= ADVERTISED_Asym_Pause;
			lp_advertising |= ADVERTISED_Asym_Pause;


		/* Reg49[3] always set because ANE is always supported */
		/* Reg49[3] always set because ANE is always supported */
		cmd->autoneg = ADVERTISED_Autoneg;
		cmd->base.autoneg = ADVERTISED_Autoneg;
		cmd->supported |= SUPPORTED_Autoneg;
		supported |= SUPPORTED_Autoneg;
		cmd->advertising |= ADVERTISED_Autoneg;
		advertising |= ADVERTISED_Autoneg;
		cmd->lp_advertising |= ADVERTISED_Autoneg;
		lp_advertising |= ADVERTISED_Autoneg;


		if (adv.duplex) {
		if (adv.duplex) {
			cmd->supported |= (SUPPORTED_1000baseT_Full |
			supported |= (SUPPORTED_1000baseT_Full |
				      SUPPORTED_100baseT_Full |
				      SUPPORTED_100baseT_Full |
				      SUPPORTED_10baseT_Full);
				      SUPPORTED_10baseT_Full);
			cmd->advertising |= (ADVERTISED_1000baseT_Full |
			advertising |= (ADVERTISED_1000baseT_Full |
					ADVERTISED_100baseT_Full |
					ADVERTISED_100baseT_Full |
					ADVERTISED_10baseT_Full);
					ADVERTISED_10baseT_Full);
		} else {
		} else {
			cmd->supported |= (SUPPORTED_1000baseT_Half |
			supported |= (SUPPORTED_1000baseT_Half |
				      SUPPORTED_100baseT_Half |
				      SUPPORTED_100baseT_Half |
				      SUPPORTED_10baseT_Half);
				      SUPPORTED_10baseT_Half);
			cmd->advertising |= (ADVERTISED_1000baseT_Half |
			advertising |= (ADVERTISED_1000baseT_Half |
					ADVERTISED_100baseT_Half |
					ADVERTISED_100baseT_Half |
					ADVERTISED_10baseT_Half);
					ADVERTISED_10baseT_Half);
		}
		}
		if (adv.lp_duplex)
		if (adv.lp_duplex)
			cmd->lp_advertising |= (ADVERTISED_1000baseT_Full |
			lp_advertising |= (ADVERTISED_1000baseT_Full |
					   ADVERTISED_100baseT_Full |
					   ADVERTISED_100baseT_Full |
					   ADVERTISED_10baseT_Full);
					   ADVERTISED_10baseT_Full);
		else
		else
			cmd->lp_advertising |= (ADVERTISED_1000baseT_Half |
			lp_advertising |= (ADVERTISED_1000baseT_Half |
					   ADVERTISED_100baseT_Half |
					   ADVERTISED_100baseT_Half |
					   ADVERTISED_10baseT_Half);
					   ADVERTISED_10baseT_Half);
		cmd->port = PORT_OTHER;
		cmd->base.port = PORT_OTHER;

		ethtool_convert_legacy_u32_to_link_mode(
			cmd->link_modes.supported, supported);
		ethtool_convert_legacy_u32_to_link_mode(
			cmd->link_modes.advertising, advertising);
		ethtool_convert_legacy_u32_to_link_mode(
			cmd->link_modes.lp_advertising, lp_advertising);


		return 0;
		return 0;
	}
	}
@@ -350,13 +365,13 @@ static int stmmac_ethtool_getsettings(struct net_device *dev,
		"link speed / duplex setting\n", dev->name);
		"link speed / duplex setting\n", dev->name);
		return -EBUSY;
		return -EBUSY;
	}
	}
	cmd->transceiver = XCVR_INTERNAL;
	rc = phy_ethtool_ksettings_get(phy, cmd);
	rc = phy_ethtool_gset(phy, cmd);
	return rc;
	return rc;
}
}


static int stmmac_ethtool_setsettings(struct net_device *dev,
static int
				      struct ethtool_cmd *cmd)
stmmac_ethtool_set_link_ksettings(struct net_device *dev,
				  const struct ethtool_link_ksettings *cmd)
{
{
	struct stmmac_priv *priv = netdev_priv(dev);
	struct stmmac_priv *priv = netdev_priv(dev);
	struct phy_device *phy = dev->phydev;
	struct phy_device *phy = dev->phydev;
@@ -367,7 +382,7 @@ static int stmmac_ethtool_setsettings(struct net_device *dev,
		u32 mask = ADVERTISED_Autoneg | ADVERTISED_Pause;
		u32 mask = ADVERTISED_Autoneg | ADVERTISED_Pause;


		/* Only support ANE */
		/* Only support ANE */
		if (cmd->autoneg != AUTONEG_ENABLE)
		if (cmd->base.autoneg != AUTONEG_ENABLE)
			return -EINVAL;
			return -EINVAL;


		mask &= (ADVERTISED_1000baseT_Half |
		mask &= (ADVERTISED_1000baseT_Half |
@@ -389,7 +404,7 @@ static int stmmac_ethtool_setsettings(struct net_device *dev,
	}
	}


	spin_lock(&priv->lock);
	spin_lock(&priv->lock);
	rc = phy_ethtool_sset(phy, cmd);
	rc = phy_ethtool_ksettings_set(phy, cmd);
	spin_unlock(&priv->lock);
	spin_unlock(&priv->lock);


	return rc;
	return rc;
@@ -850,8 +865,6 @@ static int stmmac_set_tunable(struct net_device *dev,
static const struct ethtool_ops stmmac_ethtool_ops = {
static const struct ethtool_ops stmmac_ethtool_ops = {
	.begin = stmmac_check_if_running,
	.begin = stmmac_check_if_running,
	.get_drvinfo = stmmac_ethtool_getdrvinfo,
	.get_drvinfo = stmmac_ethtool_getdrvinfo,
	.get_settings = stmmac_ethtool_getsettings,
	.set_settings = stmmac_ethtool_setsettings,
	.get_msglevel = stmmac_ethtool_getmsglevel,
	.get_msglevel = stmmac_ethtool_getmsglevel,
	.set_msglevel = stmmac_ethtool_setmsglevel,
	.set_msglevel = stmmac_ethtool_setmsglevel,
	.get_regs = stmmac_ethtool_gregs,
	.get_regs = stmmac_ethtool_gregs,
@@ -871,6 +884,8 @@ static const struct ethtool_ops stmmac_ethtool_ops = {
	.set_coalesce = stmmac_set_coalesce,
	.set_coalesce = stmmac_set_coalesce,
	.get_tunable = stmmac_get_tunable,
	.get_tunable = stmmac_get_tunable,
	.set_tunable = stmmac_set_tunable,
	.set_tunable = stmmac_set_tunable,
	.get_link_ksettings = stmmac_ethtool_get_link_ksettings,
	.set_link_ksettings = stmmac_ethtool_set_link_ksettings,
};
};


void stmmac_set_ethtool_ops(struct net_device *netdev)
void stmmac_set_ethtool_ops(struct net_device *netdev)