Skip to content

Commit d7b5765

Browse files
osctobedavem330
authored andcommitted
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>
1 parent fb50793 commit d7b5765

File tree

2 files changed

+19
-60
lines changed

2 files changed

+19
-60
lines changed

drivers/net/jme.c

Lines changed: 19 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -2230,17 +2230,9 @@ jme_change_mtu(struct net_device *netdev, int new_mtu)
22302230
jme_restart_rx_engine(jme);
22312231
}
22322232

2233-
if (new_mtu > 1900) {
2234-
netdev->features &= ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
2235-
NETIF_F_TSO | NETIF_F_TSO6);
2236-
} else {
2237-
if (test_bit(JME_FLAG_TXCSUM, &jme->flags))
2238-
netdev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
2239-
if (test_bit(JME_FLAG_TSO, &jme->flags))
2240-
netdev->features |= NETIF_F_TSO | NETIF_F_TSO6;
2241-
}
2242-
22432233
netdev->mtu = new_mtu;
2234+
netdev_update_features(netdev);
2235+
22442236
jme_reset_link(jme);
22452237

22462238
return 0;
@@ -2640,19 +2632,20 @@ jme_set_msglevel(struct net_device *netdev, u32 value)
26402632
}
26412633

26422634
static u32
2643-
jme_get_rx_csum(struct net_device *netdev)
2635+
jme_fix_features(struct net_device *netdev, u32 features)
26442636
{
2645-
struct jme_adapter *jme = netdev_priv(netdev);
2646-
return jme->reg_rxmcs & RXMCS_CHECKSUM;
2637+
if (netdev->mtu > 1900)
2638+
features &= ~(NETIF_F_ALL_TSO | NETIF_F_ALL_CSUM);
2639+
return features;
26472640
}
26482641

26492642
static int
2650-
jme_set_rx_csum(struct net_device *netdev, u32 on)
2643+
jme_set_features(struct net_device *netdev, u32 features)
26512644
{
26522645
struct jme_adapter *jme = netdev_priv(netdev);
26532646

26542647
spin_lock_bh(&jme->rxmcs_lock);
2655-
if (on)
2648+
if (features & NETIF_F_RXCSUM)
26562649
jme->reg_rxmcs |= RXMCS_CHECKSUM;
26572650
else
26582651
jme->reg_rxmcs &= ~RXMCS_CHECKSUM;
@@ -2662,42 +2655,6 @@ jme_set_rx_csum(struct net_device *netdev, u32 on)
26622655
return 0;
26632656
}
26642657

2665-
static int
2666-
jme_set_tx_csum(struct net_device *netdev, u32 on)
2667-
{
2668-
struct jme_adapter *jme = netdev_priv(netdev);
2669-
2670-
if (on) {
2671-
set_bit(JME_FLAG_TXCSUM, &jme->flags);
2672-
if (netdev->mtu <= 1900)
2673-
netdev->features |=
2674-
NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
2675-
} else {
2676-
clear_bit(JME_FLAG_TXCSUM, &jme->flags);
2677-
netdev->features &=
2678-
~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM);
2679-
}
2680-
2681-
return 0;
2682-
}
2683-
2684-
static int
2685-
jme_set_tso(struct net_device *netdev, u32 on)
2686-
{
2687-
struct jme_adapter *jme = netdev_priv(netdev);
2688-
2689-
if (on) {
2690-
set_bit(JME_FLAG_TSO, &jme->flags);
2691-
if (netdev->mtu <= 1900)
2692-
netdev->features |= NETIF_F_TSO | NETIF_F_TSO6;
2693-
} else {
2694-
clear_bit(JME_FLAG_TSO, &jme->flags);
2695-
netdev->features &= ~(NETIF_F_TSO | NETIF_F_TSO6);
2696-
}
2697-
2698-
return 0;
2699-
}
2700-
27012658
static int
27022659
jme_nway_reset(struct net_device *netdev)
27032660
{
@@ -2839,11 +2796,6 @@ static const struct ethtool_ops jme_ethtool_ops = {
28392796
.get_link = jme_get_link,
28402797
.get_msglevel = jme_get_msglevel,
28412798
.set_msglevel = jme_set_msglevel,
2842-
.get_rx_csum = jme_get_rx_csum,
2843-
.set_rx_csum = jme_set_rx_csum,
2844-
.set_tx_csum = jme_set_tx_csum,
2845-
.set_tso = jme_set_tso,
2846-
.set_sg = ethtool_op_set_sg,
28472799
.nway_reset = jme_nway_reset,
28482800
.get_eeprom_len = jme_get_eeprom_len,
28492801
.get_eeprom = jme_get_eeprom,
@@ -2903,6 +2855,8 @@ static const struct net_device_ops jme_netdev_ops = {
29032855
.ndo_change_mtu = jme_change_mtu,
29042856
.ndo_tx_timeout = jme_tx_timeout,
29052857
.ndo_vlan_rx_register = jme_vlan_rx_register,
2858+
.ndo_fix_features = jme_fix_features,
2859+
.ndo_set_features = jme_set_features,
29062860
};
29072861

29082862
static int __devinit
@@ -2957,6 +2911,12 @@ jme_init_one(struct pci_dev *pdev,
29572911
netdev->netdev_ops = &jme_netdev_ops;
29582912
netdev->ethtool_ops = &jme_ethtool_ops;
29592913
netdev->watchdog_timeo = TX_TIMEOUT;
2914+
netdev->hw_features = NETIF_F_IP_CSUM |
2915+
NETIF_F_IPV6_CSUM |
2916+
NETIF_F_SG |
2917+
NETIF_F_TSO |
2918+
NETIF_F_TSO6 |
2919+
NETIF_F_RXCSUM;
29602920
netdev->features = NETIF_F_IP_CSUM |
29612921
NETIF_F_IPV6_CSUM |
29622922
NETIF_F_SG |
@@ -3040,8 +3000,9 @@ jme_init_one(struct pci_dev *pdev,
30403000
jme->reg_txpfc = 0;
30413001
jme->reg_pmcs = PMCS_MFEN;
30423002
jme->reg_gpreg1 = GPREG1_DEFAULT;
3043-
set_bit(JME_FLAG_TXCSUM, &jme->flags);
3044-
set_bit(JME_FLAG_TSO, &jme->flags);
3003+
3004+
if (jme->reg_rxmcs & RXMCS_CHECKSUM)
3005+
netdev->features |= NETIF_F_RXCSUM;
30453006

30463007
/*
30473008
* Get Max Read Req Size from PCI Config Space

drivers/net/jme.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -468,8 +468,6 @@ struct jme_adapter {
468468
enum jme_flags_bits {
469469
JME_FLAG_MSI = 1,
470470
JME_FLAG_SSET = 2,
471-
JME_FLAG_TXCSUM = 3,
472-
JME_FLAG_TSO = 4,
473471
JME_FLAG_POLL = 5,
474472
JME_FLAG_SHUTDOWN = 6,
475473
};

0 commit comments

Comments
 (0)