Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Michał Mirosław and committed by
David S. Miller
d7b57654 fb507934

+19 -60
+19 -58
drivers/net/jme.c
··· 2230 2230 jme_restart_rx_engine(jme); 2231 2231 } 2232 2232 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 - 2243 2233 netdev->mtu = new_mtu; 2234 + netdev_update_features(netdev); 2235 + 2244 2236 jme_reset_link(jme); 2245 2237 2246 2238 return 0; ··· 2632 2640 } 2633 2641 2634 2642 static u32 2635 - jme_get_rx_csum(struct net_device *netdev) 2643 + jme_fix_features(struct net_device *netdev, u32 features) 2636 2644 { 2637 - struct jme_adapter *jme = netdev_priv(netdev); 2638 - return jme->reg_rxmcs & RXMCS_CHECKSUM; 2645 + if (netdev->mtu > 1900) 2646 + features &= ~(NETIF_F_ALL_TSO | NETIF_F_ALL_CSUM); 2647 + return features; 2639 2648 } 2640 2649 2641 2650 static int 2642 - jme_set_rx_csum(struct net_device *netdev, u32 on) 2651 + jme_set_features(struct net_device *netdev, u32 features) 2643 2652 { 2644 2653 struct jme_adapter *jme = netdev_priv(netdev); 2645 2654 2646 2655 spin_lock_bh(&jme->rxmcs_lock); 2647 - if (on) 2656 + if (features & NETIF_F_RXCSUM) 2648 2657 jme->reg_rxmcs |= RXMCS_CHECKSUM; 2649 2658 else 2650 2659 jme->reg_rxmcs &= ~RXMCS_CHECKSUM; 2651 2660 jwrite32(jme, JME_RXMCS, jme->reg_rxmcs); 2652 2661 spin_unlock_bh(&jme->rxmcs_lock); 2653 - 2654 - return 0; 2655 - } 2656 - 2657 - static int 2658 - jme_set_tx_csum(struct net_device *netdev, u32 on) 2659 - { 2660 - struct jme_adapter *jme = netdev_priv(netdev); 2661 - 2662 - if (on) { 2663 - set_bit(JME_FLAG_TXCSUM, &jme->flags); 2664 - if (netdev->mtu <= 1900) 2665 - netdev->features |= 2666 - NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; 2667 - } else { 2668 - clear_bit(JME_FLAG_TXCSUM, &jme->flags); 2669 - netdev->features &= 2670 - ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); 2671 - } 2672 - 2673 - return 0; 2674 - } 2675 - 2676 - static int 2677 - jme_set_tso(struct net_device *netdev, u32 on) 2678 - { 2679 - struct jme_adapter *jme = netdev_priv(netdev); 2680 - 2681 - if (on) { 2682 - set_bit(JME_FLAG_TSO, &jme->flags); 2683 - if (netdev->mtu <= 1900) 2684 - netdev->features |= NETIF_F_TSO | NETIF_F_TSO6; 2685 - } else { 2686 - clear_bit(JME_FLAG_TSO, &jme->flags); 2687 - netdev->features &= ~(NETIF_F_TSO | NETIF_F_TSO6); 2688 - } 2689 2662 2690 2663 return 0; 2691 2664 } ··· 2796 2839 .get_link = jme_get_link, 2797 2840 .get_msglevel = jme_get_msglevel, 2798 2841 .set_msglevel = jme_set_msglevel, 2799 - .get_rx_csum = jme_get_rx_csum, 2800 - .set_rx_csum = jme_set_rx_csum, 2801 - .set_tx_csum = jme_set_tx_csum, 2802 - .set_tso = jme_set_tso, 2803 - .set_sg = ethtool_op_set_sg, 2804 2842 .nway_reset = jme_nway_reset, 2805 2843 .get_eeprom_len = jme_get_eeprom_len, 2806 2844 .get_eeprom = jme_get_eeprom, ··· 2855 2903 .ndo_change_mtu = jme_change_mtu, 2856 2904 .ndo_tx_timeout = jme_tx_timeout, 2857 2905 .ndo_vlan_rx_register = jme_vlan_rx_register, 2906 + .ndo_fix_features = jme_fix_features, 2907 + .ndo_set_features = jme_set_features, 2858 2908 }; 2859 2909 2860 2910 static int __devinit ··· 2911 2957 netdev->netdev_ops = &jme_netdev_ops; 2912 2958 netdev->ethtool_ops = &jme_ethtool_ops; 2913 2959 netdev->watchdog_timeo = TX_TIMEOUT; 2960 + netdev->hw_features = NETIF_F_IP_CSUM | 2961 + NETIF_F_IPV6_CSUM | 2962 + NETIF_F_SG | 2963 + NETIF_F_TSO | 2964 + NETIF_F_TSO6 | 2965 + NETIF_F_RXCSUM; 2914 2966 netdev->features = NETIF_F_IP_CSUM | 2915 2967 NETIF_F_IPV6_CSUM | 2916 2968 NETIF_F_SG | ··· 3000 3040 jme->reg_txpfc = 0; 3001 3041 jme->reg_pmcs = PMCS_MFEN; 3002 3042 jme->reg_gpreg1 = GPREG1_DEFAULT; 3003 - set_bit(JME_FLAG_TXCSUM, &jme->flags); 3004 - set_bit(JME_FLAG_TSO, &jme->flags); 3043 + 3044 + if (jme->reg_rxmcs & RXMCS_CHECKSUM) 3045 + netdev->features |= NETIF_F_RXCSUM; 3005 3046 3006 3047 /* 3007 3048 * Get Max Read Req Size from PCI Config Space
-2
drivers/net/jme.h
··· 468 468 enum jme_flags_bits { 469 469 JME_FLAG_MSI = 1, 470 470 JME_FLAG_SSET = 2, 471 - JME_FLAG_TXCSUM = 3, 472 - JME_FLAG_TSO = 4, 473 471 JME_FLAG_POLL = 5, 474 472 JME_FLAG_SHUTDOWN = 6, 475 473 };