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: Philippe Reynes <tremyfr@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
2efbe14303
commit
3b03cc0783
|
@ -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,
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
|
|
||||||
/* 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,
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
|
|
Loading…
Reference in New Issue