#include <linux/netdevice.h>
#include <linux/interrupt.h>
#include <linux/ethtool.h>
#include <linux/pci.h>
#include <linux/slab.h>
#include <linux/delay.h>
#include <linux/vmalloc.h>
#include <linux/pm_runtime.h>
#include "e1000.h"
enum { … };
struct e1000_stats { … };
static const char e1000e_priv_flags_strings[][ETH_GSTRING_LEN] = …;
#define E1000E_PRIV_FLAGS_STR_LEN …
#define E1000_STAT(str, m) …
#define E1000_NETDEV_STAT(str, m) …
static const struct e1000_stats e1000_gstrings_stats[] = …;
#define E1000_GLOBAL_STATS_LEN …
#define E1000_STATS_LEN …
static const char e1000_gstrings_test[][ETH_GSTRING_LEN] = …;
#define E1000_TEST_LEN …
static int e1000_get_link_ksettings(struct net_device *netdev,
struct ethtool_link_ksettings *cmd)
{ … }
static int e1000_set_spd_dplx(struct e1000_adapter *adapter, u32 spd, u8 dplx)
{ … }
static int e1000_set_link_ksettings(struct net_device *netdev,
const struct ethtool_link_ksettings *cmd)
{ … }
static void e1000_get_pauseparam(struct net_device *netdev,
struct ethtool_pauseparam *pause)
{ … }
static int e1000_set_pauseparam(struct net_device *netdev,
struct ethtool_pauseparam *pause)
{ … }
static u32 e1000_get_msglevel(struct net_device *netdev)
{ … }
static void e1000_set_msglevel(struct net_device *netdev, u32 data)
{ … }
static int e1000_get_regs_len(struct net_device __always_unused *netdev)
{ … }
static void e1000_get_regs(struct net_device *netdev,
struct ethtool_regs *regs, void *p)
{ … }
static int e1000_get_eeprom_len(struct net_device *netdev)
{ … }
static int e1000_get_eeprom(struct net_device *netdev,
struct ethtool_eeprom *eeprom, u8 *bytes)
{ … }
static int e1000_set_eeprom(struct net_device *netdev,
struct ethtool_eeprom *eeprom, u8 *bytes)
{ … }
static void e1000_get_drvinfo(struct net_device *netdev,
struct ethtool_drvinfo *drvinfo)
{ … }
static void e1000_get_ringparam(struct net_device *netdev,
struct ethtool_ringparam *ring,
struct kernel_ethtool_ringparam *kernel_ring,
struct netlink_ext_ack *extack)
{ … }
static int e1000_set_ringparam(struct net_device *netdev,
struct ethtool_ringparam *ring,
struct kernel_ethtool_ringparam *kernel_ring,
struct netlink_ext_ack *extack)
{ … }
static bool reg_pattern_test(struct e1000_adapter *adapter, u64 *data,
int reg, int offset, u32 mask, u32 write)
{ … }
static bool reg_set_and_check(struct e1000_adapter *adapter, u64 *data,
int reg, u32 mask, u32 write)
{ … }
#define REG_PATTERN_TEST_ARRAY(reg, offset, mask, write) …
#define REG_PATTERN_TEST(reg, mask, write) …
#define REG_SET_AND_CHECK(reg, mask, write) …
static int e1000_reg_test(struct e1000_adapter *adapter, u64 *data)
{ … }
static int e1000_eeprom_test(struct e1000_adapter *adapter, u64 *data)
{ … }
static irqreturn_t e1000_test_intr(int __always_unused irq, void *data)
{ … }
static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)
{ … }
static void e1000_free_desc_rings(struct e1000_adapter *adapter)
{ … }
static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
{ … }
static void e1000_phy_disable_receiver(struct e1000_adapter *adapter)
{ … }
static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
{ … }
static int e1000_set_82571_fiber_loopback(struct e1000_adapter *adapter)
{ … }
static int e1000_set_es2lan_mac_loopback(struct e1000_adapter *adapter)
{ … }
static int e1000_setup_loopback_test(struct e1000_adapter *adapter)
{ … }
static void e1000_loopback_cleanup(struct e1000_adapter *adapter)
{ … }
static void e1000_create_lbtest_frame(struct sk_buff *skb,
unsigned int frame_size)
{ … }
static int e1000_check_lbtest_frame(struct sk_buff *skb,
unsigned int frame_size)
{ … }
static int e1000_run_loopback_test(struct e1000_adapter *adapter)
{ … }
static int e1000_loopback_test(struct e1000_adapter *adapter, u64 *data)
{ … }
static int e1000_link_test(struct e1000_adapter *adapter, u64 *data)
{ … }
static int e1000e_get_sset_count(struct net_device __always_unused *netdev,
int sset)
{ … }
static void e1000_diag_test(struct net_device *netdev,
struct ethtool_test *eth_test, u64 *data)
{ … }
static void e1000_get_wol(struct net_device *netdev,
struct ethtool_wolinfo *wol)
{ … }
static int e1000_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
{ … }
static int e1000_set_phys_id(struct net_device *netdev,
enum ethtool_phys_id_state state)
{ … }
static int e1000_get_coalesce(struct net_device *netdev,
struct ethtool_coalesce *ec,
struct kernel_ethtool_coalesce *kernel_coal,
struct netlink_ext_ack *extack)
{ … }
static int e1000_set_coalesce(struct net_device *netdev,
struct ethtool_coalesce *ec,
struct kernel_ethtool_coalesce *kernel_coal,
struct netlink_ext_ack *extack)
{ … }
static int e1000_nway_reset(struct net_device *netdev)
{ … }
static void e1000_get_ethtool_stats(struct net_device *netdev,
struct ethtool_stats __always_unused *stats,
u64 *data)
{ … }
static void e1000_get_strings(struct net_device __always_unused *netdev,
u32 stringset, u8 *data)
{ … }
static int e1000_get_rxnfc(struct net_device *netdev,
struct ethtool_rxnfc *info,
u32 __always_unused *rule_locs)
{ … }
static int e1000e_get_eee(struct net_device *netdev, struct ethtool_keee *edata)
{ … }
static int e1000e_set_eee(struct net_device *netdev, struct ethtool_keee *edata)
{ … }
static int e1000e_get_ts_info(struct net_device *netdev,
struct kernel_ethtool_ts_info *info)
{ … }
static u32 e1000e_get_priv_flags(struct net_device *netdev)
{ … }
static int e1000e_set_priv_flags(struct net_device *netdev, u32 priv_flags)
{ … }
static const struct ethtool_ops e1000_ethtool_ops = …;
void e1000e_set_ethtool_ops(struct net_device *netdev)
{ … }