e1000: convert to ndo_fix_features
Private rx_csum flags are now duplicate of netdev->features & NETIF_F_RXCSUM. Removing this needs deeper surgery. Things noticed: - RX csum disabled by default - HW VLAN acceleration probably can be toggled, but it's left as is - the resets on RX csum offload change can probably be avoided - there is A LOT of copy-and-pasted code here Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
9f6ec8d697
commit
e97d3207c5
|
@ -290,69 +290,6 @@ static int e1000_set_pauseparam(struct net_device *netdev,
|
|||
return retval;
|
||||
}
|
||||
|
||||
static u32 e1000_get_rx_csum(struct net_device *netdev)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
return adapter->rx_csum;
|
||||
}
|
||||
|
||||
static int e1000_set_rx_csum(struct net_device *netdev, u32 data)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
adapter->rx_csum = data;
|
||||
|
||||
if (netif_running(netdev))
|
||||
e1000_reinit_locked(adapter);
|
||||
else
|
||||
e1000_reset(adapter);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 e1000_get_tx_csum(struct net_device *netdev)
|
||||
{
|
||||
return (netdev->features & NETIF_F_HW_CSUM) != 0;
|
||||
}
|
||||
|
||||
static int e1000_set_tx_csum(struct net_device *netdev, u32 data)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
||||
if (hw->mac_type < e1000_82543) {
|
||||
if (!data)
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (data)
|
||||
netdev->features |= NETIF_F_HW_CSUM;
|
||||
else
|
||||
netdev->features &= ~NETIF_F_HW_CSUM;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int e1000_set_tso(struct net_device *netdev, u32 data)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
||||
if ((hw->mac_type < e1000_82544) ||
|
||||
(hw->mac_type == e1000_82547))
|
||||
return data ? -EINVAL : 0;
|
||||
|
||||
if (data)
|
||||
netdev->features |= NETIF_F_TSO;
|
||||
else
|
||||
netdev->features &= ~NETIF_F_TSO;
|
||||
|
||||
netdev->features &= ~NETIF_F_TSO6;
|
||||
|
||||
e_info(probe, "TSO is %s\n", data ? "Enabled" : "Disabled");
|
||||
adapter->tso_force = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 e1000_get_msglevel(struct net_device *netdev)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
|
@ -1905,12 +1842,6 @@ static const struct ethtool_ops e1000_ethtool_ops = {
|
|||
.set_ringparam = e1000_set_ringparam,
|
||||
.get_pauseparam = e1000_get_pauseparam,
|
||||
.set_pauseparam = e1000_set_pauseparam,
|
||||
.get_rx_csum = e1000_get_rx_csum,
|
||||
.set_rx_csum = e1000_set_rx_csum,
|
||||
.get_tx_csum = e1000_get_tx_csum,
|
||||
.set_tx_csum = e1000_set_tx_csum,
|
||||
.set_sg = ethtool_op_set_sg,
|
||||
.set_tso = e1000_set_tso,
|
||||
.self_test = e1000_diag_test,
|
||||
.get_strings = e1000_get_strings,
|
||||
.set_phys_id = e1000_set_phys_id,
|
||||
|
|
|
@ -797,6 +797,24 @@ static int e1000_is_need_ioport(struct pci_dev *pdev)
|
|||
}
|
||||
}
|
||||
|
||||
static int e1000_set_features(struct net_device *netdev, u32 features)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
u32 changed = features ^ netdev->features;
|
||||
|
||||
if (!(changed & NETIF_F_RXCSUM))
|
||||
return 0;
|
||||
|
||||
adapter->rx_csum = !!(features & NETIF_F_RXCSUM);
|
||||
|
||||
if (netif_running(netdev))
|
||||
e1000_reinit_locked(adapter);
|
||||
else
|
||||
e1000_reset(adapter);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct net_device_ops e1000_netdev_ops = {
|
||||
.ndo_open = e1000_open,
|
||||
.ndo_stop = e1000_close,
|
||||
|
@ -815,6 +833,7 @@ static const struct net_device_ops e1000_netdev_ops = {
|
|||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
.ndo_poll_controller = e1000_netpoll,
|
||||
#endif
|
||||
.ndo_set_features = e1000_set_features,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1016,16 +1035,19 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
|
|||
}
|
||||
|
||||
if (hw->mac_type >= e1000_82543) {
|
||||
netdev->features = NETIF_F_SG |
|
||||
NETIF_F_HW_CSUM |
|
||||
NETIF_F_HW_VLAN_TX |
|
||||
netdev->hw_features = NETIF_F_SG |
|
||||
NETIF_F_HW_CSUM;
|
||||
netdev->features = NETIF_F_HW_VLAN_TX |
|
||||
NETIF_F_HW_VLAN_RX |
|
||||
NETIF_F_HW_VLAN_FILTER;
|
||||
}
|
||||
|
||||
if ((hw->mac_type >= e1000_82544) &&
|
||||
(hw->mac_type != e1000_82547))
|
||||
netdev->features |= NETIF_F_TSO;
|
||||
netdev->hw_features |= NETIF_F_TSO;
|
||||
|
||||
netdev->features |= netdev->hw_features;
|
||||
netdev->hw_features |= NETIF_F_RXCSUM;
|
||||
|
||||
if (pci_using_dac) {
|
||||
netdev->features |= NETIF_F_HIGHDMA;
|
||||
|
|
Loading…
Reference in New Issue