diff options
Diffstat (limited to 'drivers/net/netxen/netxen_nic_ethtool.c')
-rw-r--r-- | drivers/net/netxen/netxen_nic_ethtool.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/drivers/net/netxen/netxen_nic_ethtool.c b/drivers/net/netxen/netxen_nic_ethtool.c index 39a308c363c7..db66e7053b99 100644 --- a/drivers/net/netxen/netxen_nic_ethtool.c +++ b/drivers/net/netxen/netxen_nic_ethtool.c | |||
@@ -57,7 +57,8 @@ static const struct netxen_nic_stats netxen_nic_gstrings_stats[] = { | |||
57 | {"rx_dropped", NETXEN_NIC_STAT(stats.rxdropped)}, | 57 | {"rx_dropped", NETXEN_NIC_STAT(stats.rxdropped)}, |
58 | {"tx_dropped", NETXEN_NIC_STAT(stats.txdropped)}, | 58 | {"tx_dropped", NETXEN_NIC_STAT(stats.txdropped)}, |
59 | {"csummed", NETXEN_NIC_STAT(stats.csummed)}, | 59 | {"csummed", NETXEN_NIC_STAT(stats.csummed)}, |
60 | {"no_rcv", NETXEN_NIC_STAT(stats.no_rcv)}, | 60 | {"rx_pkts", NETXEN_NIC_STAT(stats.rx_pkts)}, |
61 | {"lro_pkts", NETXEN_NIC_STAT(stats.lro_pkts)}, | ||
61 | {"rx_bytes", NETXEN_NIC_STAT(stats.rxbytes)}, | 62 | {"rx_bytes", NETXEN_NIC_STAT(stats.rxbytes)}, |
62 | {"tx_bytes", NETXEN_NIC_STAT(stats.txbytes)}, | 63 | {"tx_bytes", NETXEN_NIC_STAT(stats.txbytes)}, |
63 | }; | 64 | }; |
@@ -941,6 +942,28 @@ static int netxen_get_intr_coalesce(struct net_device *netdev, | |||
941 | return 0; | 942 | return 0; |
942 | } | 943 | } |
943 | 944 | ||
945 | static int netxen_nic_set_flags(struct net_device *netdev, u32 data) | ||
946 | { | ||
947 | struct netxen_adapter *adapter = netdev_priv(netdev); | ||
948 | int hw_lro; | ||
949 | |||
950 | if (!(adapter->capabilities & NX_FW_CAPABILITY_HW_LRO)) | ||
951 | return -EINVAL; | ||
952 | |||
953 | ethtool_op_set_flags(netdev, data); | ||
954 | |||
955 | hw_lro = (data & ETH_FLAG_LRO) ? NETXEN_NIC_LRO_ENABLED : 0; | ||
956 | |||
957 | if (netxen_config_hw_lro(adapter, hw_lro)) | ||
958 | return -EIO; | ||
959 | |||
960 | if ((hw_lro == 0) && netxen_send_lro_cleanup(adapter)) | ||
961 | return -EIO; | ||
962 | |||
963 | |||
964 | return 0; | ||
965 | } | ||
966 | |||
944 | struct ethtool_ops netxen_nic_ethtool_ops = { | 967 | struct ethtool_ops netxen_nic_ethtool_ops = { |
945 | .get_settings = netxen_nic_get_settings, | 968 | .get_settings = netxen_nic_get_settings, |
946 | .set_settings = netxen_nic_set_settings, | 969 | .set_settings = netxen_nic_set_settings, |
@@ -968,4 +991,6 @@ struct ethtool_ops netxen_nic_ethtool_ops = { | |||
968 | .set_rx_csum = netxen_nic_set_rx_csum, | 991 | .set_rx_csum = netxen_nic_set_rx_csum, |
969 | .get_coalesce = netxen_get_intr_coalesce, | 992 | .get_coalesce = netxen_get_intr_coalesce, |
970 | .set_coalesce = netxen_set_intr_coalesce, | 993 | .set_coalesce = netxen_set_intr_coalesce, |
994 | .get_flags = ethtool_op_get_flags, | ||
995 | .set_flags = netxen_nic_set_flags, | ||
971 | }; | 996 | }; |