diff options
author | Philippe Reynes <tremyfr@gmail.com> | 2016-09-25 17:31:24 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-09-26 20:17:09 -0400 |
commit | b6f5be287344433100201c4d6f3f8dcd1755a6b3 (patch) | |
tree | 3c52eeaab786a82e7e597d6b66c5e6a0ca09b86e /drivers/net/ethernet/broadcom | |
parent | be92e538c2727e917ede78d022de8d64381dc213 (diff) |
net: tg3: 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: Philippe Reynes <tremyfr@gmail.com>
Acked-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom')
-rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 112 |
1 files changed, 62 insertions, 50 deletions
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index a2551bcd1027..2726f032f2d4 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -12079,95 +12079,107 @@ static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, | |||
12079 | return ret; | 12079 | return ret; |
12080 | } | 12080 | } |
12081 | 12081 | ||
12082 | static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) | 12082 | static int tg3_get_link_ksettings(struct net_device *dev, |
12083 | struct ethtool_link_ksettings *cmd) | ||
12083 | { | 12084 | { |
12084 | struct tg3 *tp = netdev_priv(dev); | 12085 | struct tg3 *tp = netdev_priv(dev); |
12086 | u32 supported, advertising; | ||
12085 | 12087 | ||
12086 | if (tg3_flag(tp, USE_PHYLIB)) { | 12088 | if (tg3_flag(tp, USE_PHYLIB)) { |
12087 | struct phy_device *phydev; | 12089 | struct phy_device *phydev; |
12088 | if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) | 12090 | if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) |
12089 | return -EAGAIN; | 12091 | return -EAGAIN; |
12090 | phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); | 12092 | phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); |
12091 | return phy_ethtool_gset(phydev, cmd); | 12093 | return phy_ethtool_ksettings_get(phydev, cmd); |
12092 | } | 12094 | } |
12093 | 12095 | ||
12094 | cmd->supported = (SUPPORTED_Autoneg); | 12096 | supported = (SUPPORTED_Autoneg); |
12095 | 12097 | ||
12096 | if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) | 12098 | if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) |
12097 | cmd->supported |= (SUPPORTED_1000baseT_Half | | 12099 | supported |= (SUPPORTED_1000baseT_Half | |
12098 | SUPPORTED_1000baseT_Full); | 12100 | SUPPORTED_1000baseT_Full); |
12099 | 12101 | ||
12100 | if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { | 12102 | if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { |
12101 | cmd->supported |= (SUPPORTED_100baseT_Half | | 12103 | supported |= (SUPPORTED_100baseT_Half | |
12102 | SUPPORTED_100baseT_Full | | 12104 | SUPPORTED_100baseT_Full | |
12103 | SUPPORTED_10baseT_Half | | 12105 | SUPPORTED_10baseT_Half | |
12104 | SUPPORTED_10baseT_Full | | 12106 | SUPPORTED_10baseT_Full | |
12105 | SUPPORTED_TP); | 12107 | SUPPORTED_TP); |
12106 | cmd->port = PORT_TP; | 12108 | cmd->base.port = PORT_TP; |
12107 | } else { | 12109 | } else { |
12108 | cmd->supported |= SUPPORTED_FIBRE; | 12110 | supported |= SUPPORTED_FIBRE; |
12109 | cmd->port = PORT_FIBRE; | 12111 | cmd->base.port = PORT_FIBRE; |
12110 | } | 12112 | } |
12113 | ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, | ||
12114 | supported); | ||
12111 | 12115 | ||
12112 | cmd->advertising = tp->link_config.advertising; | 12116 | advertising = tp->link_config.advertising; |
12113 | if (tg3_flag(tp, PAUSE_AUTONEG)) { | 12117 | if (tg3_flag(tp, PAUSE_AUTONEG)) { |
12114 | if (tp->link_config.flowctrl & FLOW_CTRL_RX) { | 12118 | if (tp->link_config.flowctrl & FLOW_CTRL_RX) { |
12115 | if (tp->link_config.flowctrl & FLOW_CTRL_TX) { | 12119 | if (tp->link_config.flowctrl & FLOW_CTRL_TX) { |
12116 | cmd->advertising |= ADVERTISED_Pause; | 12120 | advertising |= ADVERTISED_Pause; |
12117 | } else { | 12121 | } else { |
12118 | cmd->advertising |= ADVERTISED_Pause | | 12122 | advertising |= ADVERTISED_Pause | |
12119 | ADVERTISED_Asym_Pause; | 12123 | ADVERTISED_Asym_Pause; |
12120 | } | 12124 | } |
12121 | } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) { | 12125 | } else if (tp->link_config.flowctrl & FLOW_CTRL_TX) { |
12122 | cmd->advertising |= ADVERTISED_Asym_Pause; | 12126 | advertising |= ADVERTISED_Asym_Pause; |
12123 | } | 12127 | } |
12124 | } | 12128 | } |
12129 | ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, | ||
12130 | advertising); | ||
12131 | |||
12125 | if (netif_running(dev) && tp->link_up) { | 12132 | if (netif_running(dev) && tp->link_up) { |
12126 | ethtool_cmd_speed_set(cmd, tp->link_config.active_speed); | 12133 | cmd->base.speed = tp->link_config.active_speed; |
12127 | cmd->duplex = tp->link_config.active_duplex; | 12134 | cmd->base.duplex = tp->link_config.active_duplex; |
12128 | cmd->lp_advertising = tp->link_config.rmt_adv; | 12135 | ethtool_convert_legacy_u32_to_link_mode( |
12136 | cmd->link_modes.lp_advertising, | ||
12137 | tp->link_config.rmt_adv); | ||
12138 | |||
12129 | if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { | 12139 | if (!(tp->phy_flags & TG3_PHYFLG_ANY_SERDES)) { |
12130 | if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE) | 12140 | if (tp->phy_flags & TG3_PHYFLG_MDIX_STATE) |
12131 | cmd->eth_tp_mdix = ETH_TP_MDI_X; | 12141 | cmd->base.eth_tp_mdix = ETH_TP_MDI_X; |
12132 | else | 12142 | else |
12133 | cmd->eth_tp_mdix = ETH_TP_MDI; | 12143 | cmd->base.eth_tp_mdix = ETH_TP_MDI; |
12134 | } | 12144 | } |
12135 | } else { | 12145 | } else { |
12136 | ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN); | 12146 | cmd->base.speed = SPEED_UNKNOWN; |
12137 | cmd->duplex = DUPLEX_UNKNOWN; | 12147 | cmd->base.duplex = DUPLEX_UNKNOWN; |
12138 | cmd->eth_tp_mdix = ETH_TP_MDI_INVALID; | 12148 | cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID; |
12139 | } | 12149 | } |
12140 | cmd->phy_address = tp->phy_addr; | 12150 | cmd->base.phy_address = tp->phy_addr; |
12141 | cmd->transceiver = XCVR_INTERNAL; | 12151 | cmd->base.autoneg = tp->link_config.autoneg; |
12142 | cmd->autoneg = tp->link_config.autoneg; | ||
12143 | cmd->maxtxpkt = 0; | ||
12144 | cmd->maxrxpkt = 0; | ||
12145 | return 0; | 12152 | return 0; |
12146 | } | 12153 | } |
12147 | 12154 | ||
12148 | static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | 12155 | static int tg3_set_link_ksettings(struct net_device *dev, |
12156 | const struct ethtool_link_ksettings *cmd) | ||
12149 | { | 12157 | { |
12150 | struct tg3 *tp = netdev_priv(dev); | 12158 | struct tg3 *tp = netdev_priv(dev); |
12151 | u32 speed = ethtool_cmd_speed(cmd); | 12159 | u32 speed = cmd->base.speed; |
12160 | u32 advertising; | ||
12152 | 12161 | ||
12153 | if (tg3_flag(tp, USE_PHYLIB)) { | 12162 | if (tg3_flag(tp, USE_PHYLIB)) { |
12154 | struct phy_device *phydev; | 12163 | struct phy_device *phydev; |
12155 | if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) | 12164 | if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED)) |
12156 | return -EAGAIN; | 12165 | return -EAGAIN; |
12157 | phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); | 12166 | phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); |
12158 | return phy_ethtool_sset(phydev, cmd); | 12167 | return phy_ethtool_ksettings_set(phydev, cmd); |
12159 | } | 12168 | } |
12160 | 12169 | ||
12161 | if (cmd->autoneg != AUTONEG_ENABLE && | 12170 | if (cmd->base.autoneg != AUTONEG_ENABLE && |
12162 | cmd->autoneg != AUTONEG_DISABLE) | 12171 | cmd->base.autoneg != AUTONEG_DISABLE) |
12163 | return -EINVAL; | 12172 | return -EINVAL; |
12164 | 12173 | ||
12165 | if (cmd->autoneg == AUTONEG_DISABLE && | 12174 | if (cmd->base.autoneg == AUTONEG_DISABLE && |
12166 | cmd->duplex != DUPLEX_FULL && | 12175 | cmd->base.duplex != DUPLEX_FULL && |
12167 | cmd->duplex != DUPLEX_HALF) | 12176 | cmd->base.duplex != DUPLEX_HALF) |
12168 | return -EINVAL; | 12177 | return -EINVAL; |
12169 | 12178 | ||
12170 | if (cmd->autoneg == AUTONEG_ENABLE) { | 12179 | ethtool_convert_link_mode_to_legacy_u32(&advertising, |
12180 | cmd->link_modes.advertising); | ||
12181 | |||
12182 | if (cmd->base.autoneg == AUTONEG_ENABLE) { | ||
12171 | u32 mask = ADVERTISED_Autoneg | | 12183 | u32 mask = ADVERTISED_Autoneg | |
12172 | ADVERTISED_Pause | | 12184 | ADVERTISED_Pause | |
12173 | ADVERTISED_Asym_Pause; | 12185 | ADVERTISED_Asym_Pause; |
@@ -12185,7 +12197,7 @@ static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
12185 | else | 12197 | else |
12186 | mask |= ADVERTISED_FIBRE; | 12198 | mask |= ADVERTISED_FIBRE; |
12187 | 12199 | ||
12188 | if (cmd->advertising & ~mask) | 12200 | if (advertising & ~mask) |
12189 | return -EINVAL; | 12201 | return -EINVAL; |
12190 | 12202 | ||
12191 | mask &= (ADVERTISED_1000baseT_Half | | 12203 | mask &= (ADVERTISED_1000baseT_Half | |
@@ -12195,13 +12207,13 @@ static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
12195 | ADVERTISED_10baseT_Half | | 12207 | ADVERTISED_10baseT_Half | |
12196 | ADVERTISED_10baseT_Full); | 12208 | ADVERTISED_10baseT_Full); |
12197 | 12209 | ||
12198 | cmd->advertising &= mask; | 12210 | advertising &= mask; |
12199 | } else { | 12211 | } else { |
12200 | if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) { | 12212 | if (tp->phy_flags & TG3_PHYFLG_ANY_SERDES) { |
12201 | if (speed != SPEED_1000) | 12213 | if (speed != SPEED_1000) |
12202 | return -EINVAL; | 12214 | return -EINVAL; |
12203 | 12215 | ||
12204 | if (cmd->duplex != DUPLEX_FULL) | 12216 | if (cmd->base.duplex != DUPLEX_FULL) |
12205 | return -EINVAL; | 12217 | return -EINVAL; |
12206 | } else { | 12218 | } else { |
12207 | if (speed != SPEED_100 && | 12219 | if (speed != SPEED_100 && |
@@ -12212,16 +12224,16 @@ static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
12212 | 12224 | ||
12213 | tg3_full_lock(tp, 0); | 12225 | tg3_full_lock(tp, 0); |
12214 | 12226 | ||
12215 | tp->link_config.autoneg = cmd->autoneg; | 12227 | tp->link_config.autoneg = cmd->base.autoneg; |
12216 | if (cmd->autoneg == AUTONEG_ENABLE) { | 12228 | if (cmd->base.autoneg == AUTONEG_ENABLE) { |
12217 | tp->link_config.advertising = (cmd->advertising | | 12229 | tp->link_config.advertising = (advertising | |
12218 | ADVERTISED_Autoneg); | 12230 | ADVERTISED_Autoneg); |
12219 | tp->link_config.speed = SPEED_UNKNOWN; | 12231 | tp->link_config.speed = SPEED_UNKNOWN; |
12220 | tp->link_config.duplex = DUPLEX_UNKNOWN; | 12232 | tp->link_config.duplex = DUPLEX_UNKNOWN; |
12221 | } else { | 12233 | } else { |
12222 | tp->link_config.advertising = 0; | 12234 | tp->link_config.advertising = 0; |
12223 | tp->link_config.speed = speed; | 12235 | tp->link_config.speed = speed; |
12224 | tp->link_config.duplex = cmd->duplex; | 12236 | tp->link_config.duplex = cmd->base.duplex; |
12225 | } | 12237 | } |
12226 | 12238 | ||
12227 | tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; | 12239 | tp->phy_flags |= TG3_PHYFLG_USER_CONFIGURED; |
@@ -14094,8 +14106,6 @@ static int tg3_get_eee(struct net_device *dev, struct ethtool_eee *edata) | |||
14094 | } | 14106 | } |
14095 | 14107 | ||
14096 | static const struct ethtool_ops tg3_ethtool_ops = { | 14108 | static const struct ethtool_ops tg3_ethtool_ops = { |
14097 | .get_settings = tg3_get_settings, | ||
14098 | .set_settings = tg3_set_settings, | ||
14099 | .get_drvinfo = tg3_get_drvinfo, | 14109 | .get_drvinfo = tg3_get_drvinfo, |
14100 | .get_regs_len = tg3_get_regs_len, | 14110 | .get_regs_len = tg3_get_regs_len, |
14101 | .get_regs = tg3_get_regs, | 14111 | .get_regs = tg3_get_regs, |
@@ -14128,6 +14138,8 @@ static const struct ethtool_ops tg3_ethtool_ops = { | |||
14128 | .get_ts_info = tg3_get_ts_info, | 14138 | .get_ts_info = tg3_get_ts_info, |
14129 | .get_eee = tg3_get_eee, | 14139 | .get_eee = tg3_get_eee, |
14130 | .set_eee = tg3_set_eee, | 14140 | .set_eee = tg3_set_eee, |
14141 | .get_link_ksettings = tg3_get_link_ksettings, | ||
14142 | .set_link_ksettings = tg3_set_link_ksettings, | ||
14131 | }; | 14143 | }; |
14132 | 14144 | ||
14133 | static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, | 14145 | static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, |