aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/mlx4/en_ethtool.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/mlx4/en_ethtool.c')
-rw-r--r--drivers/net/mlx4/en_ethtool.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/drivers/net/mlx4/en_ethtool.c b/drivers/net/mlx4/en_ethtool.c
index f7d72d7a8704..fa2f2f43ab48 100644
--- a/drivers/net/mlx4/en_ethtool.c
+++ b/drivers/net/mlx4/en_ethtool.c
@@ -244,16 +244,39 @@ static void mlx4_en_get_strings(struct net_device *dev,
244 244
245static int mlx4_en_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) 245static int mlx4_en_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
246{ 246{
247 struct mlx4_en_priv *priv = netdev_priv(dev);
248 int trans_type;
249
247 cmd->autoneg = AUTONEG_DISABLE; 250 cmd->autoneg = AUTONEG_DISABLE;
248 cmd->supported = SUPPORTED_10000baseT_Full; 251 cmd->supported = SUPPORTED_10000baseT_Full;
249 cmd->advertising = ADVERTISED_1000baseT_Full; 252 cmd->advertising = ADVERTISED_10000baseT_Full;
253
254 if (mlx4_en_QUERY_PORT(priv->mdev, priv->port))
255 return -ENOMEM;
256
257 trans_type = priv->port_state.transciver;
250 if (netif_carrier_ok(dev)) { 258 if (netif_carrier_ok(dev)) {
251 cmd->speed = SPEED_10000; 259 cmd->speed = priv->port_state.link_speed;
252 cmd->duplex = DUPLEX_FULL; 260 cmd->duplex = DUPLEX_FULL;
253 } else { 261 } else {
254 cmd->speed = -1; 262 cmd->speed = -1;
255 cmd->duplex = -1; 263 cmd->duplex = -1;
256 } 264 }
265
266 if (trans_type > 0 && trans_type <= 0xC) {
267 cmd->port = PORT_FIBRE;
268 cmd->transceiver = XCVR_EXTERNAL;
269 cmd->supported |= SUPPORTED_FIBRE;
270 cmd->advertising |= ADVERTISED_FIBRE;
271 } else if (trans_type == 0x80 || trans_type == 0) {
272 cmd->port = PORT_TP;
273 cmd->transceiver = XCVR_INTERNAL;
274 cmd->supported |= SUPPORTED_TP;
275 cmd->advertising |= ADVERTISED_TP;
276 } else {
277 cmd->port = -1;
278 cmd->transceiver = -1;
279 }
257 return 0; 280 return 0;
258} 281}
259 282