|
@@ -151,6 +151,13 @@ static const char ixgbe_gstrings_test[][ETH_GSTRING_LEN] = {
|
|
};
|
|
};
|
|
#define IXGBE_TEST_LEN sizeof(ixgbe_gstrings_test) / ETH_GSTRING_LEN
|
|
#define IXGBE_TEST_LEN sizeof(ixgbe_gstrings_test) / ETH_GSTRING_LEN
|
|
|
|
|
|
|
|
+static const char ixgbe_priv_flags_strings[][ETH_GSTRING_LEN] = {
|
|
|
|
+#define IXGBE_PRIV_FLAGS_LEGACY_RX BIT(0)
|
|
|
|
+ "legacy-rx",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+#define IXGBE_PRIV_FLAGS_STR_LEN ARRAY_SIZE(ixgbe_priv_flags_strings)
|
|
|
|
+
|
|
/* currently supported speeds for 10G */
|
|
/* currently supported speeds for 10G */
|
|
#define ADVRTSD_MSK_10G (SUPPORTED_10000baseT_Full | \
|
|
#define ADVRTSD_MSK_10G (SUPPORTED_10000baseT_Full | \
|
|
SUPPORTED_10000baseKX4_Full | \
|
|
SUPPORTED_10000baseKX4_Full | \
|
|
@@ -1001,6 +1008,8 @@ static void ixgbe_get_drvinfo(struct net_device *netdev,
|
|
|
|
|
|
strlcpy(drvinfo->bus_info, pci_name(adapter->pdev),
|
|
strlcpy(drvinfo->bus_info, pci_name(adapter->pdev),
|
|
sizeof(drvinfo->bus_info));
|
|
sizeof(drvinfo->bus_info));
|
|
|
|
+
|
|
|
|
+ drvinfo->n_priv_flags = IXGBE_PRIV_FLAGS_STR_LEN;
|
|
}
|
|
}
|
|
|
|
|
|
static void ixgbe_get_ringparam(struct net_device *netdev,
|
|
static void ixgbe_get_ringparam(struct net_device *netdev,
|
|
@@ -1140,6 +1149,8 @@ static int ixgbe_get_sset_count(struct net_device *netdev, int sset)
|
|
return IXGBE_TEST_LEN;
|
|
return IXGBE_TEST_LEN;
|
|
case ETH_SS_STATS:
|
|
case ETH_SS_STATS:
|
|
return IXGBE_STATS_LEN;
|
|
return IXGBE_STATS_LEN;
|
|
|
|
+ case ETH_SS_PRIV_FLAGS:
|
|
|
|
+ return IXGBE_PRIV_FLAGS_STR_LEN;
|
|
default:
|
|
default:
|
|
return -EOPNOTSUPP;
|
|
return -EOPNOTSUPP;
|
|
}
|
|
}
|
|
@@ -1264,6 +1275,9 @@ static void ixgbe_get_strings(struct net_device *netdev, u32 stringset,
|
|
}
|
|
}
|
|
/* BUG_ON(p - data != IXGBE_STATS_LEN * ETH_GSTRING_LEN); */
|
|
/* BUG_ON(p - data != IXGBE_STATS_LEN * ETH_GSTRING_LEN); */
|
|
break;
|
|
break;
|
|
|
|
+ case ETH_SS_PRIV_FLAGS:
|
|
|
|
+ memcpy(data, ixgbe_priv_flags_strings,
|
|
|
|
+ IXGBE_PRIV_FLAGS_STR_LEN * ETH_GSTRING_LEN);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -3345,6 +3359,37 @@ static int ixgbe_set_eee(struct net_device *netdev, struct ethtool_eee *edata)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static u32 ixgbe_get_priv_flags(struct net_device *netdev)
|
|
|
|
+{
|
|
|
|
+ struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
|
|
|
+ u32 priv_flags = 0;
|
|
|
|
+
|
|
|
|
+ if (adapter->flags2 & IXGBE_FLAG2_RX_LEGACY)
|
|
|
|
+ priv_flags |= IXGBE_PRIV_FLAGS_LEGACY_RX;
|
|
|
|
+
|
|
|
|
+ return priv_flags;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int ixgbe_set_priv_flags(struct net_device *netdev, u32 priv_flags)
|
|
|
|
+{
|
|
|
|
+ struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
|
|
|
+ unsigned int flags2 = adapter->flags2;
|
|
|
|
+
|
|
|
|
+ flags2 &= ~IXGBE_FLAG2_RX_LEGACY;
|
|
|
|
+ if (priv_flags & IXGBE_PRIV_FLAGS_LEGACY_RX)
|
|
|
|
+ flags2 |= IXGBE_FLAG2_RX_LEGACY;
|
|
|
|
+
|
|
|
|
+ if (flags2 != adapter->flags2) {
|
|
|
|
+ adapter->flags2 = flags2;
|
|
|
|
+
|
|
|
|
+ /* reset interface to repopulate queues */
|
|
|
|
+ if (netif_running(netdev))
|
|
|
|
+ ixgbe_reinit_locked(adapter);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
static const struct ethtool_ops ixgbe_ethtool_ops = {
|
|
static const struct ethtool_ops ixgbe_ethtool_ops = {
|
|
.get_settings = ixgbe_get_settings,
|
|
.get_settings = ixgbe_get_settings,
|
|
.set_settings = ixgbe_set_settings,
|
|
.set_settings = ixgbe_set_settings,
|
|
@@ -3381,6 +3426,8 @@ static const struct ethtool_ops ixgbe_ethtool_ops = {
|
|
.set_eee = ixgbe_set_eee,
|
|
.set_eee = ixgbe_set_eee,
|
|
.get_channels = ixgbe_get_channels,
|
|
.get_channels = ixgbe_get_channels,
|
|
.set_channels = ixgbe_set_channels,
|
|
.set_channels = ixgbe_set_channels,
|
|
|
|
+ .get_priv_flags = ixgbe_get_priv_flags,
|
|
|
|
+ .set_priv_flags = ixgbe_set_priv_flags,
|
|
.get_ts_info = ixgbe_get_ts_info,
|
|
.get_ts_info = ixgbe_get_ts_info,
|
|
.get_module_info = ixgbe_get_module_info,
|
|
.get_module_info = ixgbe_get_module_info,
|
|
.get_module_eeprom = ixgbe_get_module_eeprom,
|
|
.get_module_eeprom = ixgbe_get_module_eeprom,
|