32 #include <asm/uaccess.h>
43 #define E1000_STAT(m) E1000_STATS, \
44 sizeof(((struct e1000_adapter *)0)->m), \
45 offsetof(struct e1000_adapter, m)
46 #define E1000_NETDEV_STAT(m) NETDEV_STATS, \
47 sizeof(((struct net_device *)0)->m), \
48 offsetof(struct net_device, m)
50 static const struct e1000_stats e1000_gstrings_stats[] = {
79 {
"tx_timeout_count",
E1000_STAT(tx_timeout_count) },
80 {
"tx_restart_queue",
E1000_STAT(restart_queue) },
91 {
"rx_csum_offload_good",
E1000_STAT(hw_csum_good) },
92 {
"rx_csum_offload_errors",
E1000_STAT(hw_csum_err) },
93 {
"alloc_rx_buff_failed",
E1000_STAT(alloc_rx_buff_failed) },
99 #define E1000_QUEUE_STATS_LEN 0
100 #define E1000_GLOBAL_STATS_LEN ARRAY_SIZE(e1000_gstrings_stats)
101 #define E1000_STATS_LEN (E1000_GLOBAL_STATS_LEN + E1000_QUEUE_STATS_LEN)
103 "Register test (offline)",
"Eeprom test (offline)",
104 "Interrupt test (offline)",
"Loopback test (offline)",
105 "Link test (on/offline)"
107 #define E1000_TEST_LEN ARRAY_SIZE(e1000_gstrings_test)
109 static int e1000_get_settings(
struct net_device *netdev,
161 ethtool_cmd_speed_set(ecmd, adapter->
link_speed);
171 ethtool_cmd_speed_set(ecmd, -1);
180 netif_carrier_ok(netdev))
194 static int e1000_set_settings(
struct net_device *netdev,
211 e_err(drv,
"forcing MDI/MDI-X state is not supported when link speed and/or duplex are forced\n");
231 u32 speed = ethtool_cmd_speed(ecmd);
249 if (netif_running(adapter->
netdev)) {
270 if (!netif_carrier_ok(netdev))
271 adapter->
hw.get_link_status = 1;
276 static void e1000_get_pauseparam(
struct net_device *netdev,
295 static int e1000_set_pauseparam(
struct net_device *netdev,
319 if (netif_running(adapter->
netdev)) {
344 static int e1000_get_regs_len(
struct net_device *netdev)
346 #define E1000_REGS_LEN 32
358 memset(p, 0, E1000_REGS_LEN *
sizeof(
u32));
365 regs_buff[2] =
er32(RCTL);
366 regs_buff[3] =
er32(RDLEN);
367 regs_buff[4] =
er32(RDH);
368 regs_buff[5] =
er32(RDT);
369 regs_buff[6] =
er32(RDTR);
372 regs_buff[8] =
er32(TDLEN);
373 regs_buff[9] =
er32(TDH);
374 regs_buff[10] =
er32(TDT);
375 regs_buff[11] =
er32(TIDV);
383 regs_buff[13] = (
u32)phy_data;
388 regs_buff[14] = (
u32)phy_data;
393 regs_buff[15] = (
u32)phy_data;
398 regs_buff[16] = (
u32)phy_data;
403 regs_buff[18] = (
u32)phy_data;
408 regs_buff[19] = (
u32)phy_data;
411 regs_buff[23] = regs_buff[18];
415 regs_buff[13] = (
u32)phy_data;
420 regs_buff[17] = (
u32)phy_data;
421 regs_buff[18] = regs_buff[13];
423 regs_buff[20] = regs_buff[17];
425 regs_buff[22] = adapter->
phy_stats.receive_errors;
426 regs_buff[23] = regs_buff[13];
428 regs_buff[21] = adapter->
phy_stats.idle_errors;
430 regs_buff[24] = (
u32)phy_data;
431 regs_buff[25] = regs_buff[24];
434 regs_buff[26] =
er32(MANC);
438 static int e1000_get_eeprom_len(
struct net_device *netdev)
443 return hw->
eeprom.word_size * 2;
446 static int e1000_get_eeprom(
struct net_device *netdev,
452 int first_word, last_word;
456 if (eeprom->
len == 0)
461 first_word = eeprom->
offset >> 1;
462 last_word = (eeprom->
offset + eeprom->
len - 1) >> 1;
471 last_word - first_word + 1,
474 for (i = 0; i < last_word - first_word + 1; i++) {
483 for (i = 0; i < last_word - first_word + 1; i++)
493 static int e1000_set_eeprom(
struct net_device *netdev,
500 int max_len, first_word, last_word, ret_val = 0;
503 if (eeprom->
len == 0)
509 max_len = hw->
eeprom.word_size * 2;
511 first_word = eeprom->
offset >> 1;
512 last_word = (eeprom->
offset + eeprom->
len - 1) >> 1;
517 ptr = (
void *)eeprom_buff;
526 if (((eeprom->
offset + eeprom->
len) & 1) && (ret_val == 0)) {
530 &eeprom_buff[last_word - first_word]);
534 for (i = 0; i < last_word - first_word + 1; i++)
539 for (i = 0; i < last_word - first_word + 1; i++)
543 last_word - first_word + 1, eeprom_buff);
553 static void e1000_get_drvinfo(
struct net_device *netdev,
566 drvinfo->
eedump_len = e1000_get_eeprom_len(netdev);
569 static void e1000_get_ringparam(
struct net_device *netdev,
586 static int e1000_set_ringparam(
struct net_device *netdev,
602 if (netif_running(adapter->
netdev))
635 if (netif_running(adapter->
netdev)) {
682 {0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF};
688 writel(write & test[i], address);
689 read =
readl(address);
690 if (read != (write & test[i] & mask)) {
691 e_err(drv,
"pattern test reg %04X failed: "
692 "got 0x%08X expected 0x%08X\n",
693 reg, read, (write & test[i] & mask));
701 static bool reg_set_and_check(
struct e1000_adapter *adapter,
u64 *data,
int reg,
708 writel(write & mask, address);
709 read =
readl(address);
710 if ((read & mask) != (write & mask)) {
711 e_err(drv,
"set/check reg %04X test failed: "
712 "got 0x%08X expected 0x%08X\n",
713 reg, (read & mask), (write & mask));
720 #define REG_PATTERN_TEST(reg, mask, write) \
722 if (reg_pattern_test(adapter, data, \
723 (hw->mac_type >= e1000_82543) \
724 ? E1000_##reg : E1000_82542_##reg, \
729 #define REG_SET_AND_CHECK(reg, mask, write) \
731 if (reg_set_and_check(adapter, data, \
732 (hw->mac_type >= e1000_82543) \
733 ? E1000_##reg : E1000_82542_##reg, \
755 if (value != after) {
756 e_err(drv,
"failed STATUS register test got: "
757 "0x%08X expected: 0x%08X\n", after, value);
794 for (i = 0; i <
value; i++) {
809 for (i = 0; i <
value; i++)
840 static irqreturn_t e1000_test_intr(
int irq,
void *data)
855 bool shared_int =
true;
867 netdev->
name, netdev)) {
871 e_info(hw,
"testing %s interrupt\n", (shared_int ?
872 "shared" :
"unshared"));
880 for (; i < 10; i++) {
952 static void e1000_free_desc_rings(
struct e1000_adapter *adapter)
960 for (i = 0; i < txdr->
count; i++) {
972 for (i = 0; i < rxdr->
count; i++) {
1000 static int e1000_setup_desc_rings(
struct e1000_adapter *adapter)
1032 ew32(TDBAL, ((
u64)txdr->
dma & 0x00000000FFFFFFFF));
1041 for (i = 0; i < txdr->
count; i++) {
1044 unsigned int size = 1024;
1099 for (i = 0; i < rxdr->
count; i++) {
1121 e1000_free_desc_rings(adapter);
1125 static void e1000_phy_disable_receiver(
struct e1000_adapter *adapter)
1136 static void e1000_phy_reset_clk_and_crs(
struct e1000_adapter *adapter)
1160 static int e1000_nonintegrated_phy_loopback(
struct e1000_adapter *adapter)
1190 e1000_phy_reset_clk_and_crs(adapter);
1198 e1000_phy_reset_clk_and_crs(adapter);
1201 e1000_phy_disable_receiver(adapter);
1209 e1000_phy_reset_clk_and_crs(adapter);
1213 if (phy_reg != 0x4100)
1217 if (phy_reg != 0x0070)
1221 if (phy_reg != 0x001A)
1227 static int e1000_integrated_phy_loopback(
struct e1000_adapter *adapter)
1275 e1000_phy_disable_receiver(adapter);
1282 static int e1000_set_phy_loopback(
struct e1000_adapter *adapter)
1295 while (e1000_nonintegrated_phy_loopback(adapter) &&
1312 return e1000_integrated_phy_loopback(adapter);
1328 static int e1000_setup_loopback_test(
struct e1000_adapter *adapter)
1340 return e1000_set_phy_loopback(adapter);
1349 return e1000_set_phy_loopback(adapter);
1354 static void e1000_loopback_cleanup(
struct e1000_adapter *adapter)
1373 phy_reg &= ~MII_CR_LOOPBACK;
1381 static void e1000_create_lbtest_frame(
struct sk_buff *skb,
1382 unsigned int frame_size)
1386 memset(&skb->
data[frame_size / 2], 0xAA, frame_size / 2 - 1);
1387 memset(&skb->
data[frame_size / 2 + 10], 0xBE, 1);
1388 memset(&skb->
data[frame_size / 2 + 12], 0xAF, 1);
1391 static int e1000_check_lbtest_frame(
struct sk_buff *skb,
1392 unsigned int frame_size)
1395 if (*(skb->
data + 3) == 0xFF) {
1396 if ((*(skb->
data + frame_size / 2 + 10) == 0xBE) &&
1397 (*(skb->
data + frame_size / 2 + 12) == 0xAF)) {
1404 static int e1000_run_loopback_test(
struct e1000_adapter *adapter)
1410 int i,
j,
k,
l,
lc, good_cnt, ret_val=0;
1421 lc = ((txdr->
count / 64) * 2) + 1;
1423 lc = ((rxdr->
count / 64) * 2) + 1;
1426 for (j = 0; j <=
lc; j++) {
1427 for (i = 0; i < 64; i++) {
1428 e1000_create_lbtest_frame(txdr->
buffer_info[i].skb,
1447 ret_val = e1000_check_lbtest_frame(
1457 }
while (good_cnt < 64 && jiffies < (time + 20));
1458 if (good_cnt != 64) {
1462 if (jiffies >= (time + 2)) {
1472 *data = e1000_setup_desc_rings(adapter);
1475 *data = e1000_setup_loopback_test(adapter);
1478 *data = e1000_run_loopback_test(adapter);
1479 e1000_loopback_cleanup(adapter);
1482 e1000_free_desc_rings(adapter);
1502 }
while (i++ < 3750);
1517 static int e1000_get_sset_count(
struct net_device *netdev,
int sset)
1529 static void e1000_diag_test(
struct net_device *netdev,
1534 bool if_running = netif_running(netdev);
1545 e_info(hw,
"offline testing starting\n");
1549 if (e1000_link_test(adapter, &data[4]))
1558 if (e1000_reg_test(adapter, &data[0]))
1562 if (e1000_eeprom_test(adapter, &data[1]))
1566 if (e1000_intr_test(adapter, &data[2]))
1572 if (e1000_loopback_test(adapter, &data[3]))
1585 e_info(hw,
"online testing starting\n");
1587 if (e1000_link_test(adapter, &data[4]))
1601 static int e1000_wol_exclusion(
struct e1000_adapter *adapter,
1655 static void e1000_get_wol(
struct net_device *netdev,
1667 if (e1000_wol_exclusion(adapter, wol) ||
1668 !device_can_wakeup(&adapter->
pdev->dev))
1678 e_err(drv,
"Interface does not support directed "
1679 "(unicast) frame wake-up packets\n");
1703 if (e1000_wol_exclusion(adapter, wol) ||
1704 !device_can_wakeup(&adapter->
pdev->dev))
1710 e_err(drv,
"Interface does not support directed "
1711 "(unicast) frame wake-up packets\n");
1736 static int e1000_set_phys_id(
struct net_device *netdev,
1762 static int e1000_get_coalesce(
struct net_device *netdev,
1778 static int e1000_set_coalesce(
struct net_device *netdev,
1796 adapter->
itr = 20000;
1804 ew32(
ITR, 1000000000 / (adapter->
itr * 256));
1811 static int e1000_nway_reset(
struct net_device *netdev)
1814 if (netif_running(netdev))
1819 static void e1000_get_ethtool_stats(
struct net_device *netdev,
1828 switch (e1000_gstrings_stats[i].
type) {
1830 p = (
char *) netdev +
1831 e1000_gstrings_stats[i].stat_offset;
1834 p = (
char *) adapter +
1835 e1000_gstrings_stats[i].stat_offset;
1845 static void e1000_get_strings(
struct net_device *netdev,
u32 stringset,
1851 switch (stringset) {
1853 memcpy(data, *e1000_gstrings_test,
1854 sizeof(e1000_gstrings_test));
1858 memcpy(p, e1000_gstrings_stats[i].stat_string,
1867 static const struct ethtool_ops e1000_ethtool_ops = {
1868 .get_settings = e1000_get_settings,
1869 .set_settings = e1000_set_settings,
1870 .get_drvinfo = e1000_get_drvinfo,
1871 .get_regs_len = e1000_get_regs_len,
1872 .get_regs = e1000_get_regs,
1873 .get_wol = e1000_get_wol,
1874 .set_wol = e1000_set_wol,
1875 .get_msglevel = e1000_get_msglevel,
1876 .set_msglevel = e1000_set_msglevel,
1877 .nway_reset = e1000_nway_reset,
1878 .get_link = e1000_get_link,
1879 .get_eeprom_len = e1000_get_eeprom_len,
1880 .get_eeprom = e1000_get_eeprom,
1881 .set_eeprom = e1000_set_eeprom,
1882 .get_ringparam = e1000_get_ringparam,
1883 .set_ringparam = e1000_set_ringparam,
1884 .get_pauseparam = e1000_get_pauseparam,
1885 .set_pauseparam = e1000_set_pauseparam,
1886 .self_test = e1000_diag_test,
1887 .get_strings = e1000_get_strings,
1888 .set_phys_id = e1000_set_phys_id,
1889 .get_ethtool_stats = e1000_get_ethtool_stats,
1890 .get_sset_count = e1000_get_sset_count,
1891 .get_coalesce = e1000_get_coalesce,
1892 .set_coalesce = e1000_set_coalesce,