diff options
Diffstat (limited to 'net/core/ethtool.c')
-rw-r--r-- | net/core/ethtool.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/net/core/ethtool.c b/net/core/ethtool.c index 3e9b2c3e30f0..22efdaa76ebf 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c | |||
@@ -60,10 +60,13 @@ static const char netdev_features_strings[NETDEV_FEATURE_COUNT][ETH_GSTRING_LEN] | |||
60 | [NETIF_F_IPV6_CSUM_BIT] = "tx-checksum-ipv6", | 60 | [NETIF_F_IPV6_CSUM_BIT] = "tx-checksum-ipv6", |
61 | [NETIF_F_HIGHDMA_BIT] = "highdma", | 61 | [NETIF_F_HIGHDMA_BIT] = "highdma", |
62 | [NETIF_F_FRAGLIST_BIT] = "tx-scatter-gather-fraglist", | 62 | [NETIF_F_FRAGLIST_BIT] = "tx-scatter-gather-fraglist", |
63 | [NETIF_F_HW_VLAN_TX_BIT] = "tx-vlan-hw-insert", | 63 | [NETIF_F_HW_VLAN_CTAG_TX_BIT] = "tx-vlan-ctag-hw-insert", |
64 | 64 | ||
65 | [NETIF_F_HW_VLAN_RX_BIT] = "rx-vlan-hw-parse", | 65 | [NETIF_F_HW_VLAN_CTAG_RX_BIT] = "rx-vlan-ctag-hw-parse", |
66 | [NETIF_F_HW_VLAN_FILTER_BIT] = "rx-vlan-filter", | 66 | [NETIF_F_HW_VLAN_CTAG_FILTER_BIT] = "rx-vlan-ctag-filter", |
67 | [NETIF_F_HW_VLAN_STAG_TX_BIT] = "tx-vlan-stag-hw-insert", | ||
68 | [NETIF_F_HW_VLAN_STAG_RX_BIT] = "rx-vlan-stag-hw-parse", | ||
69 | [NETIF_F_HW_VLAN_STAG_FILTER_BIT] = "rx-vlan-stag-filter", | ||
67 | [NETIF_F_VLAN_CHALLENGED_BIT] = "vlan-challenged", | 70 | [NETIF_F_VLAN_CHALLENGED_BIT] = "vlan-challenged", |
68 | [NETIF_F_GSO_BIT] = "tx-generic-segmentation", | 71 | [NETIF_F_GSO_BIT] = "tx-generic-segmentation", |
69 | [NETIF_F_LLTX_BIT] = "tx-lockless", | 72 | [NETIF_F_LLTX_BIT] = "tx-lockless", |
@@ -78,6 +81,7 @@ static const char netdev_features_strings[NETDEV_FEATURE_COUNT][ETH_GSTRING_LEN] | |||
78 | [NETIF_F_TSO6_BIT] = "tx-tcp6-segmentation", | 81 | [NETIF_F_TSO6_BIT] = "tx-tcp6-segmentation", |
79 | [NETIF_F_FSO_BIT] = "tx-fcoe-segmentation", | 82 | [NETIF_F_FSO_BIT] = "tx-fcoe-segmentation", |
80 | [NETIF_F_GSO_GRE_BIT] = "tx-gre-segmentation", | 83 | [NETIF_F_GSO_GRE_BIT] = "tx-gre-segmentation", |
84 | [NETIF_F_GSO_UDP_TUNNEL_BIT] = "tx-udp_tnl-segmentation", | ||
81 | 85 | ||
82 | [NETIF_F_FCOE_CRC_BIT] = "tx-checksum-fcoe-crc", | 86 | [NETIF_F_FCOE_CRC_BIT] = "tx-checksum-fcoe-crc", |
83 | [NETIF_F_SCTP_CSUM_BIT] = "tx-checksum-sctp", | 87 | [NETIF_F_SCTP_CSUM_BIT] = "tx-checksum-sctp", |
@@ -266,18 +270,19 @@ static int ethtool_set_one_feature(struct net_device *dev, | |||
266 | 270 | ||
267 | #define ETH_ALL_FLAGS (ETH_FLAG_LRO | ETH_FLAG_RXVLAN | ETH_FLAG_TXVLAN | \ | 271 | #define ETH_ALL_FLAGS (ETH_FLAG_LRO | ETH_FLAG_RXVLAN | ETH_FLAG_TXVLAN | \ |
268 | ETH_FLAG_NTUPLE | ETH_FLAG_RXHASH) | 272 | ETH_FLAG_NTUPLE | ETH_FLAG_RXHASH) |
269 | #define ETH_ALL_FEATURES (NETIF_F_LRO | NETIF_F_HW_VLAN_RX | \ | 273 | #define ETH_ALL_FEATURES (NETIF_F_LRO | NETIF_F_HW_VLAN_CTAG_RX | \ |
270 | NETIF_F_HW_VLAN_TX | NETIF_F_NTUPLE | NETIF_F_RXHASH) | 274 | NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_NTUPLE | \ |
275 | NETIF_F_RXHASH) | ||
271 | 276 | ||
272 | static u32 __ethtool_get_flags(struct net_device *dev) | 277 | static u32 __ethtool_get_flags(struct net_device *dev) |
273 | { | 278 | { |
274 | u32 flags = 0; | 279 | u32 flags = 0; |
275 | 280 | ||
276 | if (dev->features & NETIF_F_LRO) flags |= ETH_FLAG_LRO; | 281 | if (dev->features & NETIF_F_LRO) flags |= ETH_FLAG_LRO; |
277 | if (dev->features & NETIF_F_HW_VLAN_RX) flags |= ETH_FLAG_RXVLAN; | 282 | if (dev->features & NETIF_F_HW_VLAN_CTAG_RX) flags |= ETH_FLAG_RXVLAN; |
278 | if (dev->features & NETIF_F_HW_VLAN_TX) flags |= ETH_FLAG_TXVLAN; | 283 | if (dev->features & NETIF_F_HW_VLAN_CTAG_TX) flags |= ETH_FLAG_TXVLAN; |
279 | if (dev->features & NETIF_F_NTUPLE) flags |= ETH_FLAG_NTUPLE; | 284 | if (dev->features & NETIF_F_NTUPLE) flags |= ETH_FLAG_NTUPLE; |
280 | if (dev->features & NETIF_F_RXHASH) flags |= ETH_FLAG_RXHASH; | 285 | if (dev->features & NETIF_F_RXHASH) flags |= ETH_FLAG_RXHASH; |
281 | 286 | ||
282 | return flags; | 287 | return flags; |
283 | } | 288 | } |
@@ -290,8 +295,8 @@ static int __ethtool_set_flags(struct net_device *dev, u32 data) | |||
290 | return -EINVAL; | 295 | return -EINVAL; |
291 | 296 | ||
292 | if (data & ETH_FLAG_LRO) features |= NETIF_F_LRO; | 297 | if (data & ETH_FLAG_LRO) features |= NETIF_F_LRO; |
293 | if (data & ETH_FLAG_RXVLAN) features |= NETIF_F_HW_VLAN_RX; | 298 | if (data & ETH_FLAG_RXVLAN) features |= NETIF_F_HW_VLAN_CTAG_RX; |
294 | if (data & ETH_FLAG_TXVLAN) features |= NETIF_F_HW_VLAN_TX; | 299 | if (data & ETH_FLAG_TXVLAN) features |= NETIF_F_HW_VLAN_CTAG_TX; |
295 | if (data & ETH_FLAG_NTUPLE) features |= NETIF_F_NTUPLE; | 300 | if (data & ETH_FLAG_NTUPLE) features |= NETIF_F_NTUPLE; |
296 | if (data & ETH_FLAG_RXHASH) features |= NETIF_F_RXHASH; | 301 | if (data & ETH_FLAG_RXHASH) features |= NETIF_F_RXHASH; |
297 | 302 | ||
@@ -1416,7 +1421,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr) | |||
1416 | void __user *useraddr = ifr->ifr_data; | 1421 | void __user *useraddr = ifr->ifr_data; |
1417 | u32 ethcmd; | 1422 | u32 ethcmd; |
1418 | int rc; | 1423 | int rc; |
1419 | u32 old_features; | 1424 | netdev_features_t old_features; |
1420 | 1425 | ||
1421 | if (!dev || !netif_device_present(dev)) | 1426 | if (!dev || !netif_device_present(dev)) |
1422 | return -ENODEV; | 1427 | return -ENODEV; |