From 767e5b98bfac71b25859fcc8ad5ddefa11a7e9ec Mon Sep 17 00:00:00 2001 From: =?utf8?q?Micha=C5=82=20Miros=C5=82aw?= Date: Thu, 31 Mar 2011 01:01:35 +0000 Subject: [PATCH] jme: convert offload constraints to ndo_fix_features MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Michał Mirosław Signed-off-by: David S. Miller --- jme.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ jme.h | 6 ++++++ 2 files changed, 57 insertions(+) diff --git a/jme.c b/jme.c index 9da34cb..925a1cd 100644 --- a/jme.c +++ b/jme.c @@ -2343,6 +2343,7 @@ jme_change_mtu(struct net_device *netdev, int new_mtu) jme_restart_rx_engine(jme); } +#ifndef __USE_NDO_FIX_FEATURES__ if (new_mtu > 1900) { netdev->features &= ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_TSO | NETIF_F_TSO6); @@ -2352,8 +2353,12 @@ jme_change_mtu(struct net_device *netdev, int new_mtu) if (test_bit(JME_FLAG_TSO, &jme->flags)) netdev->features |= NETIF_F_TSO | NETIF_F_TSO6; } +#endif netdev->mtu = new_mtu; +#ifdef __USE_NDO_FIX_FEATURES__ + netdev_update_features(netdev); +#endif jme_reset_link(jme); return 0; @@ -2775,6 +2780,7 @@ jme_set_msglevel(struct net_device *netdev, u32 value) jme->msg_enable = value; } +#ifndef __USE_NDO_FIX_FEATURES__ static u32 jme_get_rx_csum(struct net_device *netdev) { @@ -2833,6 +2839,31 @@ jme_set_tso(struct net_device *netdev, u32 on) return 0; } +#else +static u32 +jme_fix_features(struct net_device *netdev, u32 features) +{ + if (netdev->mtu > 1900) + features &= ~(NETIF_F_ALL_TSO | NETIF_F_ALL_CSUM); + return features; +} + +static int +jme_set_features(struct net_device *netdev, u32 features) +{ + struct jme_adapter *jme = netdev_priv(netdev); + + spin_lock_bh(&jme->rxmcs_lock); + if (features & NETIF_F_RXCSUM) + jme->reg_rxmcs |= RXMCS_CHECKSUM; + else + jme->reg_rxmcs &= ~RXMCS_CHECKSUM; + jwrite32(jme, JME_RXMCS, jme->reg_rxmcs); + spin_unlock_bh(&jme->rxmcs_lock); + + return 0; +} +#endif static int jme_nway_reset(struct net_device *netdev) @@ -2979,11 +3010,13 @@ static const struct ethtool_ops jme_ethtool_ops = { .get_link = jme_get_link, .get_msglevel = jme_get_msglevel, .set_msglevel = jme_set_msglevel, +#ifndef __USE_NDO_FIX_FEATURES__ .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, +#endif .nway_reset = jme_nway_reset, .get_eeprom_len = jme_get_eeprom_len, .get_eeprom = jme_get_eeprom, @@ -3067,6 +3100,10 @@ static const struct net_device_ops jme_netdev_ops = { .ndo_change_mtu = jme_change_mtu, .ndo_tx_timeout = jme_tx_timeout, .ndo_vlan_rx_register = jme_vlan_rx_register, +#ifdef __USE_NDO_FIX_FEATURES__ + .ndo_fix_features = jme_fix_features, + .ndo_set_features = jme_set_features, +#endif }; #endif @@ -3138,6 +3175,14 @@ jme_init_one(struct pci_dev *pdev, #endif netdev->ethtool_ops = &jme_ethtool_ops; netdev->watchdog_timeo = TX_TIMEOUT; +#ifdef __USE_NDO_FIX_FEATURES__ + netdev->hw_features = NETIF_F_IP_CSUM | + NETIF_F_IPV6_CSUM | + NETIF_F_SG | + NETIF_F_TSO | + NETIF_F_TSO6 | + NETIF_F_RXCSUM; +#endif netdev->features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG | @@ -3221,8 +3266,14 @@ jme_init_one(struct pci_dev *pdev, jme->reg_txpfc = 0; jme->reg_pmcs = PMCS_MFEN; jme->reg_gpreg1 = GPREG1_DEFAULT; +#ifndef __USE_NDO_FIX_FEATURES__ set_bit(JME_FLAG_TXCSUM, &jme->flags); set_bit(JME_FLAG_TSO, &jme->flags); +#else + + if (jme->reg_rxmcs & RXMCS_CHECKSUM) + netdev->features |= NETIF_F_RXCSUM; +#endif /* * Get Max Read Req Size from PCI Config Space diff --git a/jme.h b/jme.h index 536a7f7..c010390 100644 --- a/jme.h +++ b/jme.h @@ -112,6 +112,10 @@ do { \ #define NETIF_F_IPV6_CSUM 0 #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) +#define __USE_NDO_FIX_FEATURES__ +#endif + /* * Extra PCI Configuration space interface */ @@ -614,8 +618,10 @@ jme_get_stats(struct net_device *netdev) enum jme_flags_bits { JME_FLAG_MSI = 1, JME_FLAG_SSET = 2, +#ifndef __USE_NDO_FIX_FEATURES__ JME_FLAG_TXCSUM = 3, JME_FLAG_TSO = 4, +#endif JME_FLAG_POLL = 5, JME_FLAG_SHUTDOWN = 6, }; -- 2.39.3