Commit 3b03cc07 authored by Philippe Reynes's avatar Philippe Reynes Committed by David S. Miller

net: natsemi: ns83820: 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.

As I don't have the hardware, I'd be very pleased if
someone may test this patch.
Signed-off-by: default avatarPhilippe Reynes <tremyfr@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2efbe143
...@@ -1217,12 +1217,13 @@ static struct net_device_stats *ns83820_get_stats(struct net_device *ndev) ...@@ -1217,12 +1217,13 @@ static struct net_device_stats *ns83820_get_stats(struct net_device *ndev)
} }
/* Let ethtool retrieve info */ /* Let ethtool retrieve info */
static int ns83820_get_settings(struct net_device *ndev, static int ns83820_get_link_ksettings(struct net_device *ndev,
struct ethtool_cmd *cmd) struct ethtool_link_ksettings *cmd)
{ {
struct ns83820 *dev = PRIV(ndev); struct ns83820 *dev = PRIV(ndev);
u32 cfg, tanar, tbicr; u32 cfg, tanar, tbicr;
int fullduplex = 0; int fullduplex = 0;
u32 supported;
/* /*
* Here's the list of available ethtool commands from other drivers: * Here's the list of available ethtool commands from other drivers:
...@@ -1244,44 +1245,47 @@ static int ns83820_get_settings(struct net_device *ndev, ...@@ -1244,44 +1245,47 @@ static int ns83820_get_settings(struct net_device *ndev,
fullduplex = (cfg & CFG_DUPSTS) ? 1 : 0; fullduplex = (cfg & CFG_DUPSTS) ? 1 : 0;
cmd->supported = SUPPORTED_Autoneg; supported = SUPPORTED_Autoneg;
if (dev->CFG_cache & CFG_TBI_EN) { if (dev->CFG_cache & CFG_TBI_EN) {
/* we have optical interface */ /* we have optical interface */
cmd->supported |= SUPPORTED_1000baseT_Half | supported |= SUPPORTED_1000baseT_Half |
SUPPORTED_1000baseT_Full | SUPPORTED_1000baseT_Full |
SUPPORTED_FIBRE; SUPPORTED_FIBRE;
cmd->port = PORT_FIBRE; cmd->base.port = PORT_FIBRE;
} else { } else {
/* we have copper */ /* we have copper */
cmd->supported |= SUPPORTED_10baseT_Half | supported |= SUPPORTED_10baseT_Half |
SUPPORTED_10baseT_Full | SUPPORTED_100baseT_Half | SUPPORTED_10baseT_Full | SUPPORTED_100baseT_Half |
SUPPORTED_100baseT_Full | SUPPORTED_1000baseT_Half | SUPPORTED_100baseT_Full | SUPPORTED_1000baseT_Half |
SUPPORTED_1000baseT_Full | SUPPORTED_1000baseT_Full |
SUPPORTED_MII; SUPPORTED_MII;
cmd->port = PORT_MII; cmd->base.port = PORT_MII;
} }
cmd->duplex = fullduplex ? DUPLEX_FULL : DUPLEX_HALF; ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
supported);
cmd->base.duplex = fullduplex ? DUPLEX_FULL : DUPLEX_HALF;
switch (cfg / CFG_SPDSTS0 & 3) { switch (cfg / CFG_SPDSTS0 & 3) {
case 2: case 2:
ethtool_cmd_speed_set(cmd, SPEED_1000); cmd->base.speed = SPEED_1000;
break; break;
case 1: case 1:
ethtool_cmd_speed_set(cmd, SPEED_100); cmd->base.speed = SPEED_100;
break; break;
default: default:
ethtool_cmd_speed_set(cmd, SPEED_10); cmd->base.speed = SPEED_10;
break; break;
} }
cmd->autoneg = (tbicr & TBICR_MR_AN_ENABLE) cmd->base.autoneg = (tbicr & TBICR_MR_AN_ENABLE)
? AUTONEG_ENABLE : AUTONEG_DISABLE; ? AUTONEG_ENABLE : AUTONEG_DISABLE;
return 0; return 0;
} }
/* Let ethool change settings*/ /* Let ethool change settings*/
static int ns83820_set_settings(struct net_device *ndev, static int ns83820_set_link_ksettings(struct net_device *ndev,
struct ethtool_cmd *cmd) const struct ethtool_link_ksettings *cmd)
{ {
struct ns83820 *dev = PRIV(ndev); struct ns83820 *dev = PRIV(ndev);
u32 cfg, tanar; u32 cfg, tanar;
...@@ -1306,10 +1310,10 @@ static int ns83820_set_settings(struct net_device *ndev, ...@@ -1306,10 +1310,10 @@ static int ns83820_set_settings(struct net_device *ndev,
spin_lock(&dev->tx_lock); spin_lock(&dev->tx_lock);
/* Set duplex */ /* Set duplex */
if (cmd->duplex != fullduplex) { if (cmd->base.duplex != fullduplex) {
if (have_optical) { if (have_optical) {
/*set full duplex*/ /*set full duplex*/
if (cmd->duplex == DUPLEX_FULL) { if (cmd->base.duplex == DUPLEX_FULL) {
/* force full duplex */ /* force full duplex */
writel(readl(dev->base + TXCFG) writel(readl(dev->base + TXCFG)
| TXCFG_CSI | TXCFG_HBI | TXCFG_ATP, | TXCFG_CSI | TXCFG_HBI | TXCFG_ATP,
...@@ -1333,7 +1337,7 @@ static int ns83820_set_settings(struct net_device *ndev, ...@@ -1333,7 +1337,7 @@ static int ns83820_set_settings(struct net_device *ndev,
/* Set autonegotiation */ /* Set autonegotiation */
if (1) { if (1) {
if (cmd->autoneg == AUTONEG_ENABLE) { if (cmd->base.autoneg == AUTONEG_ENABLE) {
/* restart auto negotiation */ /* restart auto negotiation */
writel(TBICR_MR_AN_ENABLE | TBICR_MR_RESTART_AN, writel(TBICR_MR_AN_ENABLE | TBICR_MR_RESTART_AN,
dev->base + TBICR); dev->base + TBICR);
...@@ -1348,7 +1352,7 @@ static int ns83820_set_settings(struct net_device *ndev, ...@@ -1348,7 +1352,7 @@ static int ns83820_set_settings(struct net_device *ndev,
} }
printk(KERN_INFO "%s: autoneg %s via ethtool\n", ndev->name, printk(KERN_INFO "%s: autoneg %s via ethtool\n", ndev->name,
cmd->autoneg ? "ENABLED" : "DISABLED"); cmd->base.autoneg ? "ENABLED" : "DISABLED");
} }
phy_intr(ndev); phy_intr(ndev);
...@@ -1375,10 +1379,10 @@ static u32 ns83820_get_link(struct net_device *ndev) ...@@ -1375,10 +1379,10 @@ static u32 ns83820_get_link(struct net_device *ndev)
} }
static const struct ethtool_ops ops = { static const struct ethtool_ops ops = {
.get_settings = ns83820_get_settings,
.set_settings = ns83820_set_settings,
.get_drvinfo = ns83820_get_drvinfo, .get_drvinfo = ns83820_get_drvinfo,
.get_link = ns83820_get_link .get_link = ns83820_get_link,
.get_link_ksettings = ns83820_get_link_ksettings,
.set_link_ksettings = ns83820_set_link_ksettings,
}; };
static inline void ns83820_disable_interrupts(struct ns83820 *dev) static inline void ns83820_disable_interrupts(struct ns83820 *dev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment