1 /*******************************************************************************
3 Intel PRO/1000 Linux driver
4 Copyright(c) 1999 - 2006 Intel Corporation.
6 This program is free software; you can redistribute it and/or modify it
7 under the terms and conditions of the GNU General Public License,
8 version 2, as published by the Free Software Foundation.
10 This program is distributed in the hope it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 You should have received a copy of the GNU General Public License along with
16 this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
19 The full GNU General Public License is included in this distribution in
20 the file called "COPYING".
25 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
27 *******************************************************************************/
29 /* ethtool support for e1000 */
32 #include <asm/uaccess.h>
34 enum {NETDEV_STATS, E1000_STATS};
37 char stat_string[ETH_GSTRING_LEN];
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[] = {
51 { "rx_packets", E1000_STAT(stats.gprc) },
52 { "tx_packets", E1000_STAT(stats.gptc) },
53 { "rx_bytes", E1000_STAT(stats.gorcl) },
54 { "tx_bytes", E1000_STAT(stats.gotcl) },
55 { "rx_broadcast", E1000_STAT(stats.bprc) },
56 { "tx_broadcast", E1000_STAT(stats.bptc) },
57 { "rx_multicast", E1000_STAT(stats.mprc) },
58 { "tx_multicast", E1000_STAT(stats.mptc) },
59 { "rx_errors", E1000_STAT(stats.rxerrc) },
60 { "tx_errors", E1000_STAT(stats.txerrc) },
61 { "tx_dropped", E1000_NETDEV_STAT(stats.tx_dropped) },
62 { "multicast", E1000_STAT(stats.mprc) },
63 { "collisions", E1000_STAT(stats.colc) },
64 { "rx_length_errors", E1000_STAT(stats.rlerrc) },
65 { "rx_over_errors", E1000_NETDEV_STAT(stats.rx_over_errors) },
66 { "rx_crc_errors", E1000_STAT(stats.crcerrs) },
67 { "rx_frame_errors", E1000_NETDEV_STAT(stats.rx_frame_errors) },
68 { "rx_no_buffer_count", E1000_STAT(stats.rnbc) },
69 { "rx_missed_errors", E1000_STAT(stats.mpc) },
70 { "tx_aborted_errors", E1000_STAT(stats.ecol) },
71 { "tx_carrier_errors", E1000_STAT(stats.tncrs) },
72 { "tx_fifo_errors", E1000_NETDEV_STAT(stats.tx_fifo_errors) },
73 { "tx_heartbeat_errors", E1000_NETDEV_STAT(stats.tx_heartbeat_errors) },
74 { "tx_window_errors", E1000_STAT(stats.latecol) },
75 { "tx_abort_late_coll", E1000_STAT(stats.latecol) },
76 { "tx_deferred_ok", E1000_STAT(stats.dc) },
77 { "tx_single_coll_ok", E1000_STAT(stats.scc) },
78 { "tx_multi_coll_ok", E1000_STAT(stats.mcc) },
79 { "tx_timeout_count", E1000_STAT(tx_timeout_count) },
80 { "tx_restart_queue", E1000_STAT(restart_queue) },
81 { "rx_long_length_errors", E1000_STAT(stats.roc) },
82 { "rx_short_length_errors", E1000_STAT(stats.ruc) },
83 { "rx_align_errors", E1000_STAT(stats.algnerrc) },
84 { "tx_tcp_seg_good", E1000_STAT(stats.tsctc) },
85 { "tx_tcp_seg_failed", E1000_STAT(stats.tsctfc) },
86 { "rx_flow_control_xon", E1000_STAT(stats.xonrxc) },
87 { "rx_flow_control_xoff", E1000_STAT(stats.xoffrxc) },
88 { "tx_flow_control_xon", E1000_STAT(stats.xontxc) },
89 { "tx_flow_control_xoff", E1000_STAT(stats.xofftxc) },
90 { "rx_long_byte_count", E1000_STAT(stats.gorcl) },
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) },
94 { "tx_smbus", E1000_STAT(stats.mgptc) },
95 { "rx_smbus", E1000_STAT(stats.mgprc) },
96 { "dropped_smbus", E1000_STAT(stats.mgpdc) },
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)
102 static const char e1000_gstrings_test[][ETH_GSTRING_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,
110 struct ethtool_cmd *ecmd)
112 struct e1000_adapter *adapter = netdev_priv(netdev);
113 struct e1000_hw *hw = &adapter->hw;
115 if (hw->media_type == e1000_media_type_copper) {
117 ecmd->supported = (SUPPORTED_10baseT_Half |
118 SUPPORTED_10baseT_Full |
119 SUPPORTED_100baseT_Half |
120 SUPPORTED_100baseT_Full |
121 SUPPORTED_1000baseT_Full|
124 ecmd->advertising = ADVERTISED_TP;
126 if (hw->autoneg == 1) {
127 ecmd->advertising |= ADVERTISED_Autoneg;
128 /* the e1000 autoneg seems to match ethtool nicely */
129 ecmd->advertising |= hw->autoneg_advertised;
132 ecmd->port = PORT_TP;
133 ecmd->phy_address = hw->phy_addr;
135 if (hw->mac_type == e1000_82543)
136 ecmd->transceiver = XCVR_EXTERNAL;
138 ecmd->transceiver = XCVR_INTERNAL;
141 ecmd->supported = (SUPPORTED_1000baseT_Full |
145 ecmd->advertising = (ADVERTISED_1000baseT_Full |
149 ecmd->port = PORT_FIBRE;
151 if (hw->mac_type >= e1000_82545)
152 ecmd->transceiver = XCVR_INTERNAL;
154 ecmd->transceiver = XCVR_EXTERNAL;
157 if (er32(STATUS) & E1000_STATUS_LU) {
159 e1000_get_speed_and_duplex(hw, &adapter->link_speed,
160 &adapter->link_duplex);
161 ecmd->speed = adapter->link_speed;
163 /* unfortunatly FULL_DUPLEX != DUPLEX_FULL
164 * and HALF_DUPLEX != DUPLEX_HALF */
166 if (adapter->link_duplex == FULL_DUPLEX)
167 ecmd->duplex = DUPLEX_FULL;
169 ecmd->duplex = DUPLEX_HALF;
175 ecmd->autoneg = ((hw->media_type == e1000_media_type_fiber) ||
176 hw->autoneg) ? AUTONEG_ENABLE : AUTONEG_DISABLE;
180 static int e1000_set_settings(struct net_device *netdev,
181 struct ethtool_cmd *ecmd)
183 struct e1000_adapter *adapter = netdev_priv(netdev);
184 struct e1000_hw *hw = &adapter->hw;
186 while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
189 if (ecmd->autoneg == AUTONEG_ENABLE) {
191 if (hw->media_type == e1000_media_type_fiber)
192 hw->autoneg_advertised = ADVERTISED_1000baseT_Full |
196 hw->autoneg_advertised = ecmd->advertising |
199 ecmd->advertising = hw->autoneg_advertised;
201 if (e1000_set_spd_dplx(adapter, ecmd->speed + ecmd->duplex)) {
202 clear_bit(__E1000_RESETTING, &adapter->flags);
208 if (netif_running(adapter->netdev)) {
212 e1000_reset(adapter);
214 clear_bit(__E1000_RESETTING, &adapter->flags);
218 static u32 e1000_get_link(struct net_device *netdev)
220 struct e1000_adapter *adapter = netdev_priv(netdev);
223 * If the link is not reported up to netdev, interrupts are disabled,
224 * and so the physical link state may have changed since we last
225 * looked. Set get_link_status to make sure that the true link
226 * state is interrogated, rather than pulling a cached and possibly
227 * stale link state from the driver.
229 if (!netif_carrier_ok(netdev))
230 adapter->hw.get_link_status = 1;
232 return e1000_has_link(adapter);
235 static void e1000_get_pauseparam(struct net_device *netdev,
236 struct ethtool_pauseparam *pause)
238 struct e1000_adapter *adapter = netdev_priv(netdev);
239 struct e1000_hw *hw = &adapter->hw;
242 (adapter->fc_autoneg ? AUTONEG_ENABLE : AUTONEG_DISABLE);
244 if (hw->fc == E1000_FC_RX_PAUSE)
246 else if (hw->fc == E1000_FC_TX_PAUSE)
248 else if (hw->fc == E1000_FC_FULL) {
254 static int e1000_set_pauseparam(struct net_device *netdev,
255 struct ethtool_pauseparam *pause)
257 struct e1000_adapter *adapter = netdev_priv(netdev);
258 struct e1000_hw *hw = &adapter->hw;
261 adapter->fc_autoneg = pause->autoneg;
263 while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
266 if (pause->rx_pause && pause->tx_pause)
267 hw->fc = E1000_FC_FULL;
268 else if (pause->rx_pause && !pause->tx_pause)
269 hw->fc = E1000_FC_RX_PAUSE;
270 else if (!pause->rx_pause && pause->tx_pause)
271 hw->fc = E1000_FC_TX_PAUSE;
272 else if (!pause->rx_pause && !pause->tx_pause)
273 hw->fc = E1000_FC_NONE;
275 hw->original_fc = hw->fc;
277 if (adapter->fc_autoneg == AUTONEG_ENABLE) {
278 if (netif_running(adapter->netdev)) {
282 e1000_reset(adapter);
284 retval = ((hw->media_type == e1000_media_type_fiber) ?
285 e1000_setup_link(hw) : e1000_force_mac_fc(hw));
287 clear_bit(__E1000_RESETTING, &adapter->flags);
291 static u32 e1000_get_rx_csum(struct net_device *netdev)
293 struct e1000_adapter *adapter = netdev_priv(netdev);
294 return adapter->rx_csum;
297 static int e1000_set_rx_csum(struct net_device *netdev, u32 data)
299 struct e1000_adapter *adapter = netdev_priv(netdev);
300 adapter->rx_csum = data;
302 if (netif_running(netdev))
303 e1000_reinit_locked(adapter);
305 e1000_reset(adapter);
309 static u32 e1000_get_tx_csum(struct net_device *netdev)
311 return (netdev->features & NETIF_F_HW_CSUM) != 0;
314 static int e1000_set_tx_csum(struct net_device *netdev, u32 data)
316 struct e1000_adapter *adapter = netdev_priv(netdev);
317 struct e1000_hw *hw = &adapter->hw;
319 if (hw->mac_type < e1000_82543) {
326 netdev->features |= NETIF_F_HW_CSUM;
328 netdev->features &= ~NETIF_F_HW_CSUM;
333 static int e1000_set_tso(struct net_device *netdev, u32 data)
335 struct e1000_adapter *adapter = netdev_priv(netdev);
336 struct e1000_hw *hw = &adapter->hw;
338 if ((hw->mac_type < e1000_82544) ||
339 (hw->mac_type == e1000_82547))
340 return data ? -EINVAL : 0;
343 netdev->features |= NETIF_F_TSO;
345 netdev->features &= ~NETIF_F_TSO;
347 netdev->features &= ~NETIF_F_TSO6;
349 e_info(probe, "TSO is %s\n", data ? "Enabled" : "Disabled");
350 adapter->tso_force = true;
354 static u32 e1000_get_msglevel(struct net_device *netdev)
356 struct e1000_adapter *adapter = netdev_priv(netdev);
357 return adapter->msg_enable;
360 static void e1000_set_msglevel(struct net_device *netdev, u32 data)
362 struct e1000_adapter *adapter = netdev_priv(netdev);
363 adapter->msg_enable = data;
366 static int e1000_get_regs_len(struct net_device *netdev)
368 #define E1000_REGS_LEN 32
369 return E1000_REGS_LEN * sizeof(u32);
372 static void e1000_get_regs(struct net_device *netdev, struct ethtool_regs *regs,
375 struct e1000_adapter *adapter = netdev_priv(netdev);
376 struct e1000_hw *hw = &adapter->hw;
380 memset(p, 0, E1000_REGS_LEN * sizeof(u32));
382 regs->version = (1 << 24) | (hw->revision_id << 16) | hw->device_id;
384 regs_buff[0] = er32(CTRL);
385 regs_buff[1] = er32(STATUS);
387 regs_buff[2] = er32(RCTL);
388 regs_buff[3] = er32(RDLEN);
389 regs_buff[4] = er32(RDH);
390 regs_buff[5] = er32(RDT);
391 regs_buff[6] = er32(RDTR);
393 regs_buff[7] = er32(TCTL);
394 regs_buff[8] = er32(TDLEN);
395 regs_buff[9] = er32(TDH);
396 regs_buff[10] = er32(TDT);
397 regs_buff[11] = er32(TIDV);
399 regs_buff[12] = hw->phy_type; /* PHY type (IGP=1, M88=0) */
400 if (hw->phy_type == e1000_phy_igp) {
401 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
402 IGP01E1000_PHY_AGC_A);
403 e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_A &
404 IGP01E1000_PHY_PAGE_SELECT, &phy_data);
405 regs_buff[13] = (u32)phy_data; /* cable length */
406 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
407 IGP01E1000_PHY_AGC_B);
408 e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_B &
409 IGP01E1000_PHY_PAGE_SELECT, &phy_data);
410 regs_buff[14] = (u32)phy_data; /* cable length */
411 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
412 IGP01E1000_PHY_AGC_C);
413 e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_C &
414 IGP01E1000_PHY_PAGE_SELECT, &phy_data);
415 regs_buff[15] = (u32)phy_data; /* cable length */
416 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
417 IGP01E1000_PHY_AGC_D);
418 e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_D &
419 IGP01E1000_PHY_PAGE_SELECT, &phy_data);
420 regs_buff[16] = (u32)phy_data; /* cable length */
421 regs_buff[17] = 0; /* extended 10bt distance (not needed) */
422 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, 0x0);
423 e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS &
424 IGP01E1000_PHY_PAGE_SELECT, &phy_data);
425 regs_buff[18] = (u32)phy_data; /* cable polarity */
426 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
427 IGP01E1000_PHY_PCS_INIT_REG);
428 e1000_read_phy_reg(hw, IGP01E1000_PHY_PCS_INIT_REG &
429 IGP01E1000_PHY_PAGE_SELECT, &phy_data);
430 regs_buff[19] = (u32)phy_data; /* cable polarity */
431 regs_buff[20] = 0; /* polarity correction enabled (always) */
432 regs_buff[22] = 0; /* phy receive errors (unavailable) */
433 regs_buff[23] = regs_buff[18]; /* mdix mode */
434 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, 0x0);
436 e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
437 regs_buff[13] = (u32)phy_data; /* cable length */
438 regs_buff[14] = 0; /* Dummy (to align w/ IGP phy reg dump) */
439 regs_buff[15] = 0; /* Dummy (to align w/ IGP phy reg dump) */
440 regs_buff[16] = 0; /* Dummy (to align w/ IGP phy reg dump) */
441 e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
442 regs_buff[17] = (u32)phy_data; /* extended 10bt distance */
443 regs_buff[18] = regs_buff[13]; /* cable polarity */
444 regs_buff[19] = 0; /* Dummy (to align w/ IGP phy reg dump) */
445 regs_buff[20] = regs_buff[17]; /* polarity correction */
446 /* phy receive errors */
447 regs_buff[22] = adapter->phy_stats.receive_errors;
448 regs_buff[23] = regs_buff[13]; /* mdix mode */
450 regs_buff[21] = adapter->phy_stats.idle_errors; /* phy idle errors */
451 e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
452 regs_buff[24] = (u32)phy_data; /* phy local receiver status */
453 regs_buff[25] = regs_buff[24]; /* phy remote receiver status */
454 if (hw->mac_type >= e1000_82540 &&
455 hw->media_type == e1000_media_type_copper) {
456 regs_buff[26] = er32(MANC);
460 static int e1000_get_eeprom_len(struct net_device *netdev)
462 struct e1000_adapter *adapter = netdev_priv(netdev);
463 struct e1000_hw *hw = &adapter->hw;
465 return hw->eeprom.word_size * 2;
468 static int e1000_get_eeprom(struct net_device *netdev,
469 struct ethtool_eeprom *eeprom, u8 *bytes)
471 struct e1000_adapter *adapter = netdev_priv(netdev);
472 struct e1000_hw *hw = &adapter->hw;
474 int first_word, last_word;
478 if (eeprom->len == 0)
481 eeprom->magic = hw->vendor_id | (hw->device_id << 16);
483 first_word = eeprom->offset >> 1;
484 last_word = (eeprom->offset + eeprom->len - 1) >> 1;
486 eeprom_buff = kmalloc(sizeof(u16) *
487 (last_word - first_word + 1), GFP_KERNEL);
491 if (hw->eeprom.type == e1000_eeprom_spi)
492 ret_val = e1000_read_eeprom(hw, first_word,
493 last_word - first_word + 1,
496 for (i = 0; i < last_word - first_word + 1; i++) {
497 ret_val = e1000_read_eeprom(hw, first_word + i, 1,
504 /* Device's eeprom is always little-endian, word addressable */
505 for (i = 0; i < last_word - first_word + 1; i++)
506 le16_to_cpus(&eeprom_buff[i]);
508 memcpy(bytes, (u8 *)eeprom_buff + (eeprom->offset & 1),
515 static int e1000_set_eeprom(struct net_device *netdev,
516 struct ethtool_eeprom *eeprom, u8 *bytes)
518 struct e1000_adapter *adapter = netdev_priv(netdev);
519 struct e1000_hw *hw = &adapter->hw;
522 int max_len, first_word, last_word, ret_val = 0;
525 if (eeprom->len == 0)
528 if (eeprom->magic != (hw->vendor_id | (hw->device_id << 16)))
531 max_len = hw->eeprom.word_size * 2;
533 first_word = eeprom->offset >> 1;
534 last_word = (eeprom->offset + eeprom->len - 1) >> 1;
535 eeprom_buff = kmalloc(max_len, GFP_KERNEL);
539 ptr = (void *)eeprom_buff;
541 if (eeprom->offset & 1) {
542 /* need read/modify/write of first changed EEPROM word */
543 /* only the second byte of the word is being modified */
544 ret_val = e1000_read_eeprom(hw, first_word, 1,
548 if (((eeprom->offset + eeprom->len) & 1) && (ret_val == 0)) {
549 /* need read/modify/write of last changed EEPROM word */
550 /* only the first byte of the word is being modified */
551 ret_val = e1000_read_eeprom(hw, last_word, 1,
552 &eeprom_buff[last_word - first_word]);
555 /* Device's eeprom is always little-endian, word addressable */
556 for (i = 0; i < last_word - first_word + 1; i++)
557 le16_to_cpus(&eeprom_buff[i]);
559 memcpy(ptr, bytes, eeprom->len);
561 for (i = 0; i < last_word - first_word + 1; i++)
562 eeprom_buff[i] = cpu_to_le16(eeprom_buff[i]);
564 ret_val = e1000_write_eeprom(hw, first_word,
565 last_word - first_word + 1, eeprom_buff);
567 /* Update the checksum over the first part of the EEPROM if needed */
568 if ((ret_val == 0) && (first_word <= EEPROM_CHECKSUM_REG))
569 e1000_update_eeprom_checksum(hw);
575 static void e1000_get_drvinfo(struct net_device *netdev,
576 struct ethtool_drvinfo *drvinfo)
578 struct e1000_adapter *adapter = netdev_priv(netdev);
579 char firmware_version[32];
581 strncpy(drvinfo->driver, e1000_driver_name, 32);
582 strncpy(drvinfo->version, e1000_driver_version, 32);
584 sprintf(firmware_version, "N/A");
585 strncpy(drvinfo->fw_version, firmware_version, 32);
586 strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32);
587 drvinfo->regdump_len = e1000_get_regs_len(netdev);
588 drvinfo->eedump_len = e1000_get_eeprom_len(netdev);
591 static void e1000_get_ringparam(struct net_device *netdev,
592 struct ethtool_ringparam *ring)
594 struct e1000_adapter *adapter = netdev_priv(netdev);
595 struct e1000_hw *hw = &adapter->hw;
596 e1000_mac_type mac_type = hw->mac_type;
597 struct e1000_tx_ring *txdr = adapter->tx_ring;
598 struct e1000_rx_ring *rxdr = adapter->rx_ring;
600 ring->rx_max_pending = (mac_type < e1000_82544) ? E1000_MAX_RXD :
602 ring->tx_max_pending = (mac_type < e1000_82544) ? E1000_MAX_TXD :
604 ring->rx_mini_max_pending = 0;
605 ring->rx_jumbo_max_pending = 0;
606 ring->rx_pending = rxdr->count;
607 ring->tx_pending = txdr->count;
608 ring->rx_mini_pending = 0;
609 ring->rx_jumbo_pending = 0;
612 static int e1000_set_ringparam(struct net_device *netdev,
613 struct ethtool_ringparam *ring)
615 struct e1000_adapter *adapter = netdev_priv(netdev);
616 struct e1000_hw *hw = &adapter->hw;
617 e1000_mac_type mac_type = hw->mac_type;
618 struct e1000_tx_ring *txdr, *tx_old;
619 struct e1000_rx_ring *rxdr, *rx_old;
622 if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending))
625 while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
628 if (netif_running(adapter->netdev))
631 tx_old = adapter->tx_ring;
632 rx_old = adapter->rx_ring;
635 txdr = kcalloc(adapter->num_tx_queues, sizeof(struct e1000_tx_ring), GFP_KERNEL);
639 rxdr = kcalloc(adapter->num_rx_queues, sizeof(struct e1000_rx_ring), GFP_KERNEL);
643 adapter->tx_ring = txdr;
644 adapter->rx_ring = rxdr;
646 rxdr->count = max(ring->rx_pending,(u32)E1000_MIN_RXD);
647 rxdr->count = min(rxdr->count,(u32)(mac_type < e1000_82544 ?
648 E1000_MAX_RXD : E1000_MAX_82544_RXD));
649 rxdr->count = ALIGN(rxdr->count, REQ_RX_DESCRIPTOR_MULTIPLE);
651 txdr->count = max(ring->tx_pending,(u32)E1000_MIN_TXD);
652 txdr->count = min(txdr->count,(u32)(mac_type < e1000_82544 ?
653 E1000_MAX_TXD : E1000_MAX_82544_TXD));
654 txdr->count = ALIGN(txdr->count, REQ_TX_DESCRIPTOR_MULTIPLE);
656 for (i = 0; i < adapter->num_tx_queues; i++)
657 txdr[i].count = txdr->count;
658 for (i = 0; i < adapter->num_rx_queues; i++)
659 rxdr[i].count = rxdr->count;
661 if (netif_running(adapter->netdev)) {
662 /* Try to get new resources before deleting old */
663 err = e1000_setup_all_rx_resources(adapter);
666 err = e1000_setup_all_tx_resources(adapter);
670 /* save the new, restore the old in order to free it,
671 * then restore the new back again */
673 adapter->rx_ring = rx_old;
674 adapter->tx_ring = tx_old;
675 e1000_free_all_rx_resources(adapter);
676 e1000_free_all_tx_resources(adapter);
679 adapter->rx_ring = rxdr;
680 adapter->tx_ring = txdr;
681 err = e1000_up(adapter);
686 clear_bit(__E1000_RESETTING, &adapter->flags);
689 e1000_free_all_rx_resources(adapter);
691 adapter->rx_ring = rx_old;
692 adapter->tx_ring = tx_old;
699 clear_bit(__E1000_RESETTING, &adapter->flags);
703 static bool reg_pattern_test(struct e1000_adapter *adapter, u64 *data, int reg,
706 struct e1000_hw *hw = &adapter->hw;
707 static const u32 test[] =
708 {0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF};
709 u8 __iomem *address = hw->hw_addr + reg;
713 for (i = 0; i < ARRAY_SIZE(test); i++) {
714 writel(write & test[i], address);
715 read = readl(address);
716 if (read != (write & test[i] & mask)) {
717 e_err(drv, "pattern test reg %04X failed: "
718 "got 0x%08X expected 0x%08X\n",
719 reg, read, (write & test[i] & mask));
727 static bool reg_set_and_check(struct e1000_adapter *adapter, u64 *data, int reg,
730 struct e1000_hw *hw = &adapter->hw;
731 u8 __iomem *address = hw->hw_addr + reg;
734 writel(write & mask, address);
735 read = readl(address);
736 if ((read & mask) != (write & mask)) {
737 e_err(drv, "set/check reg %04X test failed: "
738 "got 0x%08X expected 0x%08X\n",
739 reg, (read & mask), (write & mask));
746 #define REG_PATTERN_TEST(reg, mask, write) \
748 if (reg_pattern_test(adapter, data, \
749 (hw->mac_type >= e1000_82543) \
750 ? E1000_##reg : E1000_82542_##reg, \
755 #define REG_SET_AND_CHECK(reg, mask, write) \
757 if (reg_set_and_check(adapter, data, \
758 (hw->mac_type >= e1000_82543) \
759 ? E1000_##reg : E1000_82542_##reg, \
764 static int e1000_reg_test(struct e1000_adapter *adapter, u64 *data)
766 u32 value, before, after;
768 struct e1000_hw *hw = &adapter->hw;
770 /* The status register is Read Only, so a write should fail.
771 * Some bits that get toggled are ignored.
774 /* there are several bits on newer hardware that are r/w */
777 before = er32(STATUS);
778 value = (er32(STATUS) & toggle);
779 ew32(STATUS, toggle);
780 after = er32(STATUS) & toggle;
781 if (value != after) {
782 e_err(drv, "failed STATUS register test got: "
783 "0x%08X expected: 0x%08X\n", after, value);
787 /* restore previous status */
788 ew32(STATUS, before);
790 REG_PATTERN_TEST(FCAL, 0xFFFFFFFF, 0xFFFFFFFF);
791 REG_PATTERN_TEST(FCAH, 0x0000FFFF, 0xFFFFFFFF);
792 REG_PATTERN_TEST(FCT, 0x0000FFFF, 0xFFFFFFFF);
793 REG_PATTERN_TEST(VET, 0x0000FFFF, 0xFFFFFFFF);
795 REG_PATTERN_TEST(RDTR, 0x0000FFFF, 0xFFFFFFFF);
796 REG_PATTERN_TEST(RDBAH, 0xFFFFFFFF, 0xFFFFFFFF);
797 REG_PATTERN_TEST(RDLEN, 0x000FFF80, 0x000FFFFF);
798 REG_PATTERN_TEST(RDH, 0x0000FFFF, 0x0000FFFF);
799 REG_PATTERN_TEST(RDT, 0x0000FFFF, 0x0000FFFF);
800 REG_PATTERN_TEST(FCRTH, 0x0000FFF8, 0x0000FFF8);
801 REG_PATTERN_TEST(FCTTV, 0x0000FFFF, 0x0000FFFF);
802 REG_PATTERN_TEST(TIPG, 0x3FFFFFFF, 0x3FFFFFFF);
803 REG_PATTERN_TEST(TDBAH, 0xFFFFFFFF, 0xFFFFFFFF);
804 REG_PATTERN_TEST(TDLEN, 0x000FFF80, 0x000FFFFF);
806 REG_SET_AND_CHECK(RCTL, 0xFFFFFFFF, 0x00000000);
809 REG_SET_AND_CHECK(RCTL, before, 0x003FFFFB);
810 REG_SET_AND_CHECK(TCTL, 0xFFFFFFFF, 0x00000000);
812 if (hw->mac_type >= e1000_82543) {
814 REG_SET_AND_CHECK(RCTL, before, 0xFFFFFFFF);
815 REG_PATTERN_TEST(RDBAL, 0xFFFFFFF0, 0xFFFFFFFF);
816 REG_PATTERN_TEST(TXCW, 0xC000FFFF, 0x0000FFFF);
817 REG_PATTERN_TEST(TDBAL, 0xFFFFFFF0, 0xFFFFFFFF);
818 REG_PATTERN_TEST(TIDV, 0x0000FFFF, 0x0000FFFF);
819 value = E1000_RAR_ENTRIES;
820 for (i = 0; i < value; i++) {
821 REG_PATTERN_TEST(RA + (((i << 1) + 1) << 2), 0x8003FFFF,
827 REG_SET_AND_CHECK(RCTL, 0xFFFFFFFF, 0x01FFFFFF);
828 REG_PATTERN_TEST(RDBAL, 0xFFFFF000, 0xFFFFFFFF);
829 REG_PATTERN_TEST(TXCW, 0x0000FFFF, 0x0000FFFF);
830 REG_PATTERN_TEST(TDBAL, 0xFFFFF000, 0xFFFFFFFF);
834 value = E1000_MC_TBL_SIZE;
835 for (i = 0; i < value; i++)
836 REG_PATTERN_TEST(MTA + (i << 2), 0xFFFFFFFF, 0xFFFFFFFF);
842 static int e1000_eeprom_test(struct e1000_adapter *adapter, u64 *data)
844 struct e1000_hw *hw = &adapter->hw;
850 /* Read and add up the contents of the EEPROM */
851 for (i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++) {
852 if ((e1000_read_eeprom(hw, i, 1, &temp)) < 0) {
859 /* If Checksum is not Correct return error else test passed */
860 if ((checksum != (u16)EEPROM_SUM) && !(*data))
866 static irqreturn_t e1000_test_intr(int irq, void *data)
868 struct net_device *netdev = (struct net_device *)data;
869 struct e1000_adapter *adapter = netdev_priv(netdev);
870 struct e1000_hw *hw = &adapter->hw;
872 adapter->test_icr |= er32(ICR);
877 static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)
879 struct net_device *netdev = adapter->netdev;
881 bool shared_int = true;
882 u32 irq = adapter->pdev->irq;
883 struct e1000_hw *hw = &adapter->hw;
887 /* NOTE: we don't test MSI interrupts here, yet */
888 /* Hook up test interrupt handler just for this test */
889 if (!request_irq(irq, e1000_test_intr, IRQF_PROBE_SHARED, netdev->name,
892 else if (request_irq(irq, e1000_test_intr, IRQF_SHARED,
893 netdev->name, netdev)) {
897 e_info(hw, "testing %s interrupt\n", (shared_int ?
898 "shared" : "unshared"));
900 /* Disable all the interrupts */
901 ew32(IMC, 0xFFFFFFFF);
904 /* Test each interrupt */
905 for (; i < 10; i++) {
907 /* Interrupt to test */
911 /* Disable the interrupt to be reported in
912 * the cause register and then force the same
913 * interrupt and see if one gets posted. If
914 * an interrupt was posted to the bus, the
917 adapter->test_icr = 0;
922 if (adapter->test_icr & mask) {
928 /* Enable the interrupt to be reported in
929 * the cause register and then force the same
930 * interrupt and see if one gets posted. If
931 * an interrupt was not posted to the bus, the
934 adapter->test_icr = 0;
939 if (!(adapter->test_icr & mask)) {
945 /* Disable the other interrupts to be reported in
946 * the cause register and then force the other
947 * interrupts and see if any get posted. If
948 * an interrupt was posted to the bus, the
951 adapter->test_icr = 0;
952 ew32(IMC, ~mask & 0x00007FFF);
953 ew32(ICS, ~mask & 0x00007FFF);
956 if (adapter->test_icr) {
963 /* Disable all the interrupts */
964 ew32(IMC, 0xFFFFFFFF);
967 /* Unhook test interrupt handler */
968 free_irq(irq, netdev);
973 static void e1000_free_desc_rings(struct e1000_adapter *adapter)
975 struct e1000_tx_ring *txdr = &adapter->test_tx_ring;
976 struct e1000_rx_ring *rxdr = &adapter->test_rx_ring;
977 struct pci_dev *pdev = adapter->pdev;
980 if (txdr->desc && txdr->buffer_info) {
981 for (i = 0; i < txdr->count; i++) {
982 if (txdr->buffer_info[i].dma)
983 dma_unmap_single(&pdev->dev,
984 txdr->buffer_info[i].dma,
985 txdr->buffer_info[i].length,
987 if (txdr->buffer_info[i].skb)
988 dev_kfree_skb(txdr->buffer_info[i].skb);
992 if (rxdr->desc && rxdr->buffer_info) {
993 for (i = 0; i < rxdr->count; i++) {
994 if (rxdr->buffer_info[i].dma)
995 dma_unmap_single(&pdev->dev,
996 rxdr->buffer_info[i].dma,
997 rxdr->buffer_info[i].length,
999 if (rxdr->buffer_info[i].skb)
1000 dev_kfree_skb(rxdr->buffer_info[i].skb);
1005 dma_free_coherent(&pdev->dev, txdr->size, txdr->desc,
1010 dma_free_coherent(&pdev->dev, rxdr->size, rxdr->desc,
1015 kfree(txdr->buffer_info);
1016 txdr->buffer_info = NULL;
1017 kfree(rxdr->buffer_info);
1018 rxdr->buffer_info = NULL;
1021 static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
1023 struct e1000_hw *hw = &adapter->hw;
1024 struct e1000_tx_ring *txdr = &adapter->test_tx_ring;
1025 struct e1000_rx_ring *rxdr = &adapter->test_rx_ring;
1026 struct pci_dev *pdev = adapter->pdev;
1030 /* Setup Tx descriptor ring and Tx buffers */
1033 txdr->count = E1000_DEFAULT_TXD;
1035 txdr->buffer_info = kcalloc(txdr->count, sizeof(struct e1000_buffer),
1037 if (!txdr->buffer_info) {
1042 txdr->size = txdr->count * sizeof(struct e1000_tx_desc);
1043 txdr->size = ALIGN(txdr->size, 4096);
1044 txdr->desc = dma_alloc_coherent(&pdev->dev, txdr->size, &txdr->dma,
1050 memset(txdr->desc, 0, txdr->size);
1051 txdr->next_to_use = txdr->next_to_clean = 0;
1053 ew32(TDBAL, ((u64)txdr->dma & 0x00000000FFFFFFFF));
1054 ew32(TDBAH, ((u64)txdr->dma >> 32));
1055 ew32(TDLEN, txdr->count * sizeof(struct e1000_tx_desc));
1058 ew32(TCTL, E1000_TCTL_PSP | E1000_TCTL_EN |
1059 E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT |
1060 E1000_FDX_COLLISION_DISTANCE << E1000_COLD_SHIFT);
1062 for (i = 0; i < txdr->count; i++) {
1063 struct e1000_tx_desc *tx_desc = E1000_TX_DESC(*txdr, i);
1064 struct sk_buff *skb;
1065 unsigned int size = 1024;
1067 skb = alloc_skb(size, GFP_KERNEL);
1073 txdr->buffer_info[i].skb = skb;
1074 txdr->buffer_info[i].length = skb->len;
1075 txdr->buffer_info[i].dma =
1076 dma_map_single(&pdev->dev, skb->data, skb->len,
1078 tx_desc->buffer_addr = cpu_to_le64(txdr->buffer_info[i].dma);
1079 tx_desc->lower.data = cpu_to_le32(skb->len);
1080 tx_desc->lower.data |= cpu_to_le32(E1000_TXD_CMD_EOP |
1081 E1000_TXD_CMD_IFCS |
1083 tx_desc->upper.data = 0;
1086 /* Setup Rx descriptor ring and Rx buffers */
1089 rxdr->count = E1000_DEFAULT_RXD;
1091 rxdr->buffer_info = kcalloc(rxdr->count, sizeof(struct e1000_buffer),
1093 if (!rxdr->buffer_info) {
1098 rxdr->size = rxdr->count * sizeof(struct e1000_rx_desc);
1099 rxdr->desc = dma_alloc_coherent(&pdev->dev, rxdr->size, &rxdr->dma,
1105 memset(rxdr->desc, 0, rxdr->size);
1106 rxdr->next_to_use = rxdr->next_to_clean = 0;
1109 ew32(RCTL, rctl & ~E1000_RCTL_EN);
1110 ew32(RDBAL, ((u64)rxdr->dma & 0xFFFFFFFF));
1111 ew32(RDBAH, ((u64)rxdr->dma >> 32));
1112 ew32(RDLEN, rxdr->size);
1115 rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_SZ_2048 |
1116 E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF |
1117 (hw->mc_filter_type << E1000_RCTL_MO_SHIFT);
1120 for (i = 0; i < rxdr->count; i++) {
1121 struct e1000_rx_desc *rx_desc = E1000_RX_DESC(*rxdr, i);
1122 struct sk_buff *skb;
1124 skb = alloc_skb(E1000_RXBUFFER_2048 + NET_IP_ALIGN, GFP_KERNEL);
1129 skb_reserve(skb, NET_IP_ALIGN);
1130 rxdr->buffer_info[i].skb = skb;
1131 rxdr->buffer_info[i].length = E1000_RXBUFFER_2048;
1132 rxdr->buffer_info[i].dma =
1133 dma_map_single(&pdev->dev, skb->data,
1134 E1000_RXBUFFER_2048, DMA_FROM_DEVICE);
1135 rx_desc->buffer_addr = cpu_to_le64(rxdr->buffer_info[i].dma);
1136 memset(skb->data, 0x00, skb->len);
1142 e1000_free_desc_rings(adapter);
1146 static void e1000_phy_disable_receiver(struct e1000_adapter *adapter)
1148 struct e1000_hw *hw = &adapter->hw;
1150 /* Write out to PHY registers 29 and 30 to disable the Receiver. */
1151 e1000_write_phy_reg(hw, 29, 0x001F);
1152 e1000_write_phy_reg(hw, 30, 0x8FFC);
1153 e1000_write_phy_reg(hw, 29, 0x001A);
1154 e1000_write_phy_reg(hw, 30, 0x8FF0);
1157 static void e1000_phy_reset_clk_and_crs(struct e1000_adapter *adapter)
1159 struct e1000_hw *hw = &adapter->hw;
1162 /* Because we reset the PHY above, we need to re-force TX_CLK in the
1163 * Extended PHY Specific Control Register to 25MHz clock. This
1164 * value defaults back to a 2.5MHz clock when the PHY is reset.
1166 e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_reg);
1167 phy_reg |= M88E1000_EPSCR_TX_CLK_25;
1168 e1000_write_phy_reg(hw,
1169 M88E1000_EXT_PHY_SPEC_CTRL, phy_reg);
1171 /* In addition, because of the s/w reset above, we need to enable
1172 * CRS on TX. This must be set for both full and half duplex
1175 e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_reg);
1176 phy_reg |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
1177 e1000_write_phy_reg(hw,
1178 M88E1000_PHY_SPEC_CTRL, phy_reg);
1181 static int e1000_nonintegrated_phy_loopback(struct e1000_adapter *adapter)
1183 struct e1000_hw *hw = &adapter->hw;
1187 /* Setup the Device Control Register for PHY loopback test. */
1189 ctrl_reg = er32(CTRL);
1190 ctrl_reg |= (E1000_CTRL_ILOS | /* Invert Loss-Of-Signal */
1191 E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
1192 E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
1193 E1000_CTRL_SPD_1000 | /* Force Speed to 1000 */
1194 E1000_CTRL_FD); /* Force Duplex to FULL */
1196 ew32(CTRL, ctrl_reg);
1198 /* Read the PHY Specific Control Register (0x10) */
1199 e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_reg);
1201 /* Clear Auto-Crossover bits in PHY Specific Control Register
1204 phy_reg &= ~M88E1000_PSCR_AUTO_X_MODE;
1205 e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_reg);
1207 /* Perform software reset on the PHY */
1208 e1000_phy_reset(hw);
1210 /* Have to setup TX_CLK and TX_CRS after software reset */
1211 e1000_phy_reset_clk_and_crs(adapter);
1213 e1000_write_phy_reg(hw, PHY_CTRL, 0x8100);
1215 /* Wait for reset to complete. */
1218 /* Have to setup TX_CLK and TX_CRS after software reset */
1219 e1000_phy_reset_clk_and_crs(adapter);
1221 /* Write out to PHY registers 29 and 30 to disable the Receiver. */
1222 e1000_phy_disable_receiver(adapter);
1224 /* Set the loopback bit in the PHY control register. */
1225 e1000_read_phy_reg(hw, PHY_CTRL, &phy_reg);
1226 phy_reg |= MII_CR_LOOPBACK;
1227 e1000_write_phy_reg(hw, PHY_CTRL, phy_reg);
1229 /* Setup TX_CLK and TX_CRS one more time. */
1230 e1000_phy_reset_clk_and_crs(adapter);
1232 /* Check Phy Configuration */
1233 e1000_read_phy_reg(hw, PHY_CTRL, &phy_reg);
1234 if (phy_reg != 0x4100)
1237 e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_reg);
1238 if (phy_reg != 0x0070)
1241 e1000_read_phy_reg(hw, 29, &phy_reg);
1242 if (phy_reg != 0x001A)
1248 static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
1250 struct e1000_hw *hw = &adapter->hw;
1254 hw->autoneg = false;
1256 if (hw->phy_type == e1000_phy_m88) {
1257 /* Auto-MDI/MDIX Off */
1258 e1000_write_phy_reg(hw,
1259 M88E1000_PHY_SPEC_CTRL, 0x0808);
1260 /* reset to update Auto-MDI/MDIX */
1261 e1000_write_phy_reg(hw, PHY_CTRL, 0x9140);
1263 e1000_write_phy_reg(hw, PHY_CTRL, 0x8140);
1266 ctrl_reg = er32(CTRL);
1268 /* force 1000, set loopback */
1269 e1000_write_phy_reg(hw, PHY_CTRL, 0x4140);
1271 /* Now set up the MAC to the same speed/duplex as the PHY. */
1272 ctrl_reg = er32(CTRL);
1273 ctrl_reg &= ~E1000_CTRL_SPD_SEL; /* Clear the speed sel bits */
1274 ctrl_reg |= (E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
1275 E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
1276 E1000_CTRL_SPD_1000 |/* Force Speed to 1000 */
1277 E1000_CTRL_FD); /* Force Duplex to FULL */
1279 if (hw->media_type == e1000_media_type_copper &&
1280 hw->phy_type == e1000_phy_m88)
1281 ctrl_reg |= E1000_CTRL_ILOS; /* Invert Loss of Signal */
1283 /* Set the ILOS bit on the fiber Nic is half
1284 * duplex link is detected. */
1285 stat_reg = er32(STATUS);
1286 if ((stat_reg & E1000_STATUS_FD) == 0)
1287 ctrl_reg |= (E1000_CTRL_ILOS | E1000_CTRL_SLU);
1290 ew32(CTRL, ctrl_reg);
1292 /* Disable the receiver on the PHY so when a cable is plugged in, the
1293 * PHY does not begin to autoneg when a cable is reconnected to the NIC.
1295 if (hw->phy_type == e1000_phy_m88)
1296 e1000_phy_disable_receiver(adapter);
1303 static int e1000_set_phy_loopback(struct e1000_adapter *adapter)
1305 struct e1000_hw *hw = &adapter->hw;
1309 switch (hw->mac_type) {
1311 if (hw->media_type == e1000_media_type_copper) {
1312 /* Attempt to setup Loopback mode on Non-integrated PHY.
1313 * Some PHY registers get corrupted at random, so
1314 * attempt this 10 times.
1316 while (e1000_nonintegrated_phy_loopback(adapter) &&
1326 case e1000_82545_rev_3:
1328 case e1000_82546_rev_3:
1330 case e1000_82541_rev_2:
1332 case e1000_82547_rev_2:
1333 return e1000_integrated_phy_loopback(adapter);
1336 /* Default PHY loopback work is to read the MII
1337 * control register and assert bit 14 (loopback mode).
1339 e1000_read_phy_reg(hw, PHY_CTRL, &phy_reg);
1340 phy_reg |= MII_CR_LOOPBACK;
1341 e1000_write_phy_reg(hw, PHY_CTRL, phy_reg);
1349 static int e1000_setup_loopback_test(struct e1000_adapter *adapter)
1351 struct e1000_hw *hw = &adapter->hw;
1354 if (hw->media_type == e1000_media_type_fiber ||
1355 hw->media_type == e1000_media_type_internal_serdes) {
1356 switch (hw->mac_type) {
1359 case e1000_82545_rev_3:
1360 case e1000_82546_rev_3:
1361 return e1000_set_phy_loopback(adapter);
1365 rctl |= E1000_RCTL_LBM_TCVR;
1369 } else if (hw->media_type == e1000_media_type_copper)
1370 return e1000_set_phy_loopback(adapter);
1375 static void e1000_loopback_cleanup(struct e1000_adapter *adapter)
1377 struct e1000_hw *hw = &adapter->hw;
1382 rctl &= ~(E1000_RCTL_LBM_TCVR | E1000_RCTL_LBM_MAC);
1385 switch (hw->mac_type) {
1388 case e1000_82545_rev_3:
1389 case e1000_82546_rev_3:
1392 e1000_read_phy_reg(hw, PHY_CTRL, &phy_reg);
1393 if (phy_reg & MII_CR_LOOPBACK) {
1394 phy_reg &= ~MII_CR_LOOPBACK;
1395 e1000_write_phy_reg(hw, PHY_CTRL, phy_reg);
1396 e1000_phy_reset(hw);
1402 static void e1000_create_lbtest_frame(struct sk_buff *skb,
1403 unsigned int frame_size)
1405 memset(skb->data, 0xFF, frame_size);
1407 memset(&skb->data[frame_size / 2], 0xAA, frame_size / 2 - 1);
1408 memset(&skb->data[frame_size / 2 + 10], 0xBE, 1);
1409 memset(&skb->data[frame_size / 2 + 12], 0xAF, 1);
1412 static int e1000_check_lbtest_frame(struct sk_buff *skb,
1413 unsigned int frame_size)
1416 if (*(skb->data + 3) == 0xFF) {
1417 if ((*(skb->data + frame_size / 2 + 10) == 0xBE) &&
1418 (*(skb->data + frame_size / 2 + 12) == 0xAF)) {
1425 static int e1000_run_loopback_test(struct e1000_adapter *adapter)
1427 struct e1000_hw *hw = &adapter->hw;
1428 struct e1000_tx_ring *txdr = &adapter->test_tx_ring;
1429 struct e1000_rx_ring *rxdr = &adapter->test_rx_ring;
1430 struct pci_dev *pdev = adapter->pdev;
1431 int i, j, k, l, lc, good_cnt, ret_val=0;
1434 ew32(RDT, rxdr->count - 1);
1436 /* Calculate the loop count based on the largest descriptor ring
1437 * The idea is to wrap the largest ring a number of times using 64
1438 * send/receive pairs during each loop
1441 if (rxdr->count <= txdr->count)
1442 lc = ((txdr->count / 64) * 2) + 1;
1444 lc = ((rxdr->count / 64) * 2) + 1;
1447 for (j = 0; j <= lc; j++) { /* loop count loop */
1448 for (i = 0; i < 64; i++) { /* send the packets */
1449 e1000_create_lbtest_frame(txdr->buffer_info[i].skb,
1451 dma_sync_single_for_device(&pdev->dev,
1452 txdr->buffer_info[k].dma,
1453 txdr->buffer_info[k].length,
1455 if (unlikely(++k == txdr->count)) k = 0;
1459 time = jiffies; /* set the start time for the receive */
1461 do { /* receive the sent packets */
1462 dma_sync_single_for_cpu(&pdev->dev,
1463 rxdr->buffer_info[l].dma,
1464 rxdr->buffer_info[l].length,
1467 ret_val = e1000_check_lbtest_frame(
1468 rxdr->buffer_info[l].skb,
1472 if (unlikely(++l == rxdr->count)) l = 0;
1473 /* time + 20 msecs (200 msecs on 2.4) is more than
1474 * enough time to complete the receives, if it's
1475 * exceeded, break and error off
1477 } while (good_cnt < 64 && jiffies < (time + 20));
1478 if (good_cnt != 64) {
1479 ret_val = 13; /* ret_val is the same as mis-compare */
1482 if (jiffies >= (time + 2)) {
1483 ret_val = 14; /* error code for time out error */
1486 } /* end loop count loop */
1490 static int e1000_loopback_test(struct e1000_adapter *adapter, u64 *data)
1492 *data = e1000_setup_desc_rings(adapter);
1495 *data = e1000_setup_loopback_test(adapter);
1498 *data = e1000_run_loopback_test(adapter);
1499 e1000_loopback_cleanup(adapter);
1502 e1000_free_desc_rings(adapter);
1507 static int e1000_link_test(struct e1000_adapter *adapter, u64 *data)
1509 struct e1000_hw *hw = &adapter->hw;
1511 if (hw->media_type == e1000_media_type_internal_serdes) {
1513 hw->serdes_has_link = false;
1515 /* On some blade server designs, link establishment
1516 * could take as long as 2-3 minutes */
1518 e1000_check_for_link(hw);
1519 if (hw->serdes_has_link)
1522 } while (i++ < 3750);
1526 e1000_check_for_link(hw);
1527 if (hw->autoneg) /* if auto_neg is set wait for it */
1530 if (!(er32(STATUS) & E1000_STATUS_LU)) {
1537 static int e1000_get_sset_count(struct net_device *netdev, int sset)
1541 return E1000_TEST_LEN;
1543 return E1000_STATS_LEN;
1549 static void e1000_diag_test(struct net_device *netdev,
1550 struct ethtool_test *eth_test, u64 *data)
1552 struct e1000_adapter *adapter = netdev_priv(netdev);
1553 struct e1000_hw *hw = &adapter->hw;
1554 bool if_running = netif_running(netdev);
1556 set_bit(__E1000_TESTING, &adapter->flags);
1557 if (eth_test->flags == ETH_TEST_FL_OFFLINE) {
1560 /* save speed, duplex, autoneg settings */
1561 u16 autoneg_advertised = hw->autoneg_advertised;
1562 u8 forced_speed_duplex = hw->forced_speed_duplex;
1563 u8 autoneg = hw->autoneg;
1565 e_info(hw, "offline testing starting\n");
1567 /* Link test performed before hardware reset so autoneg doesn't
1568 * interfere with test result */
1569 if (e1000_link_test(adapter, &data[4]))
1570 eth_test->flags |= ETH_TEST_FL_FAILED;
1573 /* indicate we're in test mode */
1576 e1000_reset(adapter);
1578 if (e1000_reg_test(adapter, &data[0]))
1579 eth_test->flags |= ETH_TEST_FL_FAILED;
1581 e1000_reset(adapter);
1582 if (e1000_eeprom_test(adapter, &data[1]))
1583 eth_test->flags |= ETH_TEST_FL_FAILED;
1585 e1000_reset(adapter);
1586 if (e1000_intr_test(adapter, &data[2]))
1587 eth_test->flags |= ETH_TEST_FL_FAILED;
1589 e1000_reset(adapter);
1590 /* make sure the phy is powered up */
1591 e1000_power_up_phy(adapter);
1592 if (e1000_loopback_test(adapter, &data[3]))
1593 eth_test->flags |= ETH_TEST_FL_FAILED;
1595 /* restore speed, duplex, autoneg settings */
1596 hw->autoneg_advertised = autoneg_advertised;
1597 hw->forced_speed_duplex = forced_speed_duplex;
1598 hw->autoneg = autoneg;
1600 e1000_reset(adapter);
1601 clear_bit(__E1000_TESTING, &adapter->flags);
1605 e_info(hw, "online testing starting\n");
1607 if (e1000_link_test(adapter, &data[4]))
1608 eth_test->flags |= ETH_TEST_FL_FAILED;
1610 /* Online tests aren't run; pass by default */
1616 clear_bit(__E1000_TESTING, &adapter->flags);
1618 msleep_interruptible(4 * 1000);
1621 static int e1000_wol_exclusion(struct e1000_adapter *adapter,
1622 struct ethtool_wolinfo *wol)
1624 struct e1000_hw *hw = &adapter->hw;
1625 int retval = 1; /* fail by default */
1627 switch (hw->device_id) {
1628 case E1000_DEV_ID_82542:
1629 case E1000_DEV_ID_82543GC_FIBER:
1630 case E1000_DEV_ID_82543GC_COPPER:
1631 case E1000_DEV_ID_82544EI_FIBER:
1632 case E1000_DEV_ID_82546EB_QUAD_COPPER:
1633 case E1000_DEV_ID_82545EM_FIBER:
1634 case E1000_DEV_ID_82545EM_COPPER:
1635 case E1000_DEV_ID_82546GB_QUAD_COPPER:
1636 case E1000_DEV_ID_82546GB_PCIE:
1637 /* these don't support WoL at all */
1640 case E1000_DEV_ID_82546EB_FIBER:
1641 case E1000_DEV_ID_82546GB_FIBER:
1642 /* Wake events not supported on port B */
1643 if (er32(STATUS) & E1000_STATUS_FUNC_1) {
1647 /* return success for non excluded adapter ports */
1650 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
1651 /* quad port adapters only support WoL on port A */
1652 if (!adapter->quad_port_a) {
1656 /* return success for non excluded adapter ports */
1660 /* dual port cards only support WoL on port A from now on
1661 * unless it was enabled in the eeprom for port B
1662 * so exclude FUNC_1 ports from having WoL enabled */
1663 if (er32(STATUS) & E1000_STATUS_FUNC_1 &&
1664 !adapter->eeprom_wol) {
1675 static void e1000_get_wol(struct net_device *netdev,
1676 struct ethtool_wolinfo *wol)
1678 struct e1000_adapter *adapter = netdev_priv(netdev);
1679 struct e1000_hw *hw = &adapter->hw;
1681 wol->supported = WAKE_UCAST | WAKE_MCAST |
1682 WAKE_BCAST | WAKE_MAGIC;
1685 /* this function will set ->supported = 0 and return 1 if wol is not
1686 * supported by this hardware */
1687 if (e1000_wol_exclusion(adapter, wol) ||
1688 !device_can_wakeup(&adapter->pdev->dev))
1691 /* apply any specific unsupported masks here */
1692 switch (hw->device_id) {
1693 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
1694 /* KSP3 does not suppport UCAST wake-ups */
1695 wol->supported &= ~WAKE_UCAST;
1697 if (adapter->wol & E1000_WUFC_EX)
1698 e_err(drv, "Interface does not support directed "
1699 "(unicast) frame wake-up packets\n");
1705 if (adapter->wol & E1000_WUFC_EX)
1706 wol->wolopts |= WAKE_UCAST;
1707 if (adapter->wol & E1000_WUFC_MC)
1708 wol->wolopts |= WAKE_MCAST;
1709 if (adapter->wol & E1000_WUFC_BC)
1710 wol->wolopts |= WAKE_BCAST;
1711 if (adapter->wol & E1000_WUFC_MAG)
1712 wol->wolopts |= WAKE_MAGIC;
1715 static int e1000_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
1717 struct e1000_adapter *adapter = netdev_priv(netdev);
1718 struct e1000_hw *hw = &adapter->hw;
1720 if (wol->wolopts & (WAKE_PHY | WAKE_ARP | WAKE_MAGICSECURE))
1723 if (e1000_wol_exclusion(adapter, wol) ||
1724 !device_can_wakeup(&adapter->pdev->dev))
1725 return wol->wolopts ? -EOPNOTSUPP : 0;
1727 switch (hw->device_id) {
1728 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
1729 if (wol->wolopts & WAKE_UCAST) {
1730 e_err(drv, "Interface does not support directed "
1731 "(unicast) frame wake-up packets\n");
1739 /* these settings will always override what we currently have */
1742 if (wol->wolopts & WAKE_UCAST)
1743 adapter->wol |= E1000_WUFC_EX;
1744 if (wol->wolopts & WAKE_MCAST)
1745 adapter->wol |= E1000_WUFC_MC;
1746 if (wol->wolopts & WAKE_BCAST)
1747 adapter->wol |= E1000_WUFC_BC;
1748 if (wol->wolopts & WAKE_MAGIC)
1749 adapter->wol |= E1000_WUFC_MAG;
1751 device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol);
1756 /* toggle LED 4 times per second = 2 "blinks" per second */
1757 #define E1000_ID_INTERVAL (HZ/4)
1759 /* bit defines for adapter->led_status */
1760 #define E1000_LED_ON 0
1762 static void e1000_led_blink_callback(unsigned long data)
1764 struct e1000_adapter *adapter = (struct e1000_adapter *) data;
1765 struct e1000_hw *hw = &adapter->hw;
1767 if (test_and_change_bit(E1000_LED_ON, &adapter->led_status))
1772 mod_timer(&adapter->blink_timer, jiffies + E1000_ID_INTERVAL);
1775 static int e1000_phys_id(struct net_device *netdev, u32 data)
1777 struct e1000_adapter *adapter = netdev_priv(netdev);
1778 struct e1000_hw *hw = &adapter->hw;
1783 if (!adapter->blink_timer.function) {
1784 init_timer(&adapter->blink_timer);
1785 adapter->blink_timer.function = e1000_led_blink_callback;
1786 adapter->blink_timer.data = (unsigned long)adapter;
1788 e1000_setup_led(hw);
1789 mod_timer(&adapter->blink_timer, jiffies);
1790 msleep_interruptible(data * 1000);
1791 del_timer_sync(&adapter->blink_timer);
1794 clear_bit(E1000_LED_ON, &adapter->led_status);
1795 e1000_cleanup_led(hw);
1800 static int e1000_get_coalesce(struct net_device *netdev,
1801 struct ethtool_coalesce *ec)
1803 struct e1000_adapter *adapter = netdev_priv(netdev);
1805 if (adapter->hw.mac_type < e1000_82545)
1808 if (adapter->itr_setting <= 4)
1809 ec->rx_coalesce_usecs = adapter->itr_setting;
1811 ec->rx_coalesce_usecs = 1000000 / adapter->itr_setting;
1816 static int e1000_set_coalesce(struct net_device *netdev,
1817 struct ethtool_coalesce *ec)
1819 struct e1000_adapter *adapter = netdev_priv(netdev);
1820 struct e1000_hw *hw = &adapter->hw;
1822 if (hw->mac_type < e1000_82545)
1825 if ((ec->rx_coalesce_usecs > E1000_MAX_ITR_USECS) ||
1826 ((ec->rx_coalesce_usecs > 4) &&
1827 (ec->rx_coalesce_usecs < E1000_MIN_ITR_USECS)) ||
1828 (ec->rx_coalesce_usecs == 2))
1831 if (ec->rx_coalesce_usecs == 4) {
1832 adapter->itr = adapter->itr_setting = 4;
1833 } else if (ec->rx_coalesce_usecs <= 3) {
1834 adapter->itr = 20000;
1835 adapter->itr_setting = ec->rx_coalesce_usecs;
1837 adapter->itr = (1000000 / ec->rx_coalesce_usecs);
1838 adapter->itr_setting = adapter->itr & ~3;
1841 if (adapter->itr_setting != 0)
1842 ew32(ITR, 1000000000 / (adapter->itr * 256));
1849 static int e1000_nway_reset(struct net_device *netdev)
1851 struct e1000_adapter *adapter = netdev_priv(netdev);
1852 if (netif_running(netdev))
1853 e1000_reinit_locked(adapter);
1857 static void e1000_get_ethtool_stats(struct net_device *netdev,
1858 struct ethtool_stats *stats, u64 *data)
1860 struct e1000_adapter *adapter = netdev_priv(netdev);
1864 e1000_update_stats(adapter);
1865 for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
1866 switch (e1000_gstrings_stats[i].type) {
1868 p = (char *) netdev +
1869 e1000_gstrings_stats[i].stat_offset;
1872 p = (char *) adapter +
1873 e1000_gstrings_stats[i].stat_offset;
1877 data[i] = (e1000_gstrings_stats[i].sizeof_stat ==
1878 sizeof(u64)) ? *(u64 *)p : *(u32 *)p;
1880 /* BUG_ON(i != E1000_STATS_LEN); */
1883 static void e1000_get_strings(struct net_device *netdev, u32 stringset,
1889 switch (stringset) {
1891 memcpy(data, *e1000_gstrings_test,
1892 sizeof(e1000_gstrings_test));
1895 for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
1896 memcpy(p, e1000_gstrings_stats[i].stat_string,
1898 p += ETH_GSTRING_LEN;
1900 /* BUG_ON(p - data != E1000_STATS_LEN * ETH_GSTRING_LEN); */
1905 static const struct ethtool_ops e1000_ethtool_ops = {
1906 .get_settings = e1000_get_settings,
1907 .set_settings = e1000_set_settings,
1908 .get_drvinfo = e1000_get_drvinfo,
1909 .get_regs_len = e1000_get_regs_len,
1910 .get_regs = e1000_get_regs,
1911 .get_wol = e1000_get_wol,
1912 .set_wol = e1000_set_wol,
1913 .get_msglevel = e1000_get_msglevel,
1914 .set_msglevel = e1000_set_msglevel,
1915 .nway_reset = e1000_nway_reset,
1916 .get_link = e1000_get_link,
1917 .get_eeprom_len = e1000_get_eeprom_len,
1918 .get_eeprom = e1000_get_eeprom,
1919 .set_eeprom = e1000_set_eeprom,
1920 .get_ringparam = e1000_get_ringparam,
1921 .set_ringparam = e1000_set_ringparam,
1922 .get_pauseparam = e1000_get_pauseparam,
1923 .set_pauseparam = e1000_set_pauseparam,
1924 .get_rx_csum = e1000_get_rx_csum,
1925 .set_rx_csum = e1000_set_rx_csum,
1926 .get_tx_csum = e1000_get_tx_csum,
1927 .set_tx_csum = e1000_set_tx_csum,
1928 .set_sg = ethtool_op_set_sg,
1929 .set_tso = e1000_set_tso,
1930 .self_test = e1000_diag_test,
1931 .get_strings = e1000_get_strings,
1932 .phys_id = e1000_phys_id,
1933 .get_ethtool_stats = e1000_get_ethtool_stats,
1934 .get_sset_count = e1000_get_sset_count,
1935 .get_coalesce = e1000_get_coalesce,
1936 .set_coalesce = e1000_set_coalesce,
1939 void e1000_set_ethtool_ops(struct net_device *netdev)
1941 SET_ETHTOOL_OPS(netdev, &e1000_ethtool_ops);