|
@@ -112,6 +112,13 @@ static int nicvf_get_settings(struct net_device *netdev,
|
|
|
|
|
|
|
|
cmd->supported = 0;
|
|
cmd->supported = 0;
|
|
|
cmd->transceiver = XCVR_EXTERNAL;
|
|
cmd->transceiver = XCVR_EXTERNAL;
|
|
|
|
|
+
|
|
|
|
|
+ if (!nic->link_up) {
|
|
|
|
|
+ cmd->duplex = DUPLEX_UNKNOWN;
|
|
|
|
|
+ ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN);
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if (nic->speed <= 1000) {
|
|
if (nic->speed <= 1000) {
|
|
|
cmd->port = PORT_MII;
|
|
cmd->port = PORT_MII;
|
|
|
cmd->autoneg = AUTONEG_ENABLE;
|
|
cmd->autoneg = AUTONEG_ENABLE;
|
|
@@ -125,6 +132,13 @@ static int nicvf_get_settings(struct net_device *netdev,
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+static u32 nicvf_get_link(struct net_device *netdev)
|
|
|
|
|
+{
|
|
|
|
|
+ struct nicvf *nic = netdev_priv(netdev);
|
|
|
|
|
+
|
|
|
|
|
+ return nic->link_up;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
static void nicvf_get_drvinfo(struct net_device *netdev,
|
|
static void nicvf_get_drvinfo(struct net_device *netdev,
|
|
|
struct ethtool_drvinfo *info)
|
|
struct ethtool_drvinfo *info)
|
|
|
{
|
|
{
|
|
@@ -660,7 +674,7 @@ static int nicvf_set_channels(struct net_device *dev,
|
|
|
|
|
|
|
|
static const struct ethtool_ops nicvf_ethtool_ops = {
|
|
static const struct ethtool_ops nicvf_ethtool_ops = {
|
|
|
.get_settings = nicvf_get_settings,
|
|
.get_settings = nicvf_get_settings,
|
|
|
- .get_link = ethtool_op_get_link,
|
|
|
|
|
|
|
+ .get_link = nicvf_get_link,
|
|
|
.get_drvinfo = nicvf_get_drvinfo,
|
|
.get_drvinfo = nicvf_get_drvinfo,
|
|
|
.get_msglevel = nicvf_get_msglevel,
|
|
.get_msglevel = nicvf_get_msglevel,
|
|
|
.set_msglevel = nicvf_set_msglevel,
|
|
.set_msglevel = nicvf_set_msglevel,
|