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;
|
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)
|
static u32 e1000_get_msglevel(struct net_device *netdev)
|
||||||
{
|
{
|
||||||
struct e1000_adapter *adapter = netdev_priv(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,
|
.set_ringparam = e1000_set_ringparam,
|
||||||
.get_pauseparam = e1000_get_pauseparam,
|
.get_pauseparam = e1000_get_pauseparam,
|
||||||
.set_pauseparam = e1000_set_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,
|
.self_test = e1000_diag_test,
|
||||||
.get_strings = e1000_get_strings,
|
.get_strings = e1000_get_strings,
|
||||||
.set_phys_id = e1000_set_phys_id,
|
.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 = {
|
static const struct net_device_ops e1000_netdev_ops = {
|
||||||
.ndo_open = e1000_open,
|
.ndo_open = e1000_open,
|
||||||
.ndo_stop = e1000_close,
|
.ndo_stop = e1000_close,
|
||||||
|
@ -815,6 +833,7 @@ static const struct net_device_ops e1000_netdev_ops = {
|
||||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||||
.ndo_poll_controller = e1000_netpoll,
|
.ndo_poll_controller = e1000_netpoll,
|
||||||
#endif
|
#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) {
|
if (hw->mac_type >= e1000_82543) {
|
||||||
netdev->features = NETIF_F_SG |
|
netdev->hw_features = NETIF_F_SG |
|
||||||
NETIF_F_HW_CSUM |
|
NETIF_F_HW_CSUM;
|
||||||
NETIF_F_HW_VLAN_TX |
|
netdev->features = NETIF_F_HW_VLAN_TX |
|
||||||
NETIF_F_HW_VLAN_RX |
|
NETIF_F_HW_VLAN_RX |
|
||||||
NETIF_F_HW_VLAN_FILTER;
|
NETIF_F_HW_VLAN_FILTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((hw->mac_type >= e1000_82544) &&
|
if ((hw->mac_type >= e1000_82544) &&
|
||||||
(hw->mac_type != e1000_82547))
|
(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) {
|
if (pci_using_dac) {
|
||||||
netdev->features |= NETIF_F_HIGHDMA;
|
netdev->features |= NETIF_F_HIGHDMA;
|
||||||
|
|
Loading…
Reference in New Issue