#include <linux/netdevice.h>
#include <linux/ethtool.h>
#include <linux/net_tstamp.h>
#include "enic_res.h"
#include "enic.h"
#include "enic_dev.h"
#include "enic_clsf.h"
#include "vnic_rss.h"
#include "vnic_stats.h"
struct enic_stat { … };
#define ENIC_TX_STAT(stat) …
#define ENIC_RX_STAT(stat) …
#define ENIC_GEN_STAT(stat) …
static const struct enic_stat enic_tx_stats[] = …;
static const struct enic_stat enic_rx_stats[] = …;
static const struct enic_stat enic_gen_stats[] = …;
static const unsigned int enic_n_tx_stats = …;
static const unsigned int enic_n_rx_stats = …;
static const unsigned int enic_n_gen_stats = …;
static void enic_intr_coal_set_rx(struct enic *enic, u32 timer)
{ … }
static int enic_get_ksettings(struct net_device *netdev,
struct ethtool_link_ksettings *ecmd)
{ … }
static void enic_get_drvinfo(struct net_device *netdev,
struct ethtool_drvinfo *drvinfo)
{ … }
static void enic_get_strings(struct net_device *netdev, u32 stringset,
u8 *data)
{ … }
static void enic_get_ringparam(struct net_device *netdev,
struct ethtool_ringparam *ring,
struct kernel_ethtool_ringparam *kernel_ring,
struct netlink_ext_ack *extack)
{ … }
static int enic_set_ringparam(struct net_device *netdev,
struct ethtool_ringparam *ring,
struct kernel_ethtool_ringparam *kernel_ring,
struct netlink_ext_ack *extack)
{ … }
static int enic_get_sset_count(struct net_device *netdev, int sset)
{ … }
static void enic_get_ethtool_stats(struct net_device *netdev,
struct ethtool_stats *stats, u64 *data)
{ … }
static u32 enic_get_msglevel(struct net_device *netdev)
{ … }
static void enic_set_msglevel(struct net_device *netdev, u32 value)
{ … }
static int enic_get_coalesce(struct net_device *netdev,
struct ethtool_coalesce *ecmd,
struct kernel_ethtool_coalesce *kernel_coal,
struct netlink_ext_ack *extack)
{ … }
static int enic_coalesce_valid(struct enic *enic,
struct ethtool_coalesce *ec)
{ … }
static int enic_set_coalesce(struct net_device *netdev,
struct ethtool_coalesce *ecmd,
struct kernel_ethtool_coalesce *kernel_coal,
struct netlink_ext_ack *extack)
{ … }
static int enic_grxclsrlall(struct enic *enic, struct ethtool_rxnfc *cmd,
u32 *rule_locs)
{ … }
static int enic_grxclsrule(struct enic *enic, struct ethtool_rxnfc *cmd)
{ … }
static int enic_get_rx_flow_hash(struct enic *enic, struct ethtool_rxnfc *cmd)
{ … }
static int enic_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
u32 *rule_locs)
{ … }
static int enic_get_tunable(struct net_device *dev,
const struct ethtool_tunable *tuna, void *data)
{ … }
static int enic_set_tunable(struct net_device *dev,
const struct ethtool_tunable *tuna,
const void *data)
{ … }
static u32 enic_get_rxfh_key_size(struct net_device *netdev)
{ … }
static int enic_get_rxfh(struct net_device *netdev,
struct ethtool_rxfh_param *rxfh)
{ … }
static int enic_set_rxfh(struct net_device *netdev,
struct ethtool_rxfh_param *rxfh,
struct netlink_ext_ack *extack)
{ … }
static int enic_get_ts_info(struct net_device *netdev,
struct kernel_ethtool_ts_info *info)
{ … }
static void enic_get_channels(struct net_device *netdev,
struct ethtool_channels *channels)
{ … }
static const struct ethtool_ops enic_ethtool_ops = …;
void enic_set_ethtool_ops(struct net_device *netdev)
{ … }