drvinfo->eedump_len = 0;
 }
 
-static u32 mlx4_en_get_tso(struct net_device *dev)
-{
-       return (dev->features & NETIF_F_TSO) != 0;
-}
-
-static int mlx4_en_set_tso(struct net_device *dev, u32 data)
-{
-       struct mlx4_en_priv *priv = netdev_priv(dev);
-
-       if (data) {
-               if (!priv->mdev->LSO_support)
-                       return -EPERM;
-               dev->features |= (NETIF_F_TSO | NETIF_F_TSO6);
-       } else
-               dev->features &= ~(NETIF_F_TSO | NETIF_F_TSO6);
-       return 0;
-}
-
-static u32 mlx4_en_get_rx_csum(struct net_device *dev)
-{
-       struct mlx4_en_priv *priv = netdev_priv(dev);
-       return priv->rx_csum;
-}
-
-static int mlx4_en_set_rx_csum(struct net_device *dev, u32 data)
-{
-       struct mlx4_en_priv *priv = netdev_priv(dev);
-       priv->rx_csum = (data != 0);
-       return 0;
-}
-
 static const char main_strings[][ETH_GSTRING_LEN] = {
        "rx_packets", "tx_packets", "rx_bytes", "tx_bytes", "rx_errors",
        "tx_errors", "rx_dropped", "tx_dropped", "multicast", "collisions",
        .get_drvinfo = mlx4_en_get_drvinfo,
        .get_settings = mlx4_en_get_settings,
        .set_settings = mlx4_en_set_settings,
-#ifdef NETIF_F_TSO
-       .get_tso = mlx4_en_get_tso,
-       .set_tso = mlx4_en_set_tso,
-#endif
-       .get_sg = ethtool_op_get_sg,
-       .set_sg = ethtool_op_set_sg,
        .get_link = ethtool_op_get_link,
-       .get_rx_csum = mlx4_en_get_rx_csum,
-       .set_rx_csum = mlx4_en_set_rx_csum,
-       .get_tx_csum = ethtool_op_get_tx_csum,
-       .set_tx_csum = ethtool_op_set_tx_ipv6_csum,
        .get_strings = mlx4_en_get_strings,
        .get_sset_count = mlx4_en_get_sset_count,
        .get_ethtool_stats = mlx4_en_get_ethtool_stats,
        .set_pauseparam = mlx4_en_set_pauseparam,
        .get_ringparam = mlx4_en_get_ringparam,
        .set_ringparam = mlx4_en_set_ringparam,
-       .get_flags = ethtool_op_get_flags,
 };
 
 
 
        priv->prof = prof;
        priv->port = port;
        priv->port_up = false;
-       priv->rx_csum = 1;
        priv->flags = prof->flags;
        priv->tx_ring_num = prof->tx_ring_num;
        priv->rx_ring_num = prof->rx_ring_num;
        /*
         * Set driver features
         */
-       dev->features |= NETIF_F_SG;
-       dev->vlan_features |= NETIF_F_SG;
-       dev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
-       dev->vlan_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
-       dev->features |= NETIF_F_HIGHDMA;
-       dev->features |= NETIF_F_HW_VLAN_TX |
-                        NETIF_F_HW_VLAN_RX |
-                        NETIF_F_HW_VLAN_FILTER;
-       dev->features |= NETIF_F_GRO;
-       if (mdev->LSO_support) {
-               dev->features |= NETIF_F_TSO;
-               dev->features |= NETIF_F_TSO6;
-               dev->vlan_features |= NETIF_F_TSO;
-               dev->vlan_features |= NETIF_F_TSO6;
-       }
+       dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
+       if (mdev->LSO_support)
+               dev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6;
+
+       dev->vlan_features = dev->hw_features;
+
+       dev->hw_features |= NETIF_F_RXCSUM;
+       dev->features = dev->hw_features | NETIF_F_HIGHDMA |
+                       NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX |
+                       NETIF_F_HW_VLAN_FILTER;
 
        mdev->pndev[port] = dev;