Commit 99f18f1d authored by Philippe Reynes's avatar Philippe Reynes Committed by David S. Miller

net: qlogic: netxen: 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 336f8a71
...@@ -96,69 +96,70 @@ netxen_nic_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *drvinfo) ...@@ -96,69 +96,70 @@ netxen_nic_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *drvinfo)
} }
static int static int
netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) netxen_nic_get_link_ksettings(struct net_device *dev,
struct ethtool_link_ksettings *cmd)
{ {
struct netxen_adapter *adapter = netdev_priv(dev); struct netxen_adapter *adapter = netdev_priv(dev);
int check_sfp_module = 0; int check_sfp_module = 0;
u32 supported, advertising;
/* read which mode */ /* read which mode */
if (adapter->ahw.port_type == NETXEN_NIC_GBE) { if (adapter->ahw.port_type == NETXEN_NIC_GBE) {
ecmd->supported = (SUPPORTED_10baseT_Half | supported = (SUPPORTED_10baseT_Half |
SUPPORTED_10baseT_Full | SUPPORTED_10baseT_Full |
SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Half |
SUPPORTED_100baseT_Full | SUPPORTED_100baseT_Full |
SUPPORTED_1000baseT_Half | SUPPORTED_1000baseT_Half |
SUPPORTED_1000baseT_Full); SUPPORTED_1000baseT_Full);
ecmd->advertising = (ADVERTISED_100baseT_Half | advertising = (ADVERTISED_100baseT_Half |
ADVERTISED_100baseT_Full | ADVERTISED_100baseT_Full |
ADVERTISED_1000baseT_Half | ADVERTISED_1000baseT_Half |
ADVERTISED_1000baseT_Full); ADVERTISED_1000baseT_Full);
ecmd->port = PORT_TP; cmd->base.port = PORT_TP;
ethtool_cmd_speed_set(ecmd, adapter->link_speed); cmd->base.speed = adapter->link_speed;
ecmd->duplex = adapter->link_duplex; cmd->base.duplex = adapter->link_duplex;
ecmd->autoneg = adapter->link_autoneg; cmd->base.autoneg = adapter->link_autoneg;
} else if (adapter->ahw.port_type == NETXEN_NIC_XGBE) { } else if (adapter->ahw.port_type == NETXEN_NIC_XGBE) {
u32 val; u32 val;
val = NXRD32(adapter, NETXEN_PORT_MODE_ADDR); val = NXRD32(adapter, NETXEN_PORT_MODE_ADDR);
if (val == NETXEN_PORT_MODE_802_3_AP) { if (val == NETXEN_PORT_MODE_802_3_AP) {
ecmd->supported = SUPPORTED_1000baseT_Full; supported = SUPPORTED_1000baseT_Full;
ecmd->advertising = ADVERTISED_1000baseT_Full; advertising = ADVERTISED_1000baseT_Full;
} else { } else {
ecmd->supported = SUPPORTED_10000baseT_Full; supported = SUPPORTED_10000baseT_Full;
ecmd->advertising = ADVERTISED_10000baseT_Full; advertising = ADVERTISED_10000baseT_Full;
} }
if (netif_running(dev) && adapter->has_link_events) { if (netif_running(dev) && adapter->has_link_events) {
ethtool_cmd_speed_set(ecmd, adapter->link_speed); cmd->base.speed = adapter->link_speed;
ecmd->autoneg = adapter->link_autoneg; cmd->base.autoneg = adapter->link_autoneg;
ecmd->duplex = adapter->link_duplex; cmd->base.duplex = adapter->link_duplex;
goto skip; goto skip;
} }
ecmd->port = PORT_TP; cmd->base.port = PORT_TP;
if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
u16 pcifn = adapter->ahw.pci_func; u16 pcifn = adapter->ahw.pci_func;
val = NXRD32(adapter, P3_LINK_SPEED_REG(pcifn)); val = NXRD32(adapter, P3_LINK_SPEED_REG(pcifn));
ethtool_cmd_speed_set(ecmd, P3_LINK_SPEED_MHZ * cmd->base.speed = P3_LINK_SPEED_MHZ *
P3_LINK_SPEED_VAL(pcifn, val)); P3_LINK_SPEED_VAL(pcifn, val);
} else } else
ethtool_cmd_speed_set(ecmd, SPEED_10000); cmd->base.speed = SPEED_10000;
ecmd->duplex = DUPLEX_FULL; cmd->base.duplex = DUPLEX_FULL;
ecmd->autoneg = AUTONEG_DISABLE; cmd->base.autoneg = AUTONEG_DISABLE;
} else } else
return -EIO; return -EIO;
skip: skip:
ecmd->phy_address = adapter->physical_port; cmd->base.phy_address = adapter->physical_port;
ecmd->transceiver = XCVR_EXTERNAL;
switch (adapter->ahw.board_type) { switch (adapter->ahw.board_type) {
case NETXEN_BRDTYPE_P2_SB35_4G: case NETXEN_BRDTYPE_P2_SB35_4G:
...@@ -167,16 +168,16 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) ...@@ -167,16 +168,16 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
case NETXEN_BRDTYPE_P3_4_GB: case NETXEN_BRDTYPE_P3_4_GB:
case NETXEN_BRDTYPE_P3_4_GB_MM: case NETXEN_BRDTYPE_P3_4_GB_MM:
ecmd->supported |= SUPPORTED_Autoneg; supported |= SUPPORTED_Autoneg;
ecmd->advertising |= ADVERTISED_Autoneg; advertising |= ADVERTISED_Autoneg;
case NETXEN_BRDTYPE_P2_SB31_10G_CX4: case NETXEN_BRDTYPE_P2_SB31_10G_CX4:
case NETXEN_BRDTYPE_P3_10G_CX4: case NETXEN_BRDTYPE_P3_10G_CX4:
case NETXEN_BRDTYPE_P3_10G_CX4_LP: case NETXEN_BRDTYPE_P3_10G_CX4_LP:
case NETXEN_BRDTYPE_P3_10000_BASE_T: case NETXEN_BRDTYPE_P3_10000_BASE_T:
ecmd->supported |= SUPPORTED_TP; supported |= SUPPORTED_TP;
ecmd->advertising |= ADVERTISED_TP; advertising |= ADVERTISED_TP;
ecmd->port = PORT_TP; cmd->base.port = PORT_TP;
ecmd->autoneg = (adapter->ahw.board_type == cmd->base.autoneg = (adapter->ahw.board_type ==
NETXEN_BRDTYPE_P2_SB31_10G_CX4) ? NETXEN_BRDTYPE_P2_SB31_10G_CX4) ?
(AUTONEG_DISABLE) : (adapter->link_autoneg); (AUTONEG_DISABLE) : (adapter->link_autoneg);
break; break;
...@@ -185,39 +186,39 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) ...@@ -185,39 +186,39 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
case NETXEN_BRDTYPE_P3_IMEZ: case NETXEN_BRDTYPE_P3_IMEZ:
case NETXEN_BRDTYPE_P3_XG_LOM: case NETXEN_BRDTYPE_P3_XG_LOM:
case NETXEN_BRDTYPE_P3_HMEZ: case NETXEN_BRDTYPE_P3_HMEZ:
ecmd->supported |= SUPPORTED_MII; supported |= SUPPORTED_MII;
ecmd->advertising |= ADVERTISED_MII; advertising |= ADVERTISED_MII;
ecmd->port = PORT_MII; cmd->base.port = PORT_MII;
ecmd->autoneg = AUTONEG_DISABLE; cmd->base.autoneg = AUTONEG_DISABLE;
break; break;
case NETXEN_BRDTYPE_P3_10G_SFP_PLUS: case NETXEN_BRDTYPE_P3_10G_SFP_PLUS:
case NETXEN_BRDTYPE_P3_10G_SFP_CT: case NETXEN_BRDTYPE_P3_10G_SFP_CT:
case NETXEN_BRDTYPE_P3_10G_SFP_QT: case NETXEN_BRDTYPE_P3_10G_SFP_QT:
ecmd->advertising |= ADVERTISED_TP; advertising |= ADVERTISED_TP;
ecmd->supported |= SUPPORTED_TP; supported |= SUPPORTED_TP;
check_sfp_module = netif_running(dev) && check_sfp_module = netif_running(dev) &&
adapter->has_link_events; adapter->has_link_events;
case NETXEN_BRDTYPE_P2_SB31_10G: case NETXEN_BRDTYPE_P2_SB31_10G:
case NETXEN_BRDTYPE_P3_10G_XFP: case NETXEN_BRDTYPE_P3_10G_XFP:
ecmd->supported |= SUPPORTED_FIBRE; supported |= SUPPORTED_FIBRE;
ecmd->advertising |= ADVERTISED_FIBRE; advertising |= ADVERTISED_FIBRE;
ecmd->port = PORT_FIBRE; cmd->base.port = PORT_FIBRE;
ecmd->autoneg = AUTONEG_DISABLE; cmd->base.autoneg = AUTONEG_DISABLE;
break; break;
case NETXEN_BRDTYPE_P3_10G_TP: case NETXEN_BRDTYPE_P3_10G_TP:
if (adapter->ahw.port_type == NETXEN_NIC_XGBE) { if (adapter->ahw.port_type == NETXEN_NIC_XGBE) {
ecmd->autoneg = AUTONEG_DISABLE; cmd->base.autoneg = AUTONEG_DISABLE;
ecmd->supported |= (SUPPORTED_FIBRE | SUPPORTED_TP); supported |= (SUPPORTED_FIBRE | SUPPORTED_TP);
ecmd->advertising |= advertising |=
(ADVERTISED_FIBRE | ADVERTISED_TP); (ADVERTISED_FIBRE | ADVERTISED_TP);
ecmd->port = PORT_FIBRE; cmd->base.port = PORT_FIBRE;
check_sfp_module = netif_running(dev) && check_sfp_module = netif_running(dev) &&
adapter->has_link_events; adapter->has_link_events;
} else { } else {
ecmd->supported |= (SUPPORTED_TP | SUPPORTED_Autoneg); supported |= (SUPPORTED_TP | SUPPORTED_Autoneg);
ecmd->advertising |= advertising |=
(ADVERTISED_TP | ADVERTISED_Autoneg); (ADVERTISED_TP | ADVERTISED_Autoneg);
ecmd->port = PORT_TP; cmd->base.port = PORT_TP;
} }
break; break;
default: default:
...@@ -232,31 +233,37 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) ...@@ -232,31 +233,37 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
case LINKEVENT_MODULE_OPTICAL_SRLR: case LINKEVENT_MODULE_OPTICAL_SRLR:
case LINKEVENT_MODULE_OPTICAL_LRM: case LINKEVENT_MODULE_OPTICAL_LRM:
case LINKEVENT_MODULE_OPTICAL_SFP_1G: case LINKEVENT_MODULE_OPTICAL_SFP_1G:
ecmd->port = PORT_FIBRE; cmd->base.port = PORT_FIBRE;
break; break;
case LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLE: case LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLE:
case LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLELEN: case LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLELEN:
case LINKEVENT_MODULE_TWINAX: case LINKEVENT_MODULE_TWINAX:
ecmd->port = PORT_TP; cmd->base.port = PORT_TP;
break; break;
default: default:
ecmd->port = -1; cmd->base.port = -1;
} }
} }
if (!netif_running(dev) || !adapter->ahw.linkup) { if (!netif_running(dev) || !adapter->ahw.linkup) {
ecmd->duplex = DUPLEX_UNKNOWN; cmd->base.duplex = DUPLEX_UNKNOWN;
ethtool_cmd_speed_set(ecmd, SPEED_UNKNOWN); cmd->base.speed = SPEED_UNKNOWN;
} }
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; return 0;
} }
static int static int
netxen_nic_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd) netxen_nic_set_link_ksettings(struct net_device *dev,
const struct ethtool_link_ksettings *cmd)
{ {
struct netxen_adapter *adapter = netdev_priv(dev); struct netxen_adapter *adapter = netdev_priv(dev);
u32 speed = ethtool_cmd_speed(ecmd); u32 speed = cmd->base.speed;
int ret; int ret;
if (adapter->ahw.port_type != NETXEN_NIC_GBE) if (adapter->ahw.port_type != NETXEN_NIC_GBE)
...@@ -265,16 +272,16 @@ netxen_nic_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd) ...@@ -265,16 +272,16 @@ netxen_nic_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
if (!(adapter->capabilities & NX_FW_CAPABILITY_GBE_LINK_CFG)) if (!(adapter->capabilities & NX_FW_CAPABILITY_GBE_LINK_CFG))
return -EOPNOTSUPP; return -EOPNOTSUPP;
ret = nx_fw_cmd_set_gbe_port(adapter, speed, ecmd->duplex, ret = nx_fw_cmd_set_gbe_port(adapter, speed, cmd->base.duplex,
ecmd->autoneg); cmd->base.autoneg);
if (ret == NX_RCODE_NOT_SUPPORTED) if (ret == NX_RCODE_NOT_SUPPORTED)
return -EOPNOTSUPP; return -EOPNOTSUPP;
else if (ret) else if (ret)
return -EIO; return -EIO;
adapter->link_speed = speed; adapter->link_speed = speed;
adapter->link_duplex = ecmd->duplex; adapter->link_duplex = cmd->base.duplex;
adapter->link_autoneg = ecmd->autoneg; adapter->link_autoneg = cmd->base.autoneg;
if (!netif_running(dev)) if (!netif_running(dev))
return 0; return 0;
...@@ -931,8 +938,6 @@ netxen_get_dump_data(struct net_device *netdev, struct ethtool_dump *dump, ...@@ -931,8 +938,6 @@ netxen_get_dump_data(struct net_device *netdev, struct ethtool_dump *dump,
} }
const struct ethtool_ops netxen_nic_ethtool_ops = { const struct ethtool_ops netxen_nic_ethtool_ops = {
.get_settings = netxen_nic_get_settings,
.set_settings = netxen_nic_set_settings,
.get_drvinfo = netxen_nic_get_drvinfo, .get_drvinfo = netxen_nic_get_drvinfo,
.get_regs_len = netxen_nic_get_regs_len, .get_regs_len = netxen_nic_get_regs_len,
.get_regs = netxen_nic_get_regs, .get_regs = netxen_nic_get_regs,
...@@ -954,4 +959,6 @@ const struct ethtool_ops netxen_nic_ethtool_ops = { ...@@ -954,4 +959,6 @@ const struct ethtool_ops netxen_nic_ethtool_ops = {
.get_dump_flag = netxen_get_dump_flag, .get_dump_flag = netxen_get_dump_flag,
.get_dump_data = netxen_get_dump_data, .get_dump_data = netxen_get_dump_data,
.set_dump = netxen_set_dump, .set_dump = netxen_set_dump,
.get_link_ksettings = netxen_nic_get_link_ksettings,
.set_link_ksettings = netxen_nic_set_link_ksettings,
}; };
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