jme: convert offload constraints to ndo_fix_features
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
fb507934fd
commit
d7b5765456
@ -2230,17 +2230,9 @@ jme_change_mtu(struct net_device *netdev, int new_mtu)
|
|||||||
jme_restart_rx_engine(jme);
|
jme_restart_rx_engine(jme);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_mtu > 1900) {
|
|
||||||
netdev->features &= ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
|
|
||||||
NETIF_F_TSO | NETIF_F_TSO6);
|
|
||||||
} else {
|
|
||||||
if (test_bit(JME_FLAG_TXCSUM, &jme->flags))
|
|
||||||
netdev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
|
|
||||||
if (test_bit(JME_FLAG_TSO, &jme->flags))
|
|
||||||
netdev->features |= NETIF_F_TSO | NETIF_F_TSO6;
|
|
||||||
}
|
|
||||||
|
|
||||||
netdev->mtu = new_mtu;
|
netdev->mtu = new_mtu;
|
||||||
|
netdev_update_features(netdev);
|
||||||
|
|
||||||
jme_reset_link(jme);
|
jme_reset_link(jme);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -2640,19 +2632,20 @@ jme_set_msglevel(struct net_device *netdev, u32 value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static u32
|
static u32
|
||||||
jme_get_rx_csum(struct net_device *netdev)
|
jme_fix_features(struct net_device *netdev, u32 features)
|
||||||
{
|
{
|
||||||
struct jme_adapter *jme = netdev_priv(netdev);
|
if (netdev->mtu > 1900)
|
||||||
return jme->reg_rxmcs & RXMCS_CHECKSUM;
|
features &= ~(NETIF_F_ALL_TSO | NETIF_F_ALL_CSUM);
|
||||||
|
return features;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
jme_set_rx_csum(struct net_device *netdev, u32 on)
|
jme_set_features(struct net_device *netdev, u32 features)
|
||||||
{
|
{
|
||||||
struct jme_adapter *jme = netdev_priv(netdev);
|
struct jme_adapter *jme = netdev_priv(netdev);
|
||||||
|
|
||||||
spin_lock_bh(&jme->rxmcs_lock);
|
spin_lock_bh(&jme->rxmcs_lock);
|
||||||
if (on)
|
if (features & NETIF_F_RXCSUM)
|
||||||
jme->reg_rxmcs |= RXMCS_CHECKSUM;
|
jme->reg_rxmcs |= RXMCS_CHECKSUM;
|
||||||
else
|
else
|
||||||
jme->reg_rxmcs &= ~RXMCS_CHECKSUM;
|
jme->reg_rxmcs &= ~RXMCS_CHECKSUM;
|
||||||
@ -2662,42 +2655,6 @@ jme_set_rx_csum(struct net_device *netdev, u32 on)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
jme_set_tx_csum(struct net_device *netdev, u32 on)
|
|
||||||
{
|
|
||||||
struct jme_adapter *jme = netdev_priv(netdev);
|
|
||||||
|
|
||||||
if (on) {
|
|
||||||
set_bit(JME_FLAG_TXCSUM, &jme->flags);
|
|
||||||
if (netdev->mtu <= 1900)
|
|
||||||
netdev->features |=
|
|
||||||
NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
|
|
||||||
} else {
|
|
||||||
clear_bit(JME_FLAG_TXCSUM, &jme->flags);
|
|
||||||
netdev->features &=
|
|
||||||
~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
jme_set_tso(struct net_device *netdev, u32 on)
|
|
||||||
{
|
|
||||||
struct jme_adapter *jme = netdev_priv(netdev);
|
|
||||||
|
|
||||||
if (on) {
|
|
||||||
set_bit(JME_FLAG_TSO, &jme->flags);
|
|
||||||
if (netdev->mtu <= 1900)
|
|
||||||
netdev->features |= NETIF_F_TSO | NETIF_F_TSO6;
|
|
||||||
} else {
|
|
||||||
clear_bit(JME_FLAG_TSO, &jme->flags);
|
|
||||||
netdev->features &= ~(NETIF_F_TSO | NETIF_F_TSO6);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
jme_nway_reset(struct net_device *netdev)
|
jme_nway_reset(struct net_device *netdev)
|
||||||
{
|
{
|
||||||
@ -2839,11 +2796,6 @@ static const struct ethtool_ops jme_ethtool_ops = {
|
|||||||
.get_link = jme_get_link,
|
.get_link = jme_get_link,
|
||||||
.get_msglevel = jme_get_msglevel,
|
.get_msglevel = jme_get_msglevel,
|
||||||
.set_msglevel = jme_set_msglevel,
|
.set_msglevel = jme_set_msglevel,
|
||||||
.get_rx_csum = jme_get_rx_csum,
|
|
||||||
.set_rx_csum = jme_set_rx_csum,
|
|
||||||
.set_tx_csum = jme_set_tx_csum,
|
|
||||||
.set_tso = jme_set_tso,
|
|
||||||
.set_sg = ethtool_op_set_sg,
|
|
||||||
.nway_reset = jme_nway_reset,
|
.nway_reset = jme_nway_reset,
|
||||||
.get_eeprom_len = jme_get_eeprom_len,
|
.get_eeprom_len = jme_get_eeprom_len,
|
||||||
.get_eeprom = jme_get_eeprom,
|
.get_eeprom = jme_get_eeprom,
|
||||||
@ -2903,6 +2855,8 @@ static const struct net_device_ops jme_netdev_ops = {
|
|||||||
.ndo_change_mtu = jme_change_mtu,
|
.ndo_change_mtu = jme_change_mtu,
|
||||||
.ndo_tx_timeout = jme_tx_timeout,
|
.ndo_tx_timeout = jme_tx_timeout,
|
||||||
.ndo_vlan_rx_register = jme_vlan_rx_register,
|
.ndo_vlan_rx_register = jme_vlan_rx_register,
|
||||||
|
.ndo_fix_features = jme_fix_features,
|
||||||
|
.ndo_set_features = jme_set_features,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __devinit
|
static int __devinit
|
||||||
@ -2957,6 +2911,12 @@ jme_init_one(struct pci_dev *pdev,
|
|||||||
netdev->netdev_ops = &jme_netdev_ops;
|
netdev->netdev_ops = &jme_netdev_ops;
|
||||||
netdev->ethtool_ops = &jme_ethtool_ops;
|
netdev->ethtool_ops = &jme_ethtool_ops;
|
||||||
netdev->watchdog_timeo = TX_TIMEOUT;
|
netdev->watchdog_timeo = TX_TIMEOUT;
|
||||||
|
netdev->hw_features = NETIF_F_IP_CSUM |
|
||||||
|
NETIF_F_IPV6_CSUM |
|
||||||
|
NETIF_F_SG |
|
||||||
|
NETIF_F_TSO |
|
||||||
|
NETIF_F_TSO6 |
|
||||||
|
NETIF_F_RXCSUM;
|
||||||
netdev->features = NETIF_F_IP_CSUM |
|
netdev->features = NETIF_F_IP_CSUM |
|
||||||
NETIF_F_IPV6_CSUM |
|
NETIF_F_IPV6_CSUM |
|
||||||
NETIF_F_SG |
|
NETIF_F_SG |
|
||||||
@ -3040,8 +3000,9 @@ jme_init_one(struct pci_dev *pdev,
|
|||||||
jme->reg_txpfc = 0;
|
jme->reg_txpfc = 0;
|
||||||
jme->reg_pmcs = PMCS_MFEN;
|
jme->reg_pmcs = PMCS_MFEN;
|
||||||
jme->reg_gpreg1 = GPREG1_DEFAULT;
|
jme->reg_gpreg1 = GPREG1_DEFAULT;
|
||||||
set_bit(JME_FLAG_TXCSUM, &jme->flags);
|
|
||||||
set_bit(JME_FLAG_TSO, &jme->flags);
|
if (jme->reg_rxmcs & RXMCS_CHECKSUM)
|
||||||
|
netdev->features |= NETIF_F_RXCSUM;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get Max Read Req Size from PCI Config Space
|
* Get Max Read Req Size from PCI Config Space
|
||||||
|
@ -468,8 +468,6 @@ struct jme_adapter {
|
|||||||
enum jme_flags_bits {
|
enum jme_flags_bits {
|
||||||
JME_FLAG_MSI = 1,
|
JME_FLAG_MSI = 1,
|
||||||
JME_FLAG_SSET = 2,
|
JME_FLAG_SSET = 2,
|
||||||
JME_FLAG_TXCSUM = 3,
|
|
||||||
JME_FLAG_TSO = 4,
|
|
||||||
JME_FLAG_POLL = 5,
|
JME_FLAG_POLL = 5,
|
||||||
JME_FLAG_SHUTDOWN = 6,
|
JME_FLAG_SHUTDOWN = 6,
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user