net: qlogic: netxen: use new api ethtool_{get|set}_link_ksettings
authorPhilippe Reynes <tremyfr@gmail.com>
Thu, 16 Feb 2017 22:28:01 +0000 (23:28 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 17 Feb 2017 19:06:41 +0000 (14:06 -0500)
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>
drivers/net/ethernet/qlogic/netxen/netxen_nic_ethtool.c

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