mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 21:02:19 +00:00
e1000e: convert to netdev features/hw_features API
Private rx_csum flags are now duplicate of netdev->features & NETIF_F_RXCSUM. Remove those duplicates and use the net_device_ops ndo_set_features. This is based on the original patch submitted by Michał Mirosław <mirq-linux@rere.qmqm.pl> Cc: Michał Mirosław <mirq-linux@rere.qmqm.pl> Signed-off-by: Bruce Allan <bruce.w.allan@intel.com> 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
3cd0999d13
commit
dc22129471
@ -1498,7 +1498,6 @@ struct e1000_info e1000_es2_info = {
|
||||
| FLAG_HAS_JUMBO_FRAMES
|
||||
| FLAG_HAS_WOL
|
||||
| FLAG_APME_IN_CTRL3
|
||||
| FLAG_RX_CSUM_ENABLED
|
||||
| FLAG_HAS_CTRLEXT_ON_LOAD
|
||||
| FLAG_RX_NEEDS_RESTART /* errata */
|
||||
| FLAG_TARC_SET_BIT_ZERO /* errata */
|
||||
|
@ -2019,7 +2019,6 @@ struct e1000_info e1000_82571_info = {
|
||||
| FLAG_HAS_JUMBO_FRAMES
|
||||
| FLAG_HAS_WOL
|
||||
| FLAG_APME_IN_CTRL3
|
||||
| FLAG_RX_CSUM_ENABLED
|
||||
| FLAG_HAS_CTRLEXT_ON_LOAD
|
||||
| FLAG_HAS_SMART_POWER_DOWN
|
||||
| FLAG_RESET_OVERWRITES_LAA /* errata */
|
||||
@ -2041,7 +2040,6 @@ struct e1000_info e1000_82572_info = {
|
||||
| FLAG_HAS_JUMBO_FRAMES
|
||||
| FLAG_HAS_WOL
|
||||
| FLAG_APME_IN_CTRL3
|
||||
| FLAG_RX_CSUM_ENABLED
|
||||
| FLAG_HAS_CTRLEXT_ON_LOAD
|
||||
| FLAG_TARC_SPEED_MODE_BIT, /* errata */
|
||||
.flags2 = FLAG2_DISABLE_ASPM_L1 /* errata 13 */
|
||||
@ -2059,7 +2057,6 @@ struct e1000_info e1000_82573_info = {
|
||||
.flags = FLAG_HAS_HW_VLAN_FILTER
|
||||
| FLAG_HAS_WOL
|
||||
| FLAG_APME_IN_CTRL3
|
||||
| FLAG_RX_CSUM_ENABLED
|
||||
| FLAG_HAS_SMART_POWER_DOWN
|
||||
| FLAG_HAS_AMT
|
||||
| FLAG_HAS_SWSM_ON_LOAD,
|
||||
@ -2080,7 +2077,6 @@ struct e1000_info e1000_82574_info = {
|
||||
| FLAG_HAS_JUMBO_FRAMES
|
||||
| FLAG_HAS_WOL
|
||||
| FLAG_APME_IN_CTRL3
|
||||
| FLAG_RX_CSUM_ENABLED
|
||||
| FLAG_HAS_SMART_POWER_DOWN
|
||||
| FLAG_HAS_AMT
|
||||
| FLAG_HAS_CTRLEXT_ON_LOAD,
|
||||
@ -2100,7 +2096,6 @@ struct e1000_info e1000_82583_info = {
|
||||
.flags = FLAG_HAS_HW_VLAN_FILTER
|
||||
| FLAG_HAS_WOL
|
||||
| FLAG_APME_IN_CTRL3
|
||||
| FLAG_RX_CSUM_ENABLED
|
||||
| FLAG_HAS_SMART_POWER_DOWN
|
||||
| FLAG_HAS_AMT
|
||||
| FLAG_HAS_JUMBO_FRAMES
|
||||
|
@ -440,12 +440,11 @@ struct e1000_info {
|
||||
#define FLAG_LSC_GIG_SPEED_DROP (1 << 25)
|
||||
#define FLAG_SMART_POWER_DOWN (1 << 26)
|
||||
#define FLAG_MSI_ENABLED (1 << 27)
|
||||
#define FLAG_RX_CSUM_ENABLED (1 << 28)
|
||||
/* reserved (1 << 28) */
|
||||
#define FLAG_TSO_FORCE (1 << 29)
|
||||
#define FLAG_RX_RESTART_NOW (1 << 30)
|
||||
#define FLAG_MSI_TEST_FAILED (1 << 31)
|
||||
|
||||
/* CRC Stripping defines */
|
||||
#define FLAG2_CRC_STRIPPING (1 << 0)
|
||||
#define FLAG2_HAS_PHY_WAKEUP (1 << 1)
|
||||
#define FLAG2_IS_DISCARDING (1 << 2)
|
||||
|
@ -367,59 +367,6 @@ out:
|
||||
return retval;
|
||||
}
|
||||
|
||||
static u32 e1000_get_rx_csum(struct net_device *netdev)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
return adapter->flags & FLAG_RX_CSUM_ENABLED;
|
||||
}
|
||||
|
||||
static int e1000_set_rx_csum(struct net_device *netdev, u32 data)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
if (data)
|
||||
adapter->flags |= FLAG_RX_CSUM_ENABLED;
|
||||
else
|
||||
adapter->flags &= ~FLAG_RX_CSUM_ENABLED;
|
||||
|
||||
if (netif_running(netdev))
|
||||
e1000e_reinit_locked(adapter);
|
||||
else
|
||||
e1000e_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)
|
||||
{
|
||||
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);
|
||||
|
||||
if (data) {
|
||||
netdev->features |= NETIF_F_TSO;
|
||||
netdev->features |= NETIF_F_TSO6;
|
||||
} else {
|
||||
netdev->features &= ~NETIF_F_TSO;
|
||||
netdev->features &= ~NETIF_F_TSO6;
|
||||
}
|
||||
|
||||
adapter->flags |= FLAG_TSO_FORCE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u32 e1000_get_msglevel(struct net_device *netdev)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
@ -2014,31 +1961,6 @@ static void e1000_get_strings(struct net_device *netdev, u32 stringset,
|
||||
}
|
||||
}
|
||||
|
||||
static int e1000e_set_flags(struct net_device *netdev, u32 data)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
bool need_reset = false;
|
||||
int rc;
|
||||
|
||||
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))
|
||||
e1000e_reinit_locked(adapter);
|
||||
else
|
||||
e1000e_reset(adapter);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct ethtool_ops e1000_ethtool_ops = {
|
||||
.get_settings = e1000_get_settings,
|
||||
.set_settings = e1000_set_settings,
|
||||
@ -2058,14 +1980,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,
|
||||
.get_sg = ethtool_op_get_sg,
|
||||
.set_sg = ethtool_op_set_sg,
|
||||
.get_tso = ethtool_op_get_tso,
|
||||
.set_tso = e1000_set_tso,
|
||||
.self_test = e1000_diag_test,
|
||||
.get_strings = e1000_get_strings,
|
||||
.set_phys_id = e1000_set_phys_id,
|
||||
@ -2073,8 +1987,6 @@ static const struct ethtool_ops e1000_ethtool_ops = {
|
||||
.get_sset_count = e1000e_get_sset_count,
|
||||
.get_coalesce = e1000_get_coalesce,
|
||||
.set_coalesce = e1000_set_coalesce,
|
||||
.get_flags = ethtool_op_get_flags,
|
||||
.set_flags = e1000e_set_flags,
|
||||
};
|
||||
|
||||
void e1000e_set_ethtool_ops(struct net_device *netdev)
|
||||
|
@ -4058,7 +4058,6 @@ struct e1000_info e1000_ich8_info = {
|
||||
.mac = e1000_ich8lan,
|
||||
.flags = FLAG_HAS_WOL
|
||||
| FLAG_IS_ICH
|
||||
| FLAG_RX_CSUM_ENABLED
|
||||
| FLAG_HAS_CTRLEXT_ON_LOAD
|
||||
| FLAG_HAS_AMT
|
||||
| FLAG_HAS_FLASH
|
||||
@ -4076,7 +4075,6 @@ struct e1000_info e1000_ich9_info = {
|
||||
.flags = FLAG_HAS_JUMBO_FRAMES
|
||||
| FLAG_IS_ICH
|
||||
| FLAG_HAS_WOL
|
||||
| FLAG_RX_CSUM_ENABLED
|
||||
| FLAG_HAS_CTRLEXT_ON_LOAD
|
||||
| FLAG_HAS_AMT
|
||||
| FLAG_HAS_ERT
|
||||
@ -4095,7 +4093,6 @@ struct e1000_info e1000_ich10_info = {
|
||||
.flags = FLAG_HAS_JUMBO_FRAMES
|
||||
| FLAG_IS_ICH
|
||||
| FLAG_HAS_WOL
|
||||
| FLAG_RX_CSUM_ENABLED
|
||||
| FLAG_HAS_CTRLEXT_ON_LOAD
|
||||
| FLAG_HAS_AMT
|
||||
| FLAG_HAS_ERT
|
||||
@ -4113,7 +4110,6 @@ struct e1000_info e1000_pch_info = {
|
||||
.mac = e1000_pchlan,
|
||||
.flags = FLAG_IS_ICH
|
||||
| FLAG_HAS_WOL
|
||||
| FLAG_RX_CSUM_ENABLED
|
||||
| FLAG_HAS_CTRLEXT_ON_LOAD
|
||||
| FLAG_HAS_AMT
|
||||
| FLAG_HAS_FLASH
|
||||
@ -4133,7 +4129,6 @@ struct e1000_info e1000_pch2_info = {
|
||||
.mac = e1000_pch2lan,
|
||||
.flags = FLAG_IS_ICH
|
||||
| FLAG_HAS_WOL
|
||||
| FLAG_RX_CSUM_ENABLED
|
||||
| FLAG_HAS_CTRLEXT_ON_LOAD
|
||||
| FLAG_HAS_AMT
|
||||
| FLAG_HAS_FLASH
|
||||
|
@ -3069,7 +3069,7 @@ static void e1000_configure_rx(struct e1000_adapter *adapter)
|
||||
|
||||
/* Enable Receive Checksum Offload for TCP and UDP */
|
||||
rxcsum = er32(RXCSUM);
|
||||
if (adapter->flags & FLAG_RX_CSUM_ENABLED) {
|
||||
if (adapter->netdev->features & NETIF_F_RXCSUM) {
|
||||
rxcsum |= E1000_RXCSUM_TUOFL;
|
||||
|
||||
/*
|
||||
@ -5860,6 +5860,26 @@ static void e1000_eeprom_checks(struct e1000_adapter *adapter)
|
||||
}
|
||||
}
|
||||
|
||||
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_TSO | NETIF_F_TSO6))
|
||||
adapter->flags |= FLAG_TSO_FORCE;
|
||||
|
||||
if (!(changed & (NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_TX |
|
||||
NETIF_F_RXCSUM)))
|
||||
return 0;
|
||||
|
||||
if (netif_running(netdev))
|
||||
e1000e_reinit_locked(adapter);
|
||||
else
|
||||
e1000e_reset(adapter);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct net_device_ops e1000e_netdev_ops = {
|
||||
.ndo_open = e1000_open,
|
||||
.ndo_stop = e1000_close,
|
||||
@ -5877,6 +5897,7 @@ static const struct net_device_ops e1000e_netdev_ops = {
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
.ndo_poll_controller = e1000_netpoll,
|
||||
#endif
|
||||
.ndo_set_features = e1000_set_features,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -6036,21 +6057,25 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
|
||||
if (e1000_check_reset_block(&adapter->hw))
|
||||
e_info("PHY reset is blocked due to SOL/IDER session.\n");
|
||||
|
||||
netdev->features = NETIF_F_SG |
|
||||
NETIF_F_HW_CSUM |
|
||||
NETIF_F_HW_VLAN_TX |
|
||||
NETIF_F_HW_VLAN_RX;
|
||||
/* Set initial default active device features */
|
||||
netdev->features = (NETIF_F_SG |
|
||||
NETIF_F_HW_VLAN_RX |
|
||||
NETIF_F_HW_VLAN_TX |
|
||||
NETIF_F_TSO |
|
||||
NETIF_F_TSO6 |
|
||||
NETIF_F_RXCSUM |
|
||||
NETIF_F_HW_CSUM);
|
||||
|
||||
/* Set user-changeable features (subset of all device features) */
|
||||
netdev->hw_features = netdev->features;
|
||||
|
||||
if (adapter->flags & FLAG_HAS_HW_VLAN_FILTER)
|
||||
netdev->features |= NETIF_F_HW_VLAN_FILTER;
|
||||
|
||||
netdev->features |= NETIF_F_TSO;
|
||||
netdev->features |= NETIF_F_TSO6;
|
||||
|
||||
netdev->vlan_features |= NETIF_F_TSO;
|
||||
netdev->vlan_features |= NETIF_F_TSO6;
|
||||
netdev->vlan_features |= NETIF_F_HW_CSUM;
|
||||
netdev->vlan_features |= NETIF_F_SG;
|
||||
netdev->vlan_features |= (NETIF_F_SG |
|
||||
NETIF_F_TSO |
|
||||
NETIF_F_TSO6 |
|
||||
NETIF_F_HW_CSUM);
|
||||
|
||||
if (pci_using_dac) {
|
||||
netdev->features |= NETIF_F_HIGHDMA;
|
||||
|
Loading…
Reference in New Issue
Block a user