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 ethtool_cmd_speed_set(ecmd, adapter->link_speed);
163 /* unfortunately 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;
171 ethtool_cmd_speed_set(ecmd, -1);
175 ecmd->autoneg = ((hw->media_type == e1000_media_type_fiber) ||
176 hw->autoneg) ? AUTONEG_ENABLE : AUTONEG_DISABLE;
178 /* MDI-X => 1; MDI => 0 */
179 if ((hw->media_type == e1000_media_type_copper) &&
180 netif_carrier_ok(netdev))
181 ecmd->eth_tp_mdix = (!!adapter->phy_info.mdix_mode ?
182 ETH_TP_MDI_X : ETH_TP_MDI);
184 ecmd->eth_tp_mdix = ETH_TP_MDI_INVALID;
186 if (hw->mdix == AUTO_ALL_MODES)
187 ecmd->eth_tp_mdix_ctrl = ETH_TP_MDI_AUTO;
189 ecmd->eth_tp_mdix_ctrl = hw->mdix;
193 static int e1000_set_settings(struct net_device *netdev,
194 struct ethtool_cmd *ecmd)
196 struct e1000_adapter *adapter = netdev_priv(netdev);
197 struct e1000_hw *hw = &adapter->hw;
199 /* MDI setting is only allowed when autoneg enabled because
200 * some hardware doesn't allow MDI setting when speed or
203 if (ecmd->eth_tp_mdix_ctrl) {
204 if (hw->media_type != e1000_media_type_copper)
207 if ((ecmd->eth_tp_mdix_ctrl != ETH_TP_MDI_AUTO) &&
208 (ecmd->autoneg != AUTONEG_ENABLE)) {
209 e_err(drv, "forcing MDI/MDI-X state is not supported when link speed and/or duplex are forced\n");
214 while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
217 if (ecmd->autoneg == AUTONEG_ENABLE) {
219 if (hw->media_type == e1000_media_type_fiber)
220 hw->autoneg_advertised = ADVERTISED_1000baseT_Full |
224 hw->autoneg_advertised = ecmd->advertising |
227 ecmd->advertising = hw->autoneg_advertised;
229 u32 speed = ethtool_cmd_speed(ecmd);
230 /* calling this overrides forced MDI setting */
231 if (e1000_set_spd_dplx(adapter, speed, ecmd->duplex)) {
232 clear_bit(__E1000_RESETTING, &adapter->flags);
237 /* MDI-X => 2; MDI => 1; Auto => 3 */
238 if (ecmd->eth_tp_mdix_ctrl) {
239 if (ecmd->eth_tp_mdix_ctrl == ETH_TP_MDI_AUTO)
240 hw->mdix = AUTO_ALL_MODES;
242 hw->mdix = ecmd->eth_tp_mdix_ctrl;
247 if (netif_running(adapter->netdev)) {
251 e1000_reset(adapter);
253 clear_bit(__E1000_RESETTING, &adapter->flags);
257 static u32 e1000_get_link(struct net_device *netdev)
259 struct e1000_adapter *adapter = netdev_priv(netdev);
261 /* If the link is not reported up to netdev, interrupts are disabled,
262 * and so the physical link state may have changed since we last
263 * looked. Set get_link_status to make sure that the true link
264 * state is interrogated, rather than pulling a cached and possibly
265 * stale link state from the driver.
267 if (!netif_carrier_ok(netdev))
268 adapter->hw.get_link_status = 1;
270 return e1000_has_link(adapter);
273 static void e1000_get_pauseparam(struct net_device *netdev,
274 struct ethtool_pauseparam *pause)
276 struct e1000_adapter *adapter = netdev_priv(netdev);
277 struct e1000_hw *hw = &adapter->hw;
280 (adapter->fc_autoneg ? AUTONEG_ENABLE : AUTONEG_DISABLE);
282 if (hw->fc == E1000_FC_RX_PAUSE)
284 else if (hw->fc == E1000_FC_TX_PAUSE)
286 else if (hw->fc == E1000_FC_FULL) {
292 static int e1000_set_pauseparam(struct net_device *netdev,
293 struct ethtool_pauseparam *pause)
295 struct e1000_adapter *adapter = netdev_priv(netdev);
296 struct e1000_hw *hw = &adapter->hw;
299 adapter->fc_autoneg = pause->autoneg;
301 while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
304 if (pause->rx_pause && pause->tx_pause)
305 hw->fc = E1000_FC_FULL;
306 else if (pause->rx_pause && !pause->tx_pause)
307 hw->fc = E1000_FC_RX_PAUSE;
308 else if (!pause->rx_pause && pause->tx_pause)
309 hw->fc = E1000_FC_TX_PAUSE;
310 else if (!pause->rx_pause && !pause->tx_pause)
311 hw->fc = E1000_FC_NONE;
313 hw->original_fc = hw->fc;
315 if (adapter->fc_autoneg == AUTONEG_ENABLE) {
316 if (netif_running(adapter->netdev)) {
320 e1000_reset(adapter);
322 retval = ((hw->media_type == e1000_media_type_fiber) ?
323 e1000_setup_link(hw) : e1000_force_mac_fc(hw));
325 clear_bit(__E1000_RESETTING, &adapter->flags);
329 static u32 e1000_get_msglevel(struct net_device *netdev)
331 struct e1000_adapter *adapter = netdev_priv(netdev);
332 return adapter->msg_enable;
335 static void e1000_set_msglevel(struct net_device *netdev, u32 data)
337 struct e1000_adapter *adapter = netdev_priv(netdev);
338 adapter->msg_enable = data;
341 static int e1000_get_regs_len(struct net_device *netdev)
343 #define E1000_REGS_LEN 32
344 return E1000_REGS_LEN * sizeof(u32);
347 static void e1000_get_regs(struct net_device *netdev, struct ethtool_regs *regs,
350 struct e1000_adapter *adapter = netdev_priv(netdev);
351 struct e1000_hw *hw = &adapter->hw;
355 memset(p, 0, E1000_REGS_LEN * sizeof(u32));
357 regs->version = (1 << 24) | (hw->revision_id << 16) | hw->device_id;
359 regs_buff[0] = er32(CTRL);
360 regs_buff[1] = er32(STATUS);
362 regs_buff[2] = er32(RCTL);
363 regs_buff[3] = er32(RDLEN);
364 regs_buff[4] = er32(RDH);
365 regs_buff[5] = er32(RDT);
366 regs_buff[6] = er32(RDTR);
368 regs_buff[7] = er32(TCTL);
369 regs_buff[8] = er32(TDLEN);
370 regs_buff[9] = er32(TDH);
371 regs_buff[10] = er32(TDT);
372 regs_buff[11] = er32(TIDV);
374 regs_buff[12] = hw->phy_type; /* PHY type (IGP=1, M88=0) */
375 if (hw->phy_type == e1000_phy_igp) {
376 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
377 IGP01E1000_PHY_AGC_A);
378 e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_A &
379 IGP01E1000_PHY_PAGE_SELECT, &phy_data);
380 regs_buff[13] = (u32)phy_data; /* cable length */
381 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
382 IGP01E1000_PHY_AGC_B);
383 e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_B &
384 IGP01E1000_PHY_PAGE_SELECT, &phy_data);
385 regs_buff[14] = (u32)phy_data; /* cable length */
386 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
387 IGP01E1000_PHY_AGC_C);
388 e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_C &
389 IGP01E1000_PHY_PAGE_SELECT, &phy_data);
390 regs_buff[15] = (u32)phy_data; /* cable length */
391 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
392 IGP01E1000_PHY_AGC_D);
393 e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_D &
394 IGP01E1000_PHY_PAGE_SELECT, &phy_data);
395 regs_buff[16] = (u32)phy_data; /* cable length */
396 regs_buff[17] = 0; /* extended 10bt distance (not needed) */
397 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, 0x0);
398 e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS &
399 IGP01E1000_PHY_PAGE_SELECT, &phy_data);
400 regs_buff[18] = (u32)phy_data; /* cable polarity */
401 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
402 IGP01E1000_PHY_PCS_INIT_REG);
403 e1000_read_phy_reg(hw, IGP01E1000_PHY_PCS_INIT_REG &
404 IGP01E1000_PHY_PAGE_SELECT, &phy_data);
405 regs_buff[19] = (u32)phy_data; /* cable polarity */
406 regs_buff[20] = 0; /* polarity correction enabled (always) */
407 regs_buff[22] = 0; /* phy receive errors (unavailable) */
408 regs_buff[23] = regs_buff[18]; /* mdix mode */
409 e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, 0x0);
411 e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
412 regs_buff[13] = (u32)phy_data; /* cable length */
413 regs_buff[14] = 0; /* Dummy (to align w/ IGP phy reg dump) */
414 regs_buff[15] = 0; /* Dummy (to align w/ IGP phy reg dump) */
415 regs_buff[16] = 0; /* Dummy (to align w/ IGP phy reg dump) */
416 e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
417 regs_buff[17] = (u32)phy_data; /* extended 10bt distance */
418 regs_buff[18] = regs_buff[13]; /* cable polarity */
419 regs_buff[19] = 0; /* Dummy (to align w/ IGP phy reg dump) */
420 regs_buff[20] = regs_buff[17]; /* polarity correction */
421 /* phy receive errors */
422 regs_buff[22] = adapter->phy_stats.receive_errors;
423 regs_buff[23] = regs_buff[13]; /* mdix mode */
425 regs_buff[21] = adapter->phy_stats.idle_errors; /* phy idle errors */
426 e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
427 regs_buff[24] = (u32)phy_data; /* phy local receiver status */
428 regs_buff[25] = regs_buff[24]; /* phy remote receiver status */
429 if (hw->mac_type >= e1000_82540 &&
430 hw->media_type == e1000_media_type_copper) {
431 regs_buff[26] = er32(MANC);
435 static int e1000_get_eeprom_len(struct net_device *netdev)
437 struct e1000_adapter *adapter = netdev_priv(netdev);
438 struct e1000_hw *hw = &adapter->hw;
440 return hw->eeprom.word_size * 2;
443 static int e1000_get_eeprom(struct net_device *netdev,
444 struct ethtool_eeprom *eeprom, u8 *bytes)
446 struct e1000_adapter *adapter = netdev_priv(netdev);
447 struct e1000_hw *hw = &adapter->hw;
449 int first_word, last_word;
453 if (eeprom->len == 0)
456 eeprom->magic = hw->vendor_id | (hw->device_id << 16);
458 first_word = eeprom->offset >> 1;
459 last_word = (eeprom->offset + eeprom->len - 1) >> 1;
461 eeprom_buff = kmalloc(sizeof(u16) *
462 (last_word - first_word + 1), GFP_KERNEL);
466 if (hw->eeprom.type == e1000_eeprom_spi)
467 ret_val = e1000_read_eeprom(hw, first_word,
468 last_word - first_word + 1,
471 for (i = 0; i < last_word - first_word + 1; i++) {
472 ret_val = e1000_read_eeprom(hw, first_word + i, 1,
479 /* Device's eeprom is always little-endian, word addressable */
480 for (i = 0; i < last_word - first_word + 1; i++)
481 le16_to_cpus(&eeprom_buff[i]);
483 memcpy(bytes, (u8 *)eeprom_buff + (eeprom->offset & 1),
490 static int e1000_set_eeprom(struct net_device *netdev,
491 struct ethtool_eeprom *eeprom, u8 *bytes)
493 struct e1000_adapter *adapter = netdev_priv(netdev);
494 struct e1000_hw *hw = &adapter->hw;
497 int max_len, first_word, last_word, ret_val = 0;
500 if (eeprom->len == 0)
503 if (eeprom->magic != (hw->vendor_id | (hw->device_id << 16)))
506 max_len = hw->eeprom.word_size * 2;
508 first_word = eeprom->offset >> 1;
509 last_word = (eeprom->offset + eeprom->len - 1) >> 1;
510 eeprom_buff = kmalloc(max_len, GFP_KERNEL);
514 ptr = (void *)eeprom_buff;
516 if (eeprom->offset & 1) {
517 /* need read/modify/write of first changed EEPROM word
518 * only the second byte of the word is being modified
520 ret_val = e1000_read_eeprom(hw, first_word, 1,
524 if (((eeprom->offset + eeprom->len) & 1) && (ret_val == 0)) {
525 /* need read/modify/write of last changed EEPROM word
526 * only the first byte of the word is being modified
528 ret_val = e1000_read_eeprom(hw, last_word, 1,
529 &eeprom_buff[last_word - first_word]);
532 /* Device's eeprom is always little-endian, word addressable */
533 for (i = 0; i < last_word - first_word + 1; i++)
534 le16_to_cpus(&eeprom_buff[i]);
536 memcpy(ptr, bytes, eeprom->len);
538 for (i = 0; i < last_word - first_word + 1; i++)
539 eeprom_buff[i] = cpu_to_le16(eeprom_buff[i]);
541 ret_val = e1000_write_eeprom(hw, first_word,
542 last_word - first_word + 1, eeprom_buff);
544 /* Update the checksum over the first part of the EEPROM if needed */
545 if ((ret_val == 0) && (first_word <= EEPROM_CHECKSUM_REG))
546 e1000_update_eeprom_checksum(hw);
552 static void e1000_get_drvinfo(struct net_device *netdev,
553 struct ethtool_drvinfo *drvinfo)
555 struct e1000_adapter *adapter = netdev_priv(netdev);
557 strlcpy(drvinfo->driver, e1000_driver_name,
558 sizeof(drvinfo->driver));
559 strlcpy(drvinfo->version, e1000_driver_version,
560 sizeof(drvinfo->version));
562 strlcpy(drvinfo->bus_info, pci_name(adapter->pdev),
563 sizeof(drvinfo->bus_info));
564 drvinfo->regdump_len = e1000_get_regs_len(netdev);
565 drvinfo->eedump_len = e1000_get_eeprom_len(netdev);
568 static void e1000_get_ringparam(struct net_device *netdev,
569 struct ethtool_ringparam *ring)
571 struct e1000_adapter *adapter = netdev_priv(netdev);
572 struct e1000_hw *hw = &adapter->hw;
573 e1000_mac_type mac_type = hw->mac_type;
574 struct e1000_tx_ring *txdr = adapter->tx_ring;
575 struct e1000_rx_ring *rxdr = adapter->rx_ring;
577 ring->rx_max_pending = (mac_type < e1000_82544) ? E1000_MAX_RXD :
579 ring->tx_max_pending = (mac_type < e1000_82544) ? E1000_MAX_TXD :
581 ring->rx_pending = rxdr->count;
582 ring->tx_pending = txdr->count;
585 static int e1000_set_ringparam(struct net_device *netdev,
586 struct ethtool_ringparam *ring)
588 struct e1000_adapter *adapter = netdev_priv(netdev);
589 struct e1000_hw *hw = &adapter->hw;
590 e1000_mac_type mac_type = hw->mac_type;
591 struct e1000_tx_ring *txdr, *tx_old;
592 struct e1000_rx_ring *rxdr, *rx_old;
595 if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending))
598 while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
601 if (netif_running(adapter->netdev))
604 tx_old = adapter->tx_ring;
605 rx_old = adapter->rx_ring;
608 txdr = kcalloc(adapter->num_tx_queues, sizeof(struct e1000_tx_ring),
613 rxdr = kcalloc(adapter->num_rx_queues, sizeof(struct e1000_rx_ring),
618 adapter->tx_ring = txdr;
619 adapter->rx_ring = rxdr;
621 rxdr->count = max(ring->rx_pending,(u32)E1000_MIN_RXD);
622 rxdr->count = min(rxdr->count,(u32)(mac_type < e1000_82544 ?
623 E1000_MAX_RXD : E1000_MAX_82544_RXD));
624 rxdr->count = ALIGN(rxdr->count, REQ_RX_DESCRIPTOR_MULTIPLE);
626 txdr->count = max(ring->tx_pending,(u32)E1000_MIN_TXD);
627 txdr->count = min(txdr->count,(u32)(mac_type < e1000_82544 ?
628 E1000_MAX_TXD : E1000_MAX_82544_TXD));
629 txdr->count = ALIGN(txdr->count, REQ_TX_DESCRIPTOR_MULTIPLE);
631 for (i = 0; i < adapter->num_tx_queues; i++)
632 txdr[i].count = txdr->count;
633 for (i = 0; i < adapter->num_rx_queues; i++)
634 rxdr[i].count = rxdr->count;
636 if (netif_running(adapter->netdev)) {
637 /* Try to get new resources before deleting old */
638 err = e1000_setup_all_rx_resources(adapter);
641 err = e1000_setup_all_tx_resources(adapter);
645 /* save the new, restore the old in order to free it,
646 * then restore the new back again
649 adapter->rx_ring = rx_old;
650 adapter->tx_ring = tx_old;
651 e1000_free_all_rx_resources(adapter);
652 e1000_free_all_tx_resources(adapter);
655 adapter->rx_ring = rxdr;
656 adapter->tx_ring = txdr;
657 err = e1000_up(adapter);
662 clear_bit(__E1000_RESETTING, &adapter->flags);
665 e1000_free_all_rx_resources(adapter);
667 adapter->rx_ring = rx_old;
668 adapter->tx_ring = tx_old;
675 clear_bit(__E1000_RESETTING, &adapter->flags);
679 static bool reg_pattern_test(struct e1000_adapter *adapter, u64 *data, int reg,
682 struct e1000_hw *hw = &adapter->hw;
683 static const u32 test[] =
684 {0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF};
685 u8 __iomem *address = hw->hw_addr + reg;
689 for (i = 0; i < ARRAY_SIZE(test); i++) {
690 writel(write & test[i], address);
691 read = readl(address);
692 if (read != (write & test[i] & mask)) {
693 e_err(drv, "pattern test reg %04X failed: "
694 "got 0x%08X expected 0x%08X\n",
695 reg, read, (write & test[i] & mask));
703 static bool reg_set_and_check(struct e1000_adapter *adapter, u64 *data, int reg,
706 struct e1000_hw *hw = &adapter->hw;
707 u8 __iomem *address = hw->hw_addr + reg;
710 writel(write & mask, address);
711 read = readl(address);
712 if ((read & mask) != (write & mask)) {
713 e_err(drv, "set/check reg %04X test failed: "
714 "got 0x%08X expected 0x%08X\n",
715 reg, (read & mask), (write & mask));
722 #define REG_PATTERN_TEST(reg, mask, write) \
724 if (reg_pattern_test(adapter, data, \
725 (hw->mac_type >= e1000_82543) \
726 ? E1000_##reg : E1000_82542_##reg, \
731 #define REG_SET_AND_CHECK(reg, mask, write) \
733 if (reg_set_and_check(adapter, data, \
734 (hw->mac_type >= e1000_82543) \
735 ? E1000_##reg : E1000_82542_##reg, \
740 static int e1000_reg_test(struct e1000_adapter *adapter, u64 *data)
742 u32 value, before, after;
744 struct e1000_hw *hw = &adapter->hw;
746 /* The status register is Read Only, so a write should fail.
747 * Some bits that get toggled are ignored.
750 /* there are several bits on newer hardware that are r/w */
753 before = er32(STATUS);
754 value = (er32(STATUS) & toggle);
755 ew32(STATUS, toggle);
756 after = er32(STATUS) & toggle;
757 if (value != after) {
758 e_err(drv, "failed STATUS register test got: "
759 "0x%08X expected: 0x%08X\n", after, value);
763 /* restore previous status */
764 ew32(STATUS, before);
766 REG_PATTERN_TEST(FCAL, 0xFFFFFFFF, 0xFFFFFFFF);
767 REG_PATTERN_TEST(FCAH, 0x0000FFFF, 0xFFFFFFFF);
768 REG_PATTERN_TEST(FCT, 0x0000FFFF, 0xFFFFFFFF);
769 REG_PATTERN_TEST(VET, 0x0000FFFF, 0xFFFFFFFF);
771 REG_PATTERN_TEST(RDTR, 0x0000FFFF, 0xFFFFFFFF);
772 REG_PATTERN_TEST(RDBAH, 0xFFFFFFFF, 0xFFFFFFFF);
773 REG_PATTERN_TEST(RDLEN, 0x000FFF80, 0x000FFFFF);
774 REG_PATTERN_TEST(RDH, 0x0000FFFF, 0x0000FFFF);
775 REG_PATTERN_TEST(RDT, 0x0000FFFF, 0x0000FFFF);
776 REG_PATTERN_TEST(FCRTH, 0x0000FFF8, 0x0000FFF8);
777 REG_PATTERN_TEST(FCTTV, 0x0000FFFF, 0x0000FFFF);
778 REG_PATTERN_TEST(TIPG, 0x3FFFFFFF, 0x3FFFFFFF);
779 REG_PATTERN_TEST(TDBAH, 0xFFFFFFFF, 0xFFFFFFFF);
780 REG_PATTERN_TEST(TDLEN, 0x000FFF80, 0x000FFFFF);
782 REG_SET_AND_CHECK(RCTL, 0xFFFFFFFF, 0x00000000);
785 REG_SET_AND_CHECK(RCTL, before, 0x003FFFFB);
786 REG_SET_AND_CHECK(TCTL, 0xFFFFFFFF, 0x00000000);
788 if (hw->mac_type >= e1000_82543) {
789 REG_SET_AND_CHECK(RCTL, before, 0xFFFFFFFF);
790 REG_PATTERN_TEST(RDBAL, 0xFFFFFFF0, 0xFFFFFFFF);
791 REG_PATTERN_TEST(TXCW, 0xC000FFFF, 0x0000FFFF);
792 REG_PATTERN_TEST(TDBAL, 0xFFFFFFF0, 0xFFFFFFFF);
793 REG_PATTERN_TEST(TIDV, 0x0000FFFF, 0x0000FFFF);
794 value = E1000_RAR_ENTRIES;
795 for (i = 0; i < value; i++) {
796 REG_PATTERN_TEST(RA + (((i << 1) + 1) << 2), 0x8003FFFF,
800 REG_SET_AND_CHECK(RCTL, 0xFFFFFFFF, 0x01FFFFFF);
801 REG_PATTERN_TEST(RDBAL, 0xFFFFF000, 0xFFFFFFFF);
802 REG_PATTERN_TEST(TXCW, 0x0000FFFF, 0x0000FFFF);
803 REG_PATTERN_TEST(TDBAL, 0xFFFFF000, 0xFFFFFFFF);
806 value = E1000_MC_TBL_SIZE;
807 for (i = 0; i < value; i++)
808 REG_PATTERN_TEST(MTA + (i << 2), 0xFFFFFFFF, 0xFFFFFFFF);
814 static int e1000_eeprom_test(struct e1000_adapter *adapter, u64 *data)
816 struct e1000_hw *hw = &adapter->hw;
822 /* Read and add up the contents of the EEPROM */
823 for (i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++) {
824 if ((e1000_read_eeprom(hw, i, 1, &temp)) < 0) {
831 /* If Checksum is not Correct return error else test passed */
832 if ((checksum != (u16)EEPROM_SUM) && !(*data))
838 static irqreturn_t e1000_test_intr(int irq, void *data)
840 struct net_device *netdev = (struct net_device *)data;
841 struct e1000_adapter *adapter = netdev_priv(netdev);
842 struct e1000_hw *hw = &adapter->hw;
844 adapter->test_icr |= er32(ICR);
849 static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)
851 struct net_device *netdev = adapter->netdev;
853 bool shared_int = true;
854 u32 irq = adapter->pdev->irq;
855 struct e1000_hw *hw = &adapter->hw;
859 /* NOTE: we don't test MSI interrupts here, yet
860 * Hook up test interrupt handler just for this test
862 if (!request_irq(irq, e1000_test_intr, IRQF_PROBE_SHARED, netdev->name,
865 else if (request_irq(irq, e1000_test_intr, IRQF_SHARED,
866 netdev->name, netdev)) {
870 e_info(hw, "testing %s interrupt\n", (shared_int ?
871 "shared" : "unshared"));
873 /* Disable all the interrupts */
874 ew32(IMC, 0xFFFFFFFF);
878 /* Test each interrupt */
879 for (; i < 10; i++) {
881 /* Interrupt to test */
885 /* Disable the interrupt to be reported in
886 * the cause register and then force the same
887 * interrupt and see if one gets posted. If
888 * an interrupt was posted to the bus, the
891 adapter->test_icr = 0;
897 if (adapter->test_icr & mask) {
903 /* Enable the interrupt to be reported in
904 * the cause register and then force the same
905 * interrupt and see if one gets posted. If
906 * an interrupt was not posted to the bus, the
909 adapter->test_icr = 0;
915 if (!(adapter->test_icr & mask)) {
921 /* Disable the other interrupts to be reported in
922 * the cause register and then force the other
923 * interrupts and see if any get posted. If
924 * an interrupt was posted to the bus, the
927 adapter->test_icr = 0;
928 ew32(IMC, ~mask & 0x00007FFF);
929 ew32(ICS, ~mask & 0x00007FFF);
933 if (adapter->test_icr) {
940 /* Disable all the interrupts */
941 ew32(IMC, 0xFFFFFFFF);
945 /* Unhook test interrupt handler */
946 free_irq(irq, netdev);
951 static void e1000_free_desc_rings(struct e1000_adapter *adapter)
953 struct e1000_tx_ring *txdr = &adapter->test_tx_ring;
954 struct e1000_rx_ring *rxdr = &adapter->test_rx_ring;
955 struct pci_dev *pdev = adapter->pdev;
958 if (txdr->desc && txdr->buffer_info) {
959 for (i = 0; i < txdr->count; i++) {
960 if (txdr->buffer_info[i].dma)
961 dma_unmap_single(&pdev->dev,
962 txdr->buffer_info[i].dma,
963 txdr->buffer_info[i].length,
965 if (txdr->buffer_info[i].skb)
966 dev_kfree_skb(txdr->buffer_info[i].skb);
970 if (rxdr->desc && rxdr->buffer_info) {
971 for (i = 0; i < rxdr->count; i++) {
972 if (rxdr->buffer_info[i].dma)
973 dma_unmap_single(&pdev->dev,
974 rxdr->buffer_info[i].dma,
975 rxdr->buffer_info[i].length,
977 if (rxdr->buffer_info[i].skb)
978 dev_kfree_skb(rxdr->buffer_info[i].skb);
983 dma_free_coherent(&pdev->dev, txdr->size, txdr->desc,
988 dma_free_coherent(&pdev->dev, rxdr->size, rxdr->desc,
993 kfree(txdr->buffer_info);
994 txdr->buffer_info = NULL;
995 kfree(rxdr->buffer_info);
996 rxdr->buffer_info = NULL;
999 static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
1001 struct e1000_hw *hw = &adapter->hw;
1002 struct e1000_tx_ring *txdr = &adapter->test_tx_ring;
1003 struct e1000_rx_ring *rxdr = &adapter->test_rx_ring;
1004 struct pci_dev *pdev = adapter->pdev;
1008 /* Setup Tx descriptor ring and Tx buffers */
1011 txdr->count = E1000_DEFAULT_TXD;
1013 txdr->buffer_info = kcalloc(txdr->count, sizeof(struct e1000_buffer),
1015 if (!txdr->buffer_info) {
1020 txdr->size = txdr->count * sizeof(struct e1000_tx_desc);
1021 txdr->size = ALIGN(txdr->size, 4096);
1022 txdr->desc = dma_alloc_coherent(&pdev->dev, txdr->size, &txdr->dma,
1023 GFP_KERNEL | __GFP_ZERO);
1028 txdr->next_to_use = txdr->next_to_clean = 0;
1030 ew32(TDBAL, ((u64)txdr->dma & 0x00000000FFFFFFFF));
1031 ew32(TDBAH, ((u64)txdr->dma >> 32));
1032 ew32(TDLEN, txdr->count * sizeof(struct e1000_tx_desc));
1035 ew32(TCTL, E1000_TCTL_PSP | E1000_TCTL_EN |
1036 E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT |
1037 E1000_FDX_COLLISION_DISTANCE << E1000_COLD_SHIFT);
1039 for (i = 0; i < txdr->count; i++) {
1040 struct e1000_tx_desc *tx_desc = E1000_TX_DESC(*txdr, i);
1041 struct sk_buff *skb;
1042 unsigned int size = 1024;
1044 skb = alloc_skb(size, GFP_KERNEL);
1050 txdr->buffer_info[i].skb = skb;
1051 txdr->buffer_info[i].length = skb->len;
1052 txdr->buffer_info[i].dma =
1053 dma_map_single(&pdev->dev, skb->data, skb->len,
1055 if (dma_mapping_error(&pdev->dev, txdr->buffer_info[i].dma)) {
1059 tx_desc->buffer_addr = cpu_to_le64(txdr->buffer_info[i].dma);
1060 tx_desc->lower.data = cpu_to_le32(skb->len);
1061 tx_desc->lower.data |= cpu_to_le32(E1000_TXD_CMD_EOP |
1062 E1000_TXD_CMD_IFCS |
1064 tx_desc->upper.data = 0;
1067 /* Setup Rx descriptor ring and Rx buffers */
1070 rxdr->count = E1000_DEFAULT_RXD;
1072 rxdr->buffer_info = kcalloc(rxdr->count, sizeof(struct e1000_buffer),
1074 if (!rxdr->buffer_info) {
1079 rxdr->size = rxdr->count * sizeof(struct e1000_rx_desc);
1080 rxdr->desc = dma_alloc_coherent(&pdev->dev, rxdr->size, &rxdr->dma,
1081 GFP_KERNEL | __GFP_ZERO);
1086 rxdr->next_to_use = rxdr->next_to_clean = 0;
1089 ew32(RCTL, rctl & ~E1000_RCTL_EN);
1090 ew32(RDBAL, ((u64)rxdr->dma & 0xFFFFFFFF));
1091 ew32(RDBAH, ((u64)rxdr->dma >> 32));
1092 ew32(RDLEN, rxdr->size);
1095 rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_SZ_2048 |
1096 E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF |
1097 (hw->mc_filter_type << E1000_RCTL_MO_SHIFT);
1100 for (i = 0; i < rxdr->count; i++) {
1101 struct e1000_rx_desc *rx_desc = E1000_RX_DESC(*rxdr, i);
1102 struct sk_buff *skb;
1104 skb = alloc_skb(E1000_RXBUFFER_2048 + NET_IP_ALIGN, GFP_KERNEL);
1109 skb_reserve(skb, NET_IP_ALIGN);
1110 rxdr->buffer_info[i].skb = skb;
1111 rxdr->buffer_info[i].length = E1000_RXBUFFER_2048;
1112 rxdr->buffer_info[i].dma =
1113 dma_map_single(&pdev->dev, skb->data,
1114 E1000_RXBUFFER_2048, DMA_FROM_DEVICE);
1115 if (dma_mapping_error(&pdev->dev, rxdr->buffer_info[i].dma)) {
1119 rx_desc->buffer_addr = cpu_to_le64(rxdr->buffer_info[i].dma);
1120 memset(skb->data, 0x00, skb->len);
1126 e1000_free_desc_rings(adapter);
1130 static void e1000_phy_disable_receiver(struct e1000_adapter *adapter)
1132 struct e1000_hw *hw = &adapter->hw;
1134 /* Write out to PHY registers 29 and 30 to disable the Receiver. */
1135 e1000_write_phy_reg(hw, 29, 0x001F);
1136 e1000_write_phy_reg(hw, 30, 0x8FFC);
1137 e1000_write_phy_reg(hw, 29, 0x001A);
1138 e1000_write_phy_reg(hw, 30, 0x8FF0);
1141 static void e1000_phy_reset_clk_and_crs(struct e1000_adapter *adapter)
1143 struct e1000_hw *hw = &adapter->hw;
1146 /* Because we reset the PHY above, we need to re-force TX_CLK in the
1147 * Extended PHY Specific Control Register to 25MHz clock. This
1148 * value defaults back to a 2.5MHz clock when the PHY is reset.
1150 e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_reg);
1151 phy_reg |= M88E1000_EPSCR_TX_CLK_25;
1152 e1000_write_phy_reg(hw,
1153 M88E1000_EXT_PHY_SPEC_CTRL, phy_reg);
1155 /* In addition, because of the s/w reset above, we need to enable
1156 * CRS on TX. This must be set for both full and half duplex
1159 e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_reg);
1160 phy_reg |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
1161 e1000_write_phy_reg(hw,
1162 M88E1000_PHY_SPEC_CTRL, phy_reg);
1165 static int e1000_nonintegrated_phy_loopback(struct e1000_adapter *adapter)
1167 struct e1000_hw *hw = &adapter->hw;
1171 /* Setup the Device Control Register for PHY loopback test. */
1173 ctrl_reg = er32(CTRL);
1174 ctrl_reg |= (E1000_CTRL_ILOS | /* Invert Loss-Of-Signal */
1175 E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
1176 E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
1177 E1000_CTRL_SPD_1000 | /* Force Speed to 1000 */
1178 E1000_CTRL_FD); /* Force Duplex to FULL */
1180 ew32(CTRL, ctrl_reg);
1182 /* Read the PHY Specific Control Register (0x10) */
1183 e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_reg);
1185 /* Clear Auto-Crossover bits in PHY Specific Control Register
1188 phy_reg &= ~M88E1000_PSCR_AUTO_X_MODE;
1189 e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_reg);
1191 /* Perform software reset on the PHY */
1192 e1000_phy_reset(hw);
1194 /* Have to setup TX_CLK and TX_CRS after software reset */
1195 e1000_phy_reset_clk_and_crs(adapter);
1197 e1000_write_phy_reg(hw, PHY_CTRL, 0x8100);
1199 /* Wait for reset to complete. */
1202 /* Have to setup TX_CLK and TX_CRS after software reset */
1203 e1000_phy_reset_clk_and_crs(adapter);
1205 /* Write out to PHY registers 29 and 30 to disable the Receiver. */
1206 e1000_phy_disable_receiver(adapter);
1208 /* Set the loopback bit in the PHY control register. */
1209 e1000_read_phy_reg(hw, PHY_CTRL, &phy_reg);
1210 phy_reg |= MII_CR_LOOPBACK;
1211 e1000_write_phy_reg(hw, PHY_CTRL, phy_reg);
1213 /* Setup TX_CLK and TX_CRS one more time. */
1214 e1000_phy_reset_clk_and_crs(adapter);
1216 /* Check Phy Configuration */
1217 e1000_read_phy_reg(hw, PHY_CTRL, &phy_reg);
1218 if (phy_reg != 0x4100)
1221 e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_reg);
1222 if (phy_reg != 0x0070)
1225 e1000_read_phy_reg(hw, 29, &phy_reg);
1226 if (phy_reg != 0x001A)
1232 static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
1234 struct e1000_hw *hw = &adapter->hw;
1238 hw->autoneg = false;
1240 if (hw->phy_type == e1000_phy_m88) {
1241 /* Auto-MDI/MDIX Off */
1242 e1000_write_phy_reg(hw,
1243 M88E1000_PHY_SPEC_CTRL, 0x0808);
1244 /* reset to update Auto-MDI/MDIX */
1245 e1000_write_phy_reg(hw, PHY_CTRL, 0x9140);
1247 e1000_write_phy_reg(hw, PHY_CTRL, 0x8140);
1250 ctrl_reg = er32(CTRL);
1252 /* force 1000, set loopback */
1253 e1000_write_phy_reg(hw, PHY_CTRL, 0x4140);
1255 /* Now set up the MAC to the same speed/duplex as the PHY. */
1256 ctrl_reg = er32(CTRL);
1257 ctrl_reg &= ~E1000_CTRL_SPD_SEL; /* Clear the speed sel bits */
1258 ctrl_reg |= (E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
1259 E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
1260 E1000_CTRL_SPD_1000 |/* Force Speed to 1000 */
1261 E1000_CTRL_FD); /* Force Duplex to FULL */
1263 if (hw->media_type == e1000_media_type_copper &&
1264 hw->phy_type == e1000_phy_m88)
1265 ctrl_reg |= E1000_CTRL_ILOS; /* Invert Loss of Signal */
1267 /* Set the ILOS bit on the fiber Nic is half
1268 * duplex link is detected.
1270 stat_reg = er32(STATUS);
1271 if ((stat_reg & E1000_STATUS_FD) == 0)
1272 ctrl_reg |= (E1000_CTRL_ILOS | E1000_CTRL_SLU);
1275 ew32(CTRL, ctrl_reg);
1277 /* Disable the receiver on the PHY so when a cable is plugged in, the
1278 * PHY does not begin to autoneg when a cable is reconnected to the NIC.
1280 if (hw->phy_type == e1000_phy_m88)
1281 e1000_phy_disable_receiver(adapter);
1288 static int e1000_set_phy_loopback(struct e1000_adapter *adapter)
1290 struct e1000_hw *hw = &adapter->hw;
1294 switch (hw->mac_type) {
1296 if (hw->media_type == e1000_media_type_copper) {
1297 /* Attempt to setup Loopback mode on Non-integrated PHY.
1298 * Some PHY registers get corrupted at random, so
1299 * attempt this 10 times.
1301 while (e1000_nonintegrated_phy_loopback(adapter) &&
1311 case e1000_82545_rev_3:
1313 case e1000_82546_rev_3:
1315 case e1000_82541_rev_2:
1317 case e1000_82547_rev_2:
1318 return e1000_integrated_phy_loopback(adapter);
1321 /* Default PHY loopback work is to read the MII
1322 * control register and assert bit 14 (loopback mode).
1324 e1000_read_phy_reg(hw, PHY_CTRL, &phy_reg);
1325 phy_reg |= MII_CR_LOOPBACK;
1326 e1000_write_phy_reg(hw, PHY_CTRL, phy_reg);
1334 static int e1000_setup_loopback_test(struct e1000_adapter *adapter)
1336 struct e1000_hw *hw = &adapter->hw;
1339 if (hw->media_type == e1000_media_type_fiber ||
1340 hw->media_type == e1000_media_type_internal_serdes) {
1341 switch (hw->mac_type) {
1344 case e1000_82545_rev_3:
1345 case e1000_82546_rev_3:
1346 return e1000_set_phy_loopback(adapter);
1350 rctl |= E1000_RCTL_LBM_TCVR;
1354 } else if (hw->media_type == e1000_media_type_copper)
1355 return e1000_set_phy_loopback(adapter);
1360 static void e1000_loopback_cleanup(struct e1000_adapter *adapter)
1362 struct e1000_hw *hw = &adapter->hw;
1367 rctl &= ~(E1000_RCTL_LBM_TCVR | E1000_RCTL_LBM_MAC);
1370 switch (hw->mac_type) {
1373 case e1000_82545_rev_3:
1374 case e1000_82546_rev_3:
1377 e1000_read_phy_reg(hw, PHY_CTRL, &phy_reg);
1378 if (phy_reg & MII_CR_LOOPBACK) {
1379 phy_reg &= ~MII_CR_LOOPBACK;
1380 e1000_write_phy_reg(hw, PHY_CTRL, phy_reg);
1381 e1000_phy_reset(hw);
1387 static void e1000_create_lbtest_frame(struct sk_buff *skb,
1388 unsigned int frame_size)
1390 memset(skb->data, 0xFF, frame_size);
1392 memset(&skb->data[frame_size / 2], 0xAA, frame_size / 2 - 1);
1393 memset(&skb->data[frame_size / 2 + 10], 0xBE, 1);
1394 memset(&skb->data[frame_size / 2 + 12], 0xAF, 1);
1397 static int e1000_check_lbtest_frame(struct sk_buff *skb,
1398 unsigned int frame_size)
1401 if (*(skb->data + 3) == 0xFF) {
1402 if ((*(skb->data + frame_size / 2 + 10) == 0xBE) &&
1403 (*(skb->data + frame_size / 2 + 12) == 0xAF)) {
1410 static int e1000_run_loopback_test(struct e1000_adapter *adapter)
1412 struct e1000_hw *hw = &adapter->hw;
1413 struct e1000_tx_ring *txdr = &adapter->test_tx_ring;
1414 struct e1000_rx_ring *rxdr = &adapter->test_rx_ring;
1415 struct pci_dev *pdev = adapter->pdev;
1416 int i, j, k, l, lc, good_cnt, ret_val=0;
1419 ew32(RDT, rxdr->count - 1);
1421 /* Calculate the loop count based on the largest descriptor ring
1422 * The idea is to wrap the largest ring a number of times using 64
1423 * send/receive pairs during each loop
1426 if (rxdr->count <= txdr->count)
1427 lc = ((txdr->count / 64) * 2) + 1;
1429 lc = ((rxdr->count / 64) * 2) + 1;
1432 for (j = 0; j <= lc; j++) { /* loop count loop */
1433 for (i = 0; i < 64; i++) { /* send the packets */
1434 e1000_create_lbtest_frame(txdr->buffer_info[i].skb,
1436 dma_sync_single_for_device(&pdev->dev,
1437 txdr->buffer_info[k].dma,
1438 txdr->buffer_info[k].length,
1440 if (unlikely(++k == txdr->count)) k = 0;
1443 E1000_WRITE_FLUSH();
1445 time = jiffies; /* set the start time for the receive */
1447 do { /* receive the sent packets */
1448 dma_sync_single_for_cpu(&pdev->dev,
1449 rxdr->buffer_info[l].dma,
1450 rxdr->buffer_info[l].length,
1453 ret_val = e1000_check_lbtest_frame(
1454 rxdr->buffer_info[l].skb,
1458 if (unlikely(++l == rxdr->count)) l = 0;
1459 /* time + 20 msecs (200 msecs on 2.4) is more than
1460 * enough time to complete the receives, if it's
1461 * exceeded, break and error off
1463 } while (good_cnt < 64 && jiffies < (time + 20));
1464 if (good_cnt != 64) {
1465 ret_val = 13; /* ret_val is the same as mis-compare */
1468 if (jiffies >= (time + 2)) {
1469 ret_val = 14; /* error code for time out error */
1472 } /* end loop count loop */
1476 static int e1000_loopback_test(struct e1000_adapter *adapter, u64 *data)
1478 *data = e1000_setup_desc_rings(adapter);
1481 *data = e1000_setup_loopback_test(adapter);
1484 *data = e1000_run_loopback_test(adapter);
1485 e1000_loopback_cleanup(adapter);
1488 e1000_free_desc_rings(adapter);
1493 static int e1000_link_test(struct e1000_adapter *adapter, u64 *data)
1495 struct e1000_hw *hw = &adapter->hw;
1497 if (hw->media_type == e1000_media_type_internal_serdes) {
1499 hw->serdes_has_link = false;
1501 /* On some blade server designs, link establishment
1502 * could take as long as 2-3 minutes
1505 e1000_check_for_link(hw);
1506 if (hw->serdes_has_link)
1509 } while (i++ < 3750);
1513 e1000_check_for_link(hw);
1514 if (hw->autoneg) /* if auto_neg is set wait for it */
1517 if (!(er32(STATUS) & E1000_STATUS_LU)) {
1524 static int e1000_get_sset_count(struct net_device *netdev, int sset)
1528 return E1000_TEST_LEN;
1530 return E1000_STATS_LEN;
1536 static void e1000_diag_test(struct net_device *netdev,
1537 struct ethtool_test *eth_test, u64 *data)
1539 struct e1000_adapter *adapter = netdev_priv(netdev);
1540 struct e1000_hw *hw = &adapter->hw;
1541 bool if_running = netif_running(netdev);
1543 set_bit(__E1000_TESTING, &adapter->flags);
1544 if (eth_test->flags == ETH_TEST_FL_OFFLINE) {
1547 /* save speed, duplex, autoneg settings */
1548 u16 autoneg_advertised = hw->autoneg_advertised;
1549 u8 forced_speed_duplex = hw->forced_speed_duplex;
1550 u8 autoneg = hw->autoneg;
1552 e_info(hw, "offline testing starting\n");
1554 /* Link test performed before hardware reset so autoneg doesn't
1555 * interfere with test result
1557 if (e1000_link_test(adapter, &data[4]))
1558 eth_test->flags |= ETH_TEST_FL_FAILED;
1561 /* indicate we're in test mode */
1564 e1000_reset(adapter);
1566 if (e1000_reg_test(adapter, &data[0]))
1567 eth_test->flags |= ETH_TEST_FL_FAILED;
1569 e1000_reset(adapter);
1570 if (e1000_eeprom_test(adapter, &data[1]))
1571 eth_test->flags |= ETH_TEST_FL_FAILED;
1573 e1000_reset(adapter);
1574 if (e1000_intr_test(adapter, &data[2]))
1575 eth_test->flags |= ETH_TEST_FL_FAILED;
1577 e1000_reset(adapter);
1578 /* make sure the phy is powered up */
1579 e1000_power_up_phy(adapter);
1580 if (e1000_loopback_test(adapter, &data[3]))
1581 eth_test->flags |= ETH_TEST_FL_FAILED;
1583 /* restore speed, duplex, autoneg settings */
1584 hw->autoneg_advertised = autoneg_advertised;
1585 hw->forced_speed_duplex = forced_speed_duplex;
1586 hw->autoneg = autoneg;
1588 e1000_reset(adapter);
1589 clear_bit(__E1000_TESTING, &adapter->flags);
1593 e_info(hw, "online testing starting\n");
1595 if (e1000_link_test(adapter, &data[4]))
1596 eth_test->flags |= ETH_TEST_FL_FAILED;
1598 /* Online tests aren't run; pass by default */
1604 clear_bit(__E1000_TESTING, &adapter->flags);
1606 msleep_interruptible(4 * 1000);
1609 static int e1000_wol_exclusion(struct e1000_adapter *adapter,
1610 struct ethtool_wolinfo *wol)
1612 struct e1000_hw *hw = &adapter->hw;
1613 int retval = 1; /* fail by default */
1615 switch (hw->device_id) {
1616 case E1000_DEV_ID_82542:
1617 case E1000_DEV_ID_82543GC_FIBER:
1618 case E1000_DEV_ID_82543GC_COPPER:
1619 case E1000_DEV_ID_82544EI_FIBER:
1620 case E1000_DEV_ID_82546EB_QUAD_COPPER:
1621 case E1000_DEV_ID_82545EM_FIBER:
1622 case E1000_DEV_ID_82545EM_COPPER:
1623 case E1000_DEV_ID_82546GB_QUAD_COPPER:
1624 case E1000_DEV_ID_82546GB_PCIE:
1625 /* these don't support WoL at all */
1628 case E1000_DEV_ID_82546EB_FIBER:
1629 case E1000_DEV_ID_82546GB_FIBER:
1630 /* Wake events not supported on port B */
1631 if (er32(STATUS) & E1000_STATUS_FUNC_1) {
1635 /* return success for non excluded adapter ports */
1638 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
1639 /* quad port adapters only support WoL on port A */
1640 if (!adapter->quad_port_a) {
1644 /* return success for non excluded adapter ports */
1648 /* dual port cards only support WoL on port A from now on
1649 * unless it was enabled in the eeprom for port B
1650 * so exclude FUNC_1 ports from having WoL enabled
1652 if (er32(STATUS) & E1000_STATUS_FUNC_1 &&
1653 !adapter->eeprom_wol) {
1664 static void e1000_get_wol(struct net_device *netdev,
1665 struct ethtool_wolinfo *wol)
1667 struct e1000_adapter *adapter = netdev_priv(netdev);
1668 struct e1000_hw *hw = &adapter->hw;
1670 wol->supported = WAKE_UCAST | WAKE_MCAST |
1671 WAKE_BCAST | WAKE_MAGIC;
1674 /* this function will set ->supported = 0 and return 1 if wol is not
1675 * supported by this hardware
1677 if (e1000_wol_exclusion(adapter, wol) ||
1678 !device_can_wakeup(&adapter->pdev->dev))
1681 /* apply any specific unsupported masks here */
1682 switch (hw->device_id) {
1683 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
1684 /* KSP3 does not support UCAST wake-ups */
1685 wol->supported &= ~WAKE_UCAST;
1687 if (adapter->wol & E1000_WUFC_EX)
1688 e_err(drv, "Interface does not support directed "
1689 "(unicast) frame wake-up packets\n");
1695 if (adapter->wol & E1000_WUFC_EX)
1696 wol->wolopts |= WAKE_UCAST;
1697 if (adapter->wol & E1000_WUFC_MC)
1698 wol->wolopts |= WAKE_MCAST;
1699 if (adapter->wol & E1000_WUFC_BC)
1700 wol->wolopts |= WAKE_BCAST;
1701 if (adapter->wol & E1000_WUFC_MAG)
1702 wol->wolopts |= WAKE_MAGIC;
1705 static int e1000_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
1707 struct e1000_adapter *adapter = netdev_priv(netdev);
1708 struct e1000_hw *hw = &adapter->hw;
1710 if (wol->wolopts & (WAKE_PHY | WAKE_ARP | WAKE_MAGICSECURE))
1713 if (e1000_wol_exclusion(adapter, wol) ||
1714 !device_can_wakeup(&adapter->pdev->dev))
1715 return wol->wolopts ? -EOPNOTSUPP : 0;
1717 switch (hw->device_id) {
1718 case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
1719 if (wol->wolopts & WAKE_UCAST) {
1720 e_err(drv, "Interface does not support directed "
1721 "(unicast) frame wake-up packets\n");
1729 /* these settings will always override what we currently have */
1732 if (wol->wolopts & WAKE_UCAST)
1733 adapter->wol |= E1000_WUFC_EX;
1734 if (wol->wolopts & WAKE_MCAST)
1735 adapter->wol |= E1000_WUFC_MC;
1736 if (wol->wolopts & WAKE_BCAST)
1737 adapter->wol |= E1000_WUFC_BC;
1738 if (wol->wolopts & WAKE_MAGIC)
1739 adapter->wol |= E1000_WUFC_MAG;
1741 device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol);
1746 static int e1000_set_phys_id(struct net_device *netdev,
1747 enum ethtool_phys_id_state state)
1749 struct e1000_adapter *adapter = netdev_priv(netdev);
1750 struct e1000_hw *hw = &adapter->hw;
1753 case ETHTOOL_ID_ACTIVE:
1754 e1000_setup_led(hw);
1761 case ETHTOOL_ID_OFF:
1765 case ETHTOOL_ID_INACTIVE:
1766 e1000_cleanup_led(hw);
1772 static int e1000_get_coalesce(struct net_device *netdev,
1773 struct ethtool_coalesce *ec)
1775 struct e1000_adapter *adapter = netdev_priv(netdev);
1777 if (adapter->hw.mac_type < e1000_82545)
1780 if (adapter->itr_setting <= 4)
1781 ec->rx_coalesce_usecs = adapter->itr_setting;
1783 ec->rx_coalesce_usecs = 1000000 / adapter->itr_setting;
1788 static int e1000_set_coalesce(struct net_device *netdev,
1789 struct ethtool_coalesce *ec)
1791 struct e1000_adapter *adapter = netdev_priv(netdev);
1792 struct e1000_hw *hw = &adapter->hw;
1794 if (hw->mac_type < e1000_82545)
1797 if ((ec->rx_coalesce_usecs > E1000_MAX_ITR_USECS) ||
1798 ((ec->rx_coalesce_usecs > 4) &&
1799 (ec->rx_coalesce_usecs < E1000_MIN_ITR_USECS)) ||
1800 (ec->rx_coalesce_usecs == 2))
1803 if (ec->rx_coalesce_usecs == 4) {
1804 adapter->itr = adapter->itr_setting = 4;
1805 } else if (ec->rx_coalesce_usecs <= 3) {
1806 adapter->itr = 20000;
1807 adapter->itr_setting = ec->rx_coalesce_usecs;
1809 adapter->itr = (1000000 / ec->rx_coalesce_usecs);
1810 adapter->itr_setting = adapter->itr & ~3;
1813 if (adapter->itr_setting != 0)
1814 ew32(ITR, 1000000000 / (adapter->itr * 256));
1821 static int e1000_nway_reset(struct net_device *netdev)
1823 struct e1000_adapter *adapter = netdev_priv(netdev);
1824 if (netif_running(netdev))
1825 e1000_reinit_locked(adapter);
1829 static void e1000_get_ethtool_stats(struct net_device *netdev,
1830 struct ethtool_stats *stats, u64 *data)
1832 struct e1000_adapter *adapter = netdev_priv(netdev);
1836 e1000_update_stats(adapter);
1837 for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
1838 switch (e1000_gstrings_stats[i].type) {
1840 p = (char *) netdev +
1841 e1000_gstrings_stats[i].stat_offset;
1844 p = (char *) adapter +
1845 e1000_gstrings_stats[i].stat_offset;
1849 data[i] = (e1000_gstrings_stats[i].sizeof_stat ==
1850 sizeof(u64)) ? *(u64 *)p : *(u32 *)p;
1852 /* BUG_ON(i != E1000_STATS_LEN); */
1855 static void e1000_get_strings(struct net_device *netdev, u32 stringset,
1861 switch (stringset) {
1863 memcpy(data, *e1000_gstrings_test,
1864 sizeof(e1000_gstrings_test));
1867 for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
1868 memcpy(p, e1000_gstrings_stats[i].stat_string,
1870 p += ETH_GSTRING_LEN;
1872 /* BUG_ON(p - data != E1000_STATS_LEN * ETH_GSTRING_LEN); */
1877 static const struct ethtool_ops e1000_ethtool_ops = {
1878 .get_settings = e1000_get_settings,
1879 .set_settings = e1000_set_settings,
1880 .get_drvinfo = e1000_get_drvinfo,
1881 .get_regs_len = e1000_get_regs_len,
1882 .get_regs = e1000_get_regs,
1883 .get_wol = e1000_get_wol,
1884 .set_wol = e1000_set_wol,
1885 .get_msglevel = e1000_get_msglevel,
1886 .set_msglevel = e1000_set_msglevel,
1887 .nway_reset = e1000_nway_reset,
1888 .get_link = e1000_get_link,
1889 .get_eeprom_len = e1000_get_eeprom_len,
1890 .get_eeprom = e1000_get_eeprom,
1891 .set_eeprom = e1000_set_eeprom,
1892 .get_ringparam = e1000_get_ringparam,
1893 .set_ringparam = e1000_set_ringparam,
1894 .get_pauseparam = e1000_get_pauseparam,
1895 .set_pauseparam = e1000_set_pauseparam,
1896 .self_test = e1000_diag_test,
1897 .get_strings = e1000_get_strings,
1898 .set_phys_id = e1000_set_phys_id,
1899 .get_ethtool_stats = e1000_get_ethtool_stats,
1900 .get_sset_count = e1000_get_sset_count,
1901 .get_coalesce = e1000_get_coalesce,
1902 .set_coalesce = e1000_set_coalesce,
1903 .get_ts_info = ethtool_op_get_ts_info,
1906 void e1000_set_ethtool_ops(struct net_device *netdev)
1908 SET_ETHTOOL_OPS(netdev, &e1000_ethtool_ops);