Commit 16c02145 authored by Sarveshwar Bandi's avatar Sarveshwar Bandi Committed by David S. Miller

be2net: Bug fix to return correct values in ethtool get_settings.

Changes to return correct values for transceiver and supported in
ethtool get_settings function.
Signed-off-by: default avatarSarveshwar Bandi <sarveshwarb@serverengines.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fced9999
...@@ -275,6 +275,7 @@ struct be_adapter { ...@@ -275,6 +275,7 @@ struct be_adapter {
u32 tx_fc; /* Tx flow control */ u32 tx_fc; /* Tx flow control */
int link_speed; int link_speed;
u8 port_type; u8 port_type;
u8 transceiver;
}; };
extern const struct ethtool_ops be_ethtool_ops; extern const struct ethtool_ops be_ethtool_ops;
......
...@@ -340,28 +340,50 @@ static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd) ...@@ -340,28 +340,50 @@ static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
status = be_cmd_read_port_type(adapter, adapter->port_num, status = be_cmd_read_port_type(adapter, adapter->port_num,
&connector); &connector);
if (!status) {
switch (connector) { switch (connector) {
case 7: case 7:
ecmd->port = PORT_FIBRE; ecmd->port = PORT_FIBRE;
ecmd->transceiver = XCVR_EXTERNAL;
break;
case 0:
ecmd->port = PORT_TP;
ecmd->transceiver = XCVR_EXTERNAL;
break; break;
default: default:
ecmd->port = PORT_TP; ecmd->port = PORT_TP;
ecmd->transceiver = XCVR_INTERNAL;
break; break;
} }
} else {
ecmd->port = PORT_AUI;
ecmd->transceiver = XCVR_INTERNAL;
}
/* Save for future use */ /* Save for future use */
adapter->link_speed = ecmd->speed; adapter->link_speed = ecmd->speed;
adapter->port_type = ecmd->port; adapter->port_type = ecmd->port;
adapter->transceiver = ecmd->transceiver;
} else { } else {
ecmd->speed = adapter->link_speed; ecmd->speed = adapter->link_speed;
ecmd->port = adapter->port_type; ecmd->port = adapter->port_type;
ecmd->transceiver = adapter->transceiver;
} }
ecmd->duplex = DUPLEX_FULL; ecmd->duplex = DUPLEX_FULL;
ecmd->autoneg = AUTONEG_DISABLE; ecmd->autoneg = AUTONEG_DISABLE;
ecmd->supported = (SUPPORTED_10000baseT_Full | SUPPORTED_TP);
ecmd->phy_address = adapter->port_num; ecmd->phy_address = adapter->port_num;
ecmd->transceiver = XCVR_INTERNAL; switch (ecmd->port) {
case PORT_FIBRE:
ecmd->supported = (SUPPORTED_10000baseT_Full | SUPPORTED_FIBRE);
break;
case PORT_TP:
ecmd->supported = (SUPPORTED_10000baseT_Full | SUPPORTED_TP);
break;
case PORT_AUI:
ecmd->supported = (SUPPORTED_10000baseT_Full | SUPPORTED_AUI);
break;
}
return 0; return 0;
} }
......
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