31 #include <linux/netdevice.h>
32 #include <linux/pci.h>
35 #include <linux/if_ether.h>
36 #include <linux/ethtool.h>
37 #include <linux/sched.h>
38 #include <linux/slab.h>
49 #define IGB_STAT(_name, _stat) { \
50 .stat_string = _name, \
51 .sizeof_stat = FIELD_SIZEOF(struct igb_adapter, _stat), \
52 .stat_offset = offsetof(struct igb_adapter, _stat) \
54 static const struct igb_stats igb_gstrings_stats[] = {
75 IGB_STAT(
"tx_timeout_count", tx_timeout_count),
96 #define IGB_NETDEV_STAT(_net_stat) { \
97 .stat_string = __stringify(_net_stat), \
98 .sizeof_stat = FIELD_SIZEOF(struct rtnl_link_stats64, _net_stat), \
99 .stat_offset = offsetof(struct rtnl_link_stats64, _net_stat) \
101 static const struct igb_stats igb_gstrings_net_stats[] = {
113 #define IGB_GLOBAL_STATS_LEN \
114 (sizeof(igb_gstrings_stats) / sizeof(struct igb_stats))
115 #define IGB_NETDEV_STATS_LEN \
116 (sizeof(igb_gstrings_net_stats) / sizeof(struct igb_stats))
117 #define IGB_RX_QUEUE_STATS_LEN \
118 (sizeof(struct igb_rx_queue_stats) / sizeof(u64))
120 #define IGB_TX_QUEUE_STATS_LEN 3
122 #define IGB_QUEUE_STATS_LEN \
123 ((((struct igb_adapter *)netdev_priv(netdev))->num_rx_queues * \
124 IGB_RX_QUEUE_STATS_LEN) + \
125 (((struct igb_adapter *)netdev_priv(netdev))->num_tx_queues * \
126 IGB_TX_QUEUE_STATS_LEN))
127 #define IGB_STATS_LEN \
128 (IGB_GLOBAL_STATS_LEN + IGB_NETDEV_STATS_LEN + IGB_QUEUE_STATS_LEN)
131 "Register test (offline)",
"Eeprom test (offline)",
132 "Interrupt test (offline)",
"Loopback test (offline)",
133 "Link test (on/offline)"
135 #define IGB_TEST_LEN (sizeof(igb_gstrings_test) / ETH_GSTRING_LEN)
155 if (hw->
mac.autoneg == 1) {
161 if (hw->
mac.autoneg != 1)
203 ethtool_cmd_speed_set(ecmd,
SPEED_10);
211 ethtool_cmd_speed_set(ecmd, -1);
241 "Cannot change link characteristics when SoL/IDER is active.\n");
256 dev_err(&adapter->
pdev->dev,
"forcing MDI/MDI-X state is not supported when link speed and/or duplex are forced\n");
273 u32 speed = ethtool_cmd_speed(ecmd);
294 if (netif_running(adapter->
netdev)) {
316 if (!netif_carrier_ok(netdev))
322 static void igb_get_pauseparam(
struct net_device *netdev,
341 static int igb_set_pauseparam(
struct net_device *netdev,
355 if (netif_running(adapter->
netdev)) {
371 hw->
fc.current_mode = hw->
fc.requested_mode;
393 static int igb_get_regs_len(
struct net_device *netdev)
395 #define IGB_REGS_LEN 739
399 static void igb_get_regs(
struct net_device *netdev,
407 memset(p, 0, IGB_REGS_LEN *
sizeof(
u32));
486 regs_buff[54] = adapter->
stats.crcerrs;
487 regs_buff[55] = adapter->
stats.algnerrc;
488 regs_buff[56] = adapter->
stats.symerrs;
489 regs_buff[57] = adapter->
stats.rxerrc;
490 regs_buff[58] = adapter->
stats.mpc;
491 regs_buff[59] = adapter->
stats.scc;
492 regs_buff[60] = adapter->
stats.ecol;
493 regs_buff[61] = adapter->
stats.mcc;
494 regs_buff[62] = adapter->
stats.latecol;
495 regs_buff[63] = adapter->
stats.colc;
496 regs_buff[64] = adapter->
stats.dc;
497 regs_buff[65] = adapter->
stats.tncrs;
498 regs_buff[66] = adapter->
stats.sec;
499 regs_buff[67] = adapter->
stats.htdpmc;
500 regs_buff[68] = adapter->
stats.rlec;
501 regs_buff[69] = adapter->
stats.xonrxc;
502 regs_buff[70] = adapter->
stats.xontxc;
503 regs_buff[71] = adapter->
stats.xoffrxc;
504 regs_buff[72] = adapter->
stats.xofftxc;
505 regs_buff[73] = adapter->
stats.fcruc;
506 regs_buff[74] = adapter->
stats.prc64;
507 regs_buff[75] = adapter->
stats.prc127;
508 regs_buff[76] = adapter->
stats.prc255;
509 regs_buff[77] = adapter->
stats.prc511;
510 regs_buff[78] = adapter->
stats.prc1023;
511 regs_buff[79] = adapter->
stats.prc1522;
512 regs_buff[80] = adapter->
stats.gprc;
513 regs_buff[81] = adapter->
stats.bprc;
514 regs_buff[82] = adapter->
stats.mprc;
515 regs_buff[83] = adapter->
stats.gptc;
516 regs_buff[84] = adapter->
stats.gorc;
517 regs_buff[86] = adapter->
stats.gotc;
518 regs_buff[88] = adapter->
stats.rnbc;
519 regs_buff[89] = adapter->
stats.ruc;
520 regs_buff[90] = adapter->
stats.rfc;
521 regs_buff[91] = adapter->
stats.roc;
522 regs_buff[92] = adapter->
stats.rjc;
523 regs_buff[93] = adapter->
stats.mgprc;
524 regs_buff[94] = adapter->
stats.mgpdc;
525 regs_buff[95] = adapter->
stats.mgptc;
526 regs_buff[96] = adapter->
stats.tor;
527 regs_buff[98] = adapter->
stats.tot;
528 regs_buff[100] = adapter->
stats.tpr;
529 regs_buff[101] = adapter->
stats.tpt;
530 regs_buff[102] = adapter->
stats.ptc64;
531 regs_buff[103] = adapter->
stats.ptc127;
532 regs_buff[104] = adapter->
stats.ptc255;
533 regs_buff[105] = adapter->
stats.ptc511;
534 regs_buff[106] = adapter->
stats.ptc1023;
535 regs_buff[107] = adapter->
stats.ptc1522;
536 regs_buff[108] = adapter->
stats.mptc;
537 regs_buff[109] = adapter->
stats.bptc;
538 regs_buff[110] = adapter->
stats.tsctc;
539 regs_buff[111] = adapter->
stats.iac;
540 regs_buff[112] = adapter->
stats.rpthc;
541 regs_buff[113] = adapter->
stats.hgptc;
542 regs_buff[114] = adapter->
stats.hgorc;
543 regs_buff[116] = adapter->
stats.hgotc;
544 regs_buff[118] = adapter->
stats.lenerrs;
545 regs_buff[119] = adapter->
stats.scvpc;
546 regs_buff[120] = adapter->
stats.hrmpc;
548 for (i = 0; i < 4; i++)
550 for (i = 0; i < 4; i++)
552 for (i = 0; i < 4; i++)
554 for (i = 0; i < 4; i++)
556 for (i = 0; i < 4; i++)
558 for (i = 0; i < 4; i++)
560 for (i = 0; i < 4; i++)
562 for (i = 0; i < 4; i++)
565 for (i = 0; i < 10; i++)
567 for (i = 0; i < 8; i++)
569 for (i = 0; i < 8; i++)
571 for (i = 0; i < 16; i++)
573 for (i = 0; i < 16; i++)
576 for (i = 0; i < 4; i++)
578 for (i = 0; i < 4; i++)
580 for (i = 0; i < 4; i++)
582 for (i = 0; i < 4; i++)
584 for (i = 0; i < 4; i++)
586 for (i = 0; i < 4; i++)
588 for (i = 0; i < 4; i++)
590 for (i = 0; i < 4; i++)
592 for (i = 0; i < 4; i++)
595 for (i = 0; i < 4; i++)
597 for (i = 0; i < 4; i++)
599 for (i = 0; i < 32; i++)
601 for (i = 0; i < 128; i++)
603 for (i = 0; i < 128; i++)
605 for (i = 0; i < 4; i++)
614 regs_buff[551] = adapter->
stats.o2bgptc;
615 regs_buff[552] = adapter->
stats.b2ospc;
616 regs_buff[553] = adapter->
stats.o2bspc;
617 regs_buff[554] = adapter->
stats.b2ogprc;
622 for (i = 0; i < 12; i++)
624 for (i = 0; i < 4; i++)
626 for (i = 0; i < 12; i++)
628 for (i = 0; i < 12; i++)
630 for (i = 0; i < 12; i++)
632 for (i = 0; i < 12; i++)
634 for (i = 0; i < 12; i++)
636 for (i = 0; i < 12; i++)
639 for (i = 0; i < 12; i++)
641 for (i = 0; i < 12; i++)
643 for (i = 0; i < 12; i++)
645 for (i = 0; i < 12; i++)
647 for (i = 0; i < 12; i++)
649 for (i = 0; i < 12; i++)
651 for (i = 0; i < 12; i++)
653 for (i = 0; i < 12; i++)
657 static int igb_get_eeprom_len(
struct net_device *netdev)
660 return adapter->
hw.nvm.word_size * 2;
663 static int igb_get_eeprom(
struct net_device *netdev,
669 int first_word, last_word;
673 if (eeprom->
len == 0)
678 first_word = eeprom->
offset >> 1;
679 last_word = (eeprom->
offset + eeprom->
len - 1) >> 1;
687 ret_val = hw->
nvm.ops.read(hw, first_word,
688 last_word - first_word + 1,
691 for (i = 0; i < last_word - first_word + 1; i++) {
692 ret_val = hw->
nvm.ops.read(hw, first_word + i, 1,
700 for (i = 0; i < last_word - first_word + 1; i++)
710 static int igb_set_eeprom(
struct net_device *netdev,
717 int max_len, first_word, last_word, ret_val = 0;
720 if (eeprom->
len == 0)
729 max_len = hw->
nvm.word_size * 2;
731 first_word = eeprom->
offset >> 1;
732 last_word = (eeprom->
offset + eeprom->
len - 1) >> 1;
737 ptr = (
void *)eeprom_buff;
742 ret_val = hw->
nvm.ops.read(hw, first_word, 1,
746 if (((eeprom->
offset + eeprom->
len) & 1) && (ret_val == 0)) {
749 ret_val = hw->
nvm.ops.read(hw, last_word, 1,
750 &eeprom_buff[last_word - first_word]);
754 for (i = 0; i < last_word - first_word + 1; i++)
759 for (i = 0; i < last_word - first_word + 1; i++)
762 ret_val = hw->
nvm.ops.write(hw, first_word,
763 last_word - first_word + 1, eeprom_buff);
768 hw->
nvm.ops.update(hw);
775 static void igb_get_drvinfo(
struct net_device *netdev,
794 drvinfo->
eedump_len = igb_get_eeprom_len(netdev);
797 static void igb_get_ringparam(
struct net_device *netdev,
808 static int igb_set_ringparam(
struct net_device *netdev,
814 u16 new_rx_count, new_tx_count;
836 if (!netif_running(adapter->
netdev)) {
838 adapter->
tx_ring[i]->count = new_tx_count;
840 adapter->
rx_ring[i]->count = new_rx_count;
868 temp_ring[
i].
count = new_tx_count;
894 temp_ring[
i].
count = new_rx_count;
943 #define PATTERN_TEST 1
944 #define SET_READ_TEST 2
945 #define WRITE_NO_TEST 3
946 #define TABLE32_TEST 4
947 #define TABLE64_TEST_LO 5
948 #define TABLE64_TEST_HI 6
972 0xFFFFFFFF, 0xFFFFFFFF },
974 0x900FFFFF, 0xFFFFFFFF },
976 0xFFFFFFFF, 0xFFFFFFFF },
1011 0xFFFFFFFF, 0xFFFFFFFF },
1013 0xC3FFFFFF, 0xFFFFFFFF },
1015 0xFFFFFFFF, 0xFFFFFFFF },
1017 0xC3FFFFFF, 0xFFFFFFFF },
1019 0xFFFFFFFF, 0xFFFFFFFF },
1054 0xFFFFFFFF, 0xFFFFFFFF },
1056 0x83FFFFFF, 0xFFFFFFFF },
1058 0xFFFFFFFF, 0xFFFFFFFF },
1060 0x83FFFFFF, 0xFFFFFFFF },
1062 0xFFFFFFFF, 0xFFFFFFFF },
1143 static const u32 _test[] =
1144 {0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF};
1145 for (pat = 0; pat <
ARRAY_SIZE(_test); pat++) {
1146 wr32(reg, (_test[pat] & write));
1148 if (val != (_test[pat] & write & mask)) {
1150 "pattern test reg %04X failed: got 0x%08X expected 0x%08X\n",
1151 reg, val, (_test[pat] & write & mask));
1160 static bool reg_set_and_check(
struct igb_adapter *adapter,
u64 *data,
1161 int reg,
u32 mask,
u32 write)
1165 wr32(reg, write & mask);
1167 if ((write & mask) != (val & mask)) {
1169 "set/check reg %04X test failed: got 0x%08X expected 0x%08X\n", reg,
1170 (val & mask), (write & mask));
1178 #define REG_PATTERN_TEST(reg, mask, write) \
1180 if (reg_pattern_test(adapter, data, reg, mask, write)) \
1184 #define REG_SET_AND_CHECK(reg, mask, write) \
1186 if (reg_set_and_check(adapter, data, reg, mask, write)) \
1197 switch (adapter->
hw.mac.type) {
1199 test = reg_test_i350;
1200 toggle = 0x7FEFF3FF;
1204 test = reg_test_i210;
1205 toggle = 0x7FEFF3FF;
1208 test = reg_test_82580;
1209 toggle = 0x7FEFF3FF;
1212 test = reg_test_82576;
1213 toggle = 0x7FFFF3FF;
1216 test = reg_test_82575;
1217 toggle = 0x7FFFF3FF;
1230 if (value != after) {
1232 "failed STATUS register test got: 0x%08X expected: 0x%08X\n",
1260 (adapter->
hw.hw_addr + test->
reg)
1287 static int igb_eeprom_test(
struct igb_adapter *adapter,
u64 *data)
1293 if (adapter->
hw.nvm.ops.validate(&adapter->
hw) < 0)
1300 static irqreturn_t igb_test_intr(
int irq,
void *data)
1314 u32 mask, ics_mask, i = 0, shared_int =
true;
1322 igb_test_intr, 0, netdev->
name, adapter)) {
1329 igb_test_intr, 0, netdev->
name, adapter)) {
1334 netdev->
name, adapter)) {
1337 netdev->
name, adapter)) {
1341 dev_info(&adapter->
pdev->dev,
"testing %s interrupt\n",
1342 (shared_int ?
"shared" :
"unshared"));
1350 switch (hw->
mac.type) {
1352 ics_mask = 0x37F47EDD;
1355 ics_mask = 0x77D4FBFD;
1358 ics_mask = 0x77DCFED5;
1363 ics_mask = 0x77DCFED5;
1366 ics_mask = 0x7FFFFFFF;
1371 for (; i < 31; i++) {
1375 if (!(mask & ics_mask))
1460 static void igb_free_desc_rings(
struct igb_adapter *adapter)
1466 static int igb_setup_desc_rings(
struct igb_adapter *adapter)
1475 tx_ring->
dev = &adapter->
pdev->dev;
1489 rx_ring->
dev = &adapter->
pdev->dev;
1510 igb_free_desc_rings(adapter);
1514 static void igb_phy_disable_receiver(
struct igb_adapter *adapter)
1519 igb_write_phy_reg(hw, 29, 0x001F);
1520 igb_write_phy_reg(hw, 30, 0x8FFC);
1521 igb_write_phy_reg(hw, 29, 0x001A);
1522 igb_write_phy_reg(hw, 30, 0x8FF0);
1525 static int igb_integrated_phy_loopback(
struct igb_adapter *adapter)
1530 hw->
mac.autoneg =
false;
1571 igb_phy_disable_receiver(adapter);
1577 static int igb_set_phy_loopback(
struct igb_adapter *adapter)
1579 return igb_integrated_phy_loopback(adapter);
1582 static int igb_setup_loopback_test(
struct igb_adapter *adapter)
1639 return igb_set_phy_loopback(adapter);
1642 static void igb_loopback_cleanup(
struct igb_adapter *adapter)
1669 hw->
mac.autoneg =
true;
1672 phy_reg &= ~MII_CR_LOOPBACK;
1678 static void igb_create_lbtest_frame(
struct sk_buff *
skb,
1679 unsigned int frame_size)
1683 memset(&skb->
data[frame_size], 0xAA, frame_size - 1);
1684 memset(&skb->
data[frame_size + 10], 0xBE, 1);
1685 memset(&skb->
data[frame_size + 12], 0xAF, 1);
1688 static int igb_check_lbtest_frame(
struct sk_buff *
skb,
unsigned int frame_size)
1691 if (*(skb->
data + 3) == 0xFF) {
1692 if ((*(skb->
data + frame_size + 10) == 0xBE) &&
1693 (*(skb->
data + frame_size + 12) == 0xAF)) {
1700 static int igb_clean_test_rings(
struct igb_ring *rx_ring,
1712 rx_ntc = rx_ring->next_to_clean;
1713 tx_ntc = tx_ring->next_to_clean;
1722 rx_buffer_info->
dma,
1725 rx_buffer_info->
dma = 0;
1728 if (!igb_check_lbtest_frame(rx_buffer_info->
skb, size))
1733 total_bytes += tx_buffer_info->
bytecount;
1734 total_packets += tx_buffer_info->
gso_segs;
1739 if (rx_ntc == rx_ring->
count)
1742 if (tx_ntc == tx_ring->
count)
1750 netdev_tx_completed_queue(txq, total_packets, total_bytes);
1754 rx_ring->next_to_clean = rx_ntc;
1755 tx_ring->next_to_clean = tx_ntc;
1760 static int igb_run_loopback_test(
struct igb_adapter *adapter)
1776 igb_create_lbtest_frame(skb, size);
1786 lc = ((tx_ring->
count / 64) * 2) + 1;
1788 lc = ((rx_ring->
count / 64) * 2) + 1;
1790 for (j = 0; j <=
lc; j++) {
1795 for (i = 0; i < 64; i++) {
1802 if (good_cnt != 64) {
1810 good_cnt = igb_clean_test_rings(rx_ring, tx_ring, size);
1811 if (good_cnt != 64) {
1823 static int igb_loopback_test(
struct igb_adapter *adapter,
u64 *data)
1829 "Cannot do PHY loopback test when SoL/IDER is active.\n");
1833 *data = igb_setup_desc_rings(adapter);
1836 *data = igb_setup_loopback_test(adapter);
1839 *data = igb_run_loopback_test(adapter);
1840 igb_loopback_cleanup(adapter);
1843 igb_free_desc_rings(adapter);
1854 hw->
mac.serdes_has_link =
false;
1859 hw->
mac.ops.check_for_link(&adapter->
hw);
1860 if (hw->
mac.serdes_has_link)
1863 }
while (i++ < 3750);
1867 hw->
mac.ops.check_for_link(&adapter->
hw);
1868 if (hw->
mac.autoneg)
1877 static void igb_diag_test(
struct net_device *netdev,
1880 struct igb_adapter *adapter = netdev_priv(netdev);
1881 u16 autoneg_advertised;
1883 bool if_running = netif_running(netdev);
1890 autoneg_advertised = adapter->
hw.phy.autoneg_advertised;
1891 forced_speed_duplex = adapter->
hw.mac.forced_speed_duplex;
1892 autoneg = adapter->
hw.mac.autoneg;
1894 dev_info(&adapter->
pdev->dev,
"offline testing starting\n");
1901 if (igb_link_test(adapter, &data[4]))
1914 if (igb_eeprom_test(adapter, &data[1]))
1918 if (igb_intr_test(adapter, &data[2]))
1924 if (igb_loopback_test(adapter, &data[3]))
1928 adapter->
hw.phy.autoneg_advertised = autoneg_advertised;
1929 adapter->
hw.mac.forced_speed_duplex = forced_speed_duplex;
1933 adapter->
hw.phy.autoneg_wait_to_complete =
true;
1935 adapter->
hw.phy.autoneg_wait_to_complete =
false;
1941 dev_info(&adapter->
pdev->dev,
"online testing starting\n");
1944 if (if_running && igb_link_test(adapter, &data[4]))
1960 static int igb_wol_exclusion(
struct igb_adapter *adapter,
2010 struct igb_adapter *adapter = netdev_priv(netdev);
2019 if (igb_wol_exclusion(adapter, wol) ||
2020 !device_can_wakeup(&adapter->
pdev->dev))
2024 switch (adapter->
hw.device_id) {
2043 struct igb_adapter *adapter = netdev_priv(netdev);
2048 if (igb_wol_exclusion(adapter, wol) ||
2049 !device_can_wakeup(&adapter->
pdev->dev))
2071 #define IGB_LED_ON 0
2073 static int igb_set_phys_id(
struct net_device *netdev,
2076 struct igb_adapter *adapter = netdev_priv(netdev);
2099 static int igb_set_coalesce(
struct net_device *netdev,
2102 struct igb_adapter *adapter = netdev_priv(netdev);
2143 if (q_vector->rx.ring)
2155 static int igb_get_coalesce(
struct net_device *netdev,
2158 struct igb_adapter *adapter = netdev_priv(netdev);
2175 static int igb_nway_reset(
struct net_device *netdev)
2177 struct igb_adapter *adapter = netdev_priv(netdev);
2178 if (netif_running(netdev))
2183 static int igb_get_sset_count(
struct net_device *netdev,
int sset)
2195 static void igb_get_ethtool_stats(
struct net_device *netdev,
2198 struct igb_adapter *adapter = netdev_priv(netdev);
2209 p = (
char *)adapter + igb_gstrings_stats[i].stat_offset;
2214 p = (
char *)net_stats + igb_gstrings_net_stats[j].stat_offset;
2223 start = u64_stats_fetch_begin_bh(&ring->
tx_syncp);
2226 data[i+2] = ring->
tx_stats.restart_queue;
2227 }
while (u64_stats_fetch_retry_bh(&ring->
tx_syncp, start));
2229 start = u64_stats_fetch_begin_bh(&ring->
tx_syncp2);
2230 restart2 = ring->
tx_stats.restart_queue2;
2231 }
while (u64_stats_fetch_retry_bh(&ring->
tx_syncp2, start));
2232 data[i+2] += restart2;
2239 start = u64_stats_fetch_begin_bh(&ring->
rx_syncp);
2243 data[i+3] = ring->
rx_stats.csum_err;
2244 data[i+4] = ring->
rx_stats.alloc_failed;
2245 }
while (u64_stats_fetch_retry_bh(&ring->
rx_syncp, start));
2251 static void igb_get_strings(
struct net_device *netdev,
u32 stringset,
u8 *data)
2253 struct igb_adapter *adapter = netdev_priv(netdev);
2257 switch (stringset) {
2259 memcpy(data, *igb_gstrings_test,
2264 memcpy(p, igb_gstrings_stats[i].stat_string,
2269 memcpy(p, igb_gstrings_net_stats[i].stat_string,
2274 sprintf(p,
"tx_queue_%u_packets", i);
2276 sprintf(p,
"tx_queue_%u_bytes", i);
2278 sprintf(p,
"tx_queue_%u_restart", i);
2282 sprintf(p,
"rx_queue_%u_packets", i);
2284 sprintf(p,
"rx_queue_%u_bytes", i);
2286 sprintf(p,
"rx_queue_%u_drops", i);
2288 sprintf(p,
"rx_queue_%u_csum_err", i);
2290 sprintf(p,
"rx_queue_%u_alloc_failed", i);
2303 switch (adapter->
hw.mac.type) {
2304 #ifdef CONFIG_IGB_PTP
2315 if (adapter->ptp_clock)
2346 static int igb_ethtool_begin(
struct net_device *netdev)
2348 struct igb_adapter *adapter = netdev_priv(netdev);
2349 pm_runtime_get_sync(&adapter->
pdev->dev);
2353 static void igb_ethtool_complete(
struct net_device *netdev)
2355 struct igb_adapter *adapter = netdev_priv(netdev);
2356 pm_runtime_put(&adapter->
pdev->dev);
2359 static const struct ethtool_ops igb_ethtool_ops = {
2360 .get_settings = igb_get_settings,
2361 .set_settings = igb_set_settings,
2362 .get_drvinfo = igb_get_drvinfo,
2363 .get_regs_len = igb_get_regs_len,
2364 .get_regs = igb_get_regs,
2365 .get_wol = igb_get_wol,
2366 .set_wol = igb_set_wol,
2367 .get_msglevel = igb_get_msglevel,
2368 .set_msglevel = igb_set_msglevel,
2369 .nway_reset = igb_nway_reset,
2370 .get_link = igb_get_link,
2371 .get_eeprom_len = igb_get_eeprom_len,
2372 .get_eeprom = igb_get_eeprom,
2373 .set_eeprom = igb_set_eeprom,
2374 .get_ringparam = igb_get_ringparam,
2375 .set_ringparam = igb_set_ringparam,
2376 .get_pauseparam = igb_get_pauseparam,
2377 .set_pauseparam = igb_set_pauseparam,
2378 .self_test = igb_diag_test,
2379 .get_strings = igb_get_strings,
2380 .set_phys_id = igb_set_phys_id,
2381 .get_sset_count = igb_get_sset_count,
2382 .get_ethtool_stats = igb_get_ethtool_stats,
2383 .get_coalesce = igb_get_coalesce,
2384 .set_coalesce = igb_set_coalesce,
2385 .get_ts_info = igb_get_ts_info,
2386 .begin = igb_ethtool_begin,
2387 .complete = igb_ethtool_complete,