提交 f04ea74e 编写于 作者: M Michał Mirosław 提交者: David S. Miller

ixgb: finish conversion to ndo_fix_features

Finish conversion to unified ethtool ops: convert get_flags.
Signed-off-by: NMichał Mirosław <mirq-linux@rere.qmqm.pl>
Tested-by: NAaron Brown <aaron.f.brown@intel.com>
Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 ac5ac789
...@@ -634,43 +634,6 @@ ixgb_get_strings(struct net_device *netdev, u32 stringset, u8 *data) ...@@ -634,43 +634,6 @@ ixgb_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
} }
} }
static int ixgb_set_flags(struct net_device *netdev, u32 data)
{
struct ixgb_adapter *adapter = netdev_priv(netdev);
bool need_reset;
int rc;
/*
* Tx VLAN insertion does not work per HW design when Rx stripping is
* disabled. Disable txvlan when rxvlan is turned off, and enable
* rxvlan when txvlan is turned on.
*/
if (!(data & ETH_FLAG_RXVLAN) &&
(netdev->features & NETIF_F_HW_VLAN_TX))
data &= ~ETH_FLAG_TXVLAN;
else if (data & ETH_FLAG_TXVLAN)
data |= ETH_FLAG_RXVLAN;
need_reset = (data & ETH_FLAG_RXVLAN) !=
(netdev->features & NETIF_F_HW_VLAN_RX);
rc = ethtool_op_set_flags(netdev, data, ETH_FLAG_RXVLAN |
ETH_FLAG_TXVLAN);
if (rc)
return rc;
if (need_reset) {
if (netif_running(netdev)) {
ixgb_down(adapter, true);
ixgb_up(adapter);
ixgb_set_speed_duplex(netdev);
} else
ixgb_reset(adapter);
}
return 0;
}
static const struct ethtool_ops ixgb_ethtool_ops = { static const struct ethtool_ops ixgb_ethtool_ops = {
.get_settings = ixgb_get_settings, .get_settings = ixgb_get_settings,
.set_settings = ixgb_set_settings, .set_settings = ixgb_set_settings,
...@@ -691,8 +654,6 @@ static const struct ethtool_ops ixgb_ethtool_ops = { ...@@ -691,8 +654,6 @@ static const struct ethtool_ops ixgb_ethtool_ops = {
.set_phys_id = ixgb_set_phys_id, .set_phys_id = ixgb_set_phys_id,
.get_sset_count = ixgb_get_sset_count, .get_sset_count = ixgb_get_sset_count,
.get_ethtool_stats = ixgb_get_ethtool_stats, .get_ethtool_stats = ixgb_get_ethtool_stats,
.get_flags = ethtool_op_get_flags,
.set_flags = ixgb_set_flags,
}; };
void ixgb_set_ethtool_ops(struct net_device *netdev) void ixgb_set_ethtool_ops(struct net_device *netdev)
......
...@@ -325,13 +325,26 @@ ixgb_reset(struct ixgb_adapter *adapter) ...@@ -325,13 +325,26 @@ ixgb_reset(struct ixgb_adapter *adapter)
} }
} }
static u32
ixgb_fix_features(struct net_device *netdev, u32 features)
{
/*
* Tx VLAN insertion does not work per HW design when Rx stripping is
* disabled.
*/
if (!(features & NETIF_F_HW_VLAN_RX))
features &= ~NETIF_F_HW_VLAN_TX;
return features;
}
static int static int
ixgb_set_features(struct net_device *netdev, u32 features) ixgb_set_features(struct net_device *netdev, u32 features)
{ {
struct ixgb_adapter *adapter = netdev_priv(netdev); struct ixgb_adapter *adapter = netdev_priv(netdev);
u32 changed = features ^ netdev->features; u32 changed = features ^ netdev->features;
if (!(changed & NETIF_F_RXCSUM)) if (!(changed & (NETIF_F_RXCSUM|NETIF_F_HW_VLAN_RX)))
return 0; return 0;
adapter->rx_csum = !!(features & NETIF_F_RXCSUM); adapter->rx_csum = !!(features & NETIF_F_RXCSUM);
...@@ -362,6 +375,7 @@ static const struct net_device_ops ixgb_netdev_ops = { ...@@ -362,6 +375,7 @@ static const struct net_device_ops ixgb_netdev_ops = {
#ifdef CONFIG_NET_POLL_CONTROLLER #ifdef CONFIG_NET_POLL_CONTROLLER
.ndo_poll_controller = ixgb_netpoll, .ndo_poll_controller = ixgb_netpoll,
#endif #endif
.ndo_fix_features = ixgb_fix_features,
.ndo_set_features = ixgb_set_features, .ndo_set_features = ixgb_set_features,
}; };
...@@ -464,10 +478,10 @@ ixgb_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -464,10 +478,10 @@ ixgb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
netdev->hw_features = NETIF_F_SG | netdev->hw_features = NETIF_F_SG |
NETIF_F_TSO | NETIF_F_TSO |
NETIF_F_HW_CSUM; NETIF_F_HW_CSUM |
netdev->features = netdev->hw_features |
NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_TX |
NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_RX;
netdev->features = netdev->hw_features |
NETIF_F_HW_VLAN_FILTER; NETIF_F_HW_VLAN_FILTER;
netdev->hw_features |= NETIF_F_RXCSUM; netdev->hw_features |= NETIF_F_RXCSUM;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册