linux/drivers/net/ethernet/intel/e1000e/ethtool.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/* Intel PRO/1000 Linux driver
   3 * Copyright(c) 1999 - 2015 Intel Corporation.
   4 *
   5 * This program is free software; you can redistribute it and/or modify it
   6 * under the terms and conditions of the GNU General Public License,
   7 * version 2, as published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope it will be useful, but WITHOUT
  10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  12 * more details.
  13 *
  14 * The full GNU General Public License is included in this distribution in
  15 * the file called "COPYING".
  16 *
  17 * Contact Information:
  18 * Linux NICS <linux.nics@intel.com>
  19 * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
  20 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  21 */
  22
  23/* ethtool support for e1000 */
  24
  25#include <linux/netdevice.h>
  26#include <linux/interrupt.h>
  27#include <linux/ethtool.h>
  28#include <linux/pci.h>
  29#include <linux/slab.h>
  30#include <linux/delay.h>
  31#include <linux/vmalloc.h>
  32#include <linux/pm_runtime.h>
  33
  34#include "e1000.h"
  35
  36enum { NETDEV_STATS, E1000_STATS };
  37
  38struct e1000_stats {
  39        char stat_string[ETH_GSTRING_LEN];
  40        int type;
  41        int sizeof_stat;
  42        int stat_offset;
  43};
  44
  45#define E1000_STAT(str, m) { \
  46                .stat_string = str, \
  47                .type = E1000_STATS, \
  48                .sizeof_stat = sizeof(((struct e1000_adapter *)0)->m), \
  49                .stat_offset = offsetof(struct e1000_adapter, m) }
  50#define E1000_NETDEV_STAT(str, m) { \
  51                .stat_string = str, \
  52                .type = NETDEV_STATS, \
  53                .sizeof_stat = sizeof(((struct rtnl_link_stats64 *)0)->m), \
  54                .stat_offset = offsetof(struct rtnl_link_stats64, m) }
  55
  56static const struct e1000_stats e1000_gstrings_stats[] = {
  57        E1000_STAT("rx_packets", stats.gprc),
  58        E1000_STAT("tx_packets", stats.gptc),
  59        E1000_STAT("rx_bytes", stats.gorc),
  60        E1000_STAT("tx_bytes", stats.gotc),
  61        E1000_STAT("rx_broadcast", stats.bprc),
  62        E1000_STAT("tx_broadcast", stats.bptc),
  63        E1000_STAT("rx_multicast", stats.mprc),
  64        E1000_STAT("tx_multicast", stats.mptc),
  65        E1000_NETDEV_STAT("rx_errors", rx_errors),
  66        E1000_NETDEV_STAT("tx_errors", tx_errors),
  67        E1000_NETDEV_STAT("tx_dropped", tx_dropped),
  68        E1000_STAT("multicast", stats.mprc),
  69        E1000_STAT("collisions", stats.colc),
  70        E1000_NETDEV_STAT("rx_length_errors", rx_length_errors),
  71        E1000_NETDEV_STAT("rx_over_errors", rx_over_errors),
  72        E1000_STAT("rx_crc_errors", stats.crcerrs),
  73        E1000_NETDEV_STAT("rx_frame_errors", rx_frame_errors),
  74        E1000_STAT("rx_no_buffer_count", stats.rnbc),
  75        E1000_STAT("rx_missed_errors", stats.mpc),
  76        E1000_STAT("tx_aborted_errors", stats.ecol),
  77        E1000_STAT("tx_carrier_errors", stats.tncrs),
  78        E1000_NETDEV_STAT("tx_fifo_errors", tx_fifo_errors),
  79        E1000_NETDEV_STAT("tx_heartbeat_errors", tx_heartbeat_errors),
  80        E1000_STAT("tx_window_errors", stats.latecol),
  81        E1000_STAT("tx_abort_late_coll", stats.latecol),
  82        E1000_STAT("tx_deferred_ok", stats.dc),
  83        E1000_STAT("tx_single_coll_ok", stats.scc),
  84        E1000_STAT("tx_multi_coll_ok", stats.mcc),
  85        E1000_STAT("tx_timeout_count", tx_timeout_count),
  86        E1000_STAT("tx_restart_queue", restart_queue),
  87        E1000_STAT("rx_long_length_errors", stats.roc),
  88        E1000_STAT("rx_short_length_errors", stats.ruc),
  89        E1000_STAT("rx_align_errors", stats.algnerrc),
  90        E1000_STAT("tx_tcp_seg_good", stats.tsctc),
  91        E1000_STAT("tx_tcp_seg_failed", stats.tsctfc),
  92        E1000_STAT("rx_flow_control_xon", stats.xonrxc),
  93        E1000_STAT("rx_flow_control_xoff", stats.xoffrxc),
  94        E1000_STAT("tx_flow_control_xon", stats.xontxc),
  95        E1000_STAT("tx_flow_control_xoff", stats.xofftxc),
  96        E1000_STAT("rx_csum_offload_good", hw_csum_good),
  97        E1000_STAT("rx_csum_offload_errors", hw_csum_err),
  98        E1000_STAT("rx_header_split", rx_hdr_split),
  99        E1000_STAT("alloc_rx_buff_failed", alloc_rx_buff_failed),
 100        E1000_STAT("tx_smbus", stats.mgptc),
 101        E1000_STAT("rx_smbus", stats.mgprc),
 102        E1000_STAT("dropped_smbus", stats.mgpdc),
 103        E1000_STAT("rx_dma_failed", rx_dma_failed),
 104        E1000_STAT("tx_dma_failed", tx_dma_failed),
 105        E1000_STAT("rx_hwtstamp_cleared", rx_hwtstamp_cleared),
 106        E1000_STAT("uncorr_ecc_errors", uncorr_errors),
 107        E1000_STAT("corr_ecc_errors", corr_errors),
 108        E1000_STAT("tx_hwtstamp_timeouts", tx_hwtstamp_timeouts),
 109        E1000_STAT("tx_hwtstamp_skipped", tx_hwtstamp_skipped),
 110};
 111
 112#define E1000_GLOBAL_STATS_LEN  ARRAY_SIZE(e1000_gstrings_stats)
 113#define E1000_STATS_LEN (E1000_GLOBAL_STATS_LEN)
 114static const char e1000_gstrings_test[][ETH_GSTRING_LEN] = {
 115        "Register test  (offline)", "Eeprom test    (offline)",
 116        "Interrupt test (offline)", "Loopback test  (offline)",
 117        "Link test   (on/offline)"
 118};
 119
 120#define E1000_TEST_LEN ARRAY_SIZE(e1000_gstrings_test)
 121
 122static int e1000_get_link_ksettings(struct net_device *netdev,
 123                                    struct ethtool_link_ksettings *cmd)
 124{
 125        struct e1000_adapter *adapter = netdev_priv(netdev);
 126        struct e1000_hw *hw = &adapter->hw;
 127        u32 speed, supported, advertising;
 128
 129        if (hw->phy.media_type == e1000_media_type_copper) {
 130                supported = (SUPPORTED_10baseT_Half |
 131                             SUPPORTED_10baseT_Full |
 132                             SUPPORTED_100baseT_Half |
 133                             SUPPORTED_100baseT_Full |
 134                             SUPPORTED_1000baseT_Full |
 135                             SUPPORTED_Autoneg |
 136                             SUPPORTED_TP);
 137                if (hw->phy.type == e1000_phy_ife)
 138                        supported &= ~SUPPORTED_1000baseT_Full;
 139                advertising = ADVERTISED_TP;
 140
 141                if (hw->mac.autoneg == 1) {
 142                        advertising |= ADVERTISED_Autoneg;
 143                        /* the e1000 autoneg seems to match ethtool nicely */
 144                        advertising |= hw->phy.autoneg_advertised;
 145                }
 146
 147                cmd->base.port = PORT_TP;
 148                cmd->base.phy_address = hw->phy.addr;
 149        } else {
 150                supported   = (SUPPORTED_1000baseT_Full |
 151                               SUPPORTED_FIBRE |
 152                               SUPPORTED_Autoneg);
 153
 154                advertising = (ADVERTISED_1000baseT_Full |
 155                               ADVERTISED_FIBRE |
 156                               ADVERTISED_Autoneg);
 157
 158                cmd->base.port = PORT_FIBRE;
 159        }
 160
 161        speed = SPEED_UNKNOWN;
 162        cmd->base.duplex = DUPLEX_UNKNOWN;
 163
 164        if (netif_running(netdev)) {
 165                if (netif_carrier_ok(netdev)) {
 166                        speed = adapter->link_speed;
 167                        cmd->base.duplex = adapter->link_duplex - 1;
 168                }
 169        } else if (!pm_runtime_suspended(netdev->dev.parent)) {
 170                u32 status = er32(STATUS);
 171
 172                if (status & E1000_STATUS_LU) {
 173                        if (status & E1000_STATUS_SPEED_1000)
 174                                speed = SPEED_1000;
 175                        else if (status & E1000_STATUS_SPEED_100)
 176                                speed = SPEED_100;
 177                        else
 178                                speed = SPEED_10;
 179
 180                        if (status & E1000_STATUS_FD)
 181                                cmd->base.duplex = DUPLEX_FULL;
 182                        else
 183                                cmd->base.duplex = DUPLEX_HALF;
 184                }
 185        }
 186
 187        cmd->base.speed = speed;
 188        cmd->base.autoneg = ((hw->phy.media_type == e1000_media_type_fiber) ||
 189                         hw->mac.autoneg) ? AUTONEG_ENABLE : AUTONEG_DISABLE;
 190
 191        /* MDI-X => 2; MDI =>1; Invalid =>0 */
 192        if ((hw->phy.media_type == e1000_media_type_copper) &&
 193            netif_carrier_ok(netdev))
 194                cmd->base.eth_tp_mdix = hw->phy.is_mdix ?
 195                        ETH_TP_MDI_X : ETH_TP_MDI;
 196        else
 197                cmd->base.eth_tp_mdix = ETH_TP_MDI_INVALID;
 198
 199        if (hw->phy.mdix == AUTO_ALL_MODES)
 200                cmd->base.eth_tp_mdix_ctrl = ETH_TP_MDI_AUTO;
 201        else
 202                cmd->base.eth_tp_mdix_ctrl = hw->phy.mdix;
 203
 204        if (hw->phy.media_type != e1000_media_type_copper)
 205                cmd->base.eth_tp_mdix_ctrl = ETH_TP_MDI_INVALID;
 206
 207        ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
 208                                                supported);
 209        ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
 210                                                advertising);
 211
 212        return 0;
 213}
 214
 215static int e1000_set_spd_dplx(struct e1000_adapter *adapter, u32 spd, u8 dplx)
 216{
 217        struct e1000_mac_info *mac = &adapter->hw.mac;
 218
 219        mac->autoneg = 0;
 220
 221        /* Make sure dplx is at most 1 bit and lsb of speed is not set
 222         * for the switch() below to work
 223         */
 224        if ((spd & 1) || (dplx & ~1))
 225                goto err_inval;
 226
 227        /* Fiber NICs only allow 1000 gbps Full duplex */
 228        if ((adapter->hw.phy.media_type == e1000_media_type_fiber) &&
 229            (spd != SPEED_1000) && (dplx != DUPLEX_FULL)) {
 230                goto err_inval;
 231        }
 232
 233        switch (spd + dplx) {
 234        case SPEED_10 + DUPLEX_HALF:
 235                mac->forced_speed_duplex = ADVERTISE_10_HALF;
 236                break;
 237        case SPEED_10 + DUPLEX_FULL:
 238                mac->forced_speed_duplex = ADVERTISE_10_FULL;
 239                break;
 240        case SPEED_100 + DUPLEX_HALF:
 241                mac->forced_speed_duplex = ADVERTISE_100_HALF;
 242                break;
 243        case SPEED_100 + DUPLEX_FULL:
 244                mac->forced_speed_duplex = ADVERTISE_100_FULL;
 245                break;
 246        case SPEED_1000 + DUPLEX_FULL:
 247                if (adapter->hw.phy.media_type == e1000_media_type_copper) {
 248                        mac->autoneg = 1;
 249                        adapter->hw.phy.autoneg_advertised =
 250                                ADVERTISE_1000_FULL;
 251                } else {
 252                        mac->forced_speed_duplex = ADVERTISE_1000_FULL;
 253                }
 254                break;
 255        case SPEED_1000 + DUPLEX_HALF:  /* not supported */
 256        default:
 257                goto err_inval;
 258        }
 259
 260        /* clear MDI, MDI(-X) override is only allowed when autoneg enabled */
 261        adapter->hw.phy.mdix = AUTO_ALL_MODES;
 262
 263        return 0;
 264
 265err_inval:
 266        e_err("Unsupported Speed/Duplex configuration\n");
 267        return -EINVAL;
 268}
 269
 270static int e1000_set_link_ksettings(struct net_device *netdev,
 271                                    const struct ethtool_link_ksettings *cmd)
 272{
 273        struct e1000_adapter *adapter = netdev_priv(netdev);
 274        struct e1000_hw *hw = &adapter->hw;
 275        int ret_val = 0;
 276        u32 advertising;
 277
 278        ethtool_convert_link_mode_to_legacy_u32(&advertising,
 279                                                cmd->link_modes.advertising);
 280
 281        pm_runtime_get_sync(netdev->dev.parent);
 282
 283        /* When SoL/IDER sessions are active, autoneg/speed/duplex
 284         * cannot be changed
 285         */
 286        if (hw->phy.ops.check_reset_block &&
 287            hw->phy.ops.check_reset_block(hw)) {
 288                e_err("Cannot change link characteristics when SoL/IDER is active.\n");
 289                ret_val = -EINVAL;
 290                goto out;
 291        }
 292
 293        /* MDI setting is only allowed when autoneg enabled because
 294         * some hardware doesn't allow MDI setting when speed or
 295         * duplex is forced.
 296         */
 297        if (cmd->base.eth_tp_mdix_ctrl) {
 298                if (hw->phy.media_type != e1000_media_type_copper) {
 299                        ret_val = -EOPNOTSUPP;
 300                        goto out;
 301                }
 302
 303                if ((cmd->base.eth_tp_mdix_ctrl != ETH_TP_MDI_AUTO) &&
 304                    (cmd->base.autoneg != AUTONEG_ENABLE)) {
 305                        e_err("forcing MDI/MDI-X state is not supported when link speed and/or duplex are forced\n");
 306                        ret_val = -EINVAL;
 307                        goto out;
 308                }
 309        }
 310
 311        while (test_and_set_bit(__E1000_RESETTING, &adapter->state))
 312                usleep_range(1000, 2000);
 313
 314        if (cmd->base.autoneg == AUTONEG_ENABLE) {
 315                hw->mac.autoneg = 1;
 316                if (hw->phy.media_type == e1000_media_type_fiber)
 317                        hw->phy.autoneg_advertised = ADVERTISED_1000baseT_Full |
 318                            ADVERTISED_FIBRE | ADVERTISED_Autoneg;
 319                else
 320                        hw->phy.autoneg_advertised = advertising |
 321                            ADVERTISED_TP | ADVERTISED_Autoneg;
 322                advertising = hw->phy.autoneg_advertised;
 323                if (adapter->fc_autoneg)
 324                        hw->fc.requested_mode = e1000_fc_default;
 325        } else {
 326                u32 speed = cmd->base.speed;
 327                /* calling this overrides forced MDI setting */
 328                if (e1000_set_spd_dplx(adapter, speed, cmd->base.duplex)) {
 329                        ret_val = -EINVAL;
 330                        goto out;
 331                }
 332        }
 333
 334        /* MDI-X => 2; MDI => 1; Auto => 3 */
 335        if (cmd->base.eth_tp_mdix_ctrl) {
 336                /* fix up the value for auto (3 => 0) as zero is mapped
 337                 * internally to auto
 338                 */
 339                if (cmd->base.eth_tp_mdix_ctrl == ETH_TP_MDI_AUTO)
 340                        hw->phy.mdix = AUTO_ALL_MODES;
 341                else
 342                        hw->phy.mdix = cmd->base.eth_tp_mdix_ctrl;
 343        }
 344
 345        /* reset the link */
 346        if (netif_running(adapter->netdev)) {
 347                e1000e_down(adapter, true);
 348                e1000e_up(adapter);
 349        } else {
 350                e1000e_reset(adapter);
 351        }
 352
 353out:
 354        pm_runtime_put_sync(netdev->dev.parent);
 355        clear_bit(__E1000_RESETTING, &adapter->state);
 356        return ret_val;
 357}
 358
 359static void e1000_get_pauseparam(struct net_device *netdev,
 360                                 struct ethtool_pauseparam *pause)
 361{
 362        struct e1000_adapter *adapter = netdev_priv(netdev);
 363        struct e1000_hw *hw = &adapter->hw;
 364
 365        pause->autoneg =
 366            (adapter->fc_autoneg ? AUTONEG_ENABLE : AUTONEG_DISABLE);
 367
 368        if (hw->fc.current_mode == e1000_fc_rx_pause) {
 369                pause->rx_pause = 1;
 370        } else if (hw->fc.current_mode == e1000_fc_tx_pause) {
 371                pause->tx_pause = 1;
 372        } else if (hw->fc.current_mode == e1000_fc_full) {
 373                pause->rx_pause = 1;
 374                pause->tx_pause = 1;
 375        }
 376}
 377
 378static int e1000_set_pauseparam(struct net_device *netdev,
 379                                struct ethtool_pauseparam *pause)
 380{
 381        struct e1000_adapter *adapter = netdev_priv(netdev);
 382        struct e1000_hw *hw = &adapter->hw;
 383        int retval = 0;
 384
 385        adapter->fc_autoneg = pause->autoneg;
 386
 387        while (test_and_set_bit(__E1000_RESETTING, &adapter->state))
 388                usleep_range(1000, 2000);
 389
 390        pm_runtime_get_sync(netdev->dev.parent);
 391
 392        if (adapter->fc_autoneg == AUTONEG_ENABLE) {
 393                hw->fc.requested_mode = e1000_fc_default;
 394                if (netif_running(adapter->netdev)) {
 395                        e1000e_down(adapter, true);
 396                        e1000e_up(adapter);
 397                } else {
 398                        e1000e_reset(adapter);
 399                }
 400        } else {
 401                if (pause->rx_pause && pause->tx_pause)
 402                        hw->fc.requested_mode = e1000_fc_full;
 403                else if (pause->rx_pause && !pause->tx_pause)
 404                        hw->fc.requested_mode = e1000_fc_rx_pause;
 405                else if (!pause->rx_pause && pause->tx_pause)
 406                        hw->fc.requested_mode = e1000_fc_tx_pause;
 407                else if (!pause->rx_pause && !pause->tx_pause)
 408                        hw->fc.requested_mode = e1000_fc_none;
 409
 410                hw->fc.current_mode = hw->fc.requested_mode;
 411
 412                if (hw->phy.media_type == e1000_media_type_fiber) {
 413                        retval = hw->mac.ops.setup_link(hw);
 414                        /* implicit goto out */
 415                } else {
 416                        retval = e1000e_force_mac_fc(hw);
 417                        if (retval)
 418                                goto out;
 419                        e1000e_set_fc_watermarks(hw);
 420                }
 421        }
 422
 423out:
 424        pm_runtime_put_sync(netdev->dev.parent);
 425        clear_bit(__E1000_RESETTING, &adapter->state);
 426        return retval;
 427}
 428
 429static u32 e1000_get_msglevel(struct net_device *netdev)
 430{
 431        struct e1000_adapter *adapter = netdev_priv(netdev);
 432        return adapter->msg_enable;
 433}
 434
 435static void e1000_set_msglevel(struct net_device *netdev, u32 data)
 436{
 437        struct e1000_adapter *adapter = netdev_priv(netdev);
 438        adapter->msg_enable = data;
 439}
 440
 441static int e1000_get_regs_len(struct net_device __always_unused *netdev)
 442{
 443#define E1000_REGS_LEN 32       /* overestimate */
 444        return E1000_REGS_LEN * sizeof(u32);
 445}
 446
 447static void e1000_get_regs(struct net_device *netdev,
 448                           struct ethtool_regs *regs, void *p)
 449{
 450        struct e1000_adapter *adapter = netdev_priv(netdev);
 451        struct e1000_hw *hw = &adapter->hw;
 452        u32 *regs_buff = p;
 453        u16 phy_data;
 454
 455        pm_runtime_get_sync(netdev->dev.parent);
 456
 457        memset(p, 0, E1000_REGS_LEN * sizeof(u32));
 458
 459        regs->version = (1u << 24) |
 460                        (adapter->pdev->revision << 16) |
 461                        adapter->pdev->device;
 462
 463        regs_buff[0] = er32(CTRL);
 464        regs_buff[1] = er32(STATUS);
 465
 466        regs_buff[2] = er32(RCTL);
 467        regs_buff[3] = er32(RDLEN(0));
 468        regs_buff[4] = er32(RDH(0));
 469        regs_buff[5] = er32(RDT(0));
 470        regs_buff[6] = er32(RDTR);
 471
 472        regs_buff[7] = er32(TCTL);
 473        regs_buff[8] = er32(TDLEN(0));
 474        regs_buff[9] = er32(TDH(0));
 475        regs_buff[10] = er32(TDT(0));
 476        regs_buff[11] = er32(TIDV);
 477
 478        regs_buff[12] = adapter->hw.phy.type;   /* PHY type (IGP=1, M88=0) */
 479
 480        /* ethtool doesn't use anything past this point, so all this
 481         * code is likely legacy junk for apps that may or may not exist
 482         */
 483        if (hw->phy.type == e1000_phy_m88) {
 484                e1e_rphy(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
 485                regs_buff[13] = (u32)phy_data; /* cable length */
 486                regs_buff[14] = 0;  /* Dummy (to align w/ IGP phy reg dump) */
 487                regs_buff[15] = 0;  /* Dummy (to align w/ IGP phy reg dump) */
 488                regs_buff[16] = 0;  /* Dummy (to align w/ IGP phy reg dump) */
 489                e1e_rphy(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
 490                regs_buff[17] = (u32)phy_data; /* extended 10bt distance */
 491                regs_buff[18] = regs_buff[13]; /* cable polarity */
 492                regs_buff[19] = 0;  /* Dummy (to align w/ IGP phy reg dump) */
 493                regs_buff[20] = regs_buff[17]; /* polarity correction */
 494                /* phy receive errors */
 495                regs_buff[22] = adapter->phy_stats.receive_errors;
 496                regs_buff[23] = regs_buff[13]; /* mdix mode */
 497        }
 498        regs_buff[21] = 0;      /* was idle_errors */
 499        e1e_rphy(hw, MII_STAT1000, &phy_data);
 500        regs_buff[24] = (u32)phy_data;  /* phy local receiver status */
 501        regs_buff[25] = regs_buff[24];  /* phy remote receiver status */
 502
 503        pm_runtime_put_sync(netdev->dev.parent);
 504}
 505
 506static int e1000_get_eeprom_len(struct net_device *netdev)
 507{
 508        struct e1000_adapter *adapter = netdev_priv(netdev);
 509        return adapter->hw.nvm.word_size * 2;
 510}
 511
 512static int e1000_get_eeprom(struct net_device *netdev,
 513                            struct ethtool_eeprom *eeprom, u8 *bytes)
 514{
 515        struct e1000_adapter *adapter = netdev_priv(netdev);
 516        struct e1000_hw *hw = &adapter->hw;
 517        u16 *eeprom_buff;
 518        int first_word;
 519        int last_word;
 520        int ret_val = 0;
 521        u16 i;
 522
 523        if (eeprom->len == 0)
 524                return -EINVAL;
 525
 526        eeprom->magic = adapter->pdev->vendor | (adapter->pdev->device << 16);
 527
 528        first_word = eeprom->offset >> 1;
 529        last_word = (eeprom->offset + eeprom->len - 1) >> 1;
 530
 531        eeprom_buff = kmalloc(sizeof(u16) * (last_word - first_word + 1),
 532                              GFP_KERNEL);
 533        if (!eeprom_buff)
 534                return -ENOMEM;
 535
 536        pm_runtime_get_sync(netdev->dev.parent);
 537
 538        if (hw->nvm.type == e1000_nvm_eeprom_spi) {
 539                ret_val = e1000_read_nvm(hw, first_word,
 540                                         last_word - first_word + 1,
 541                                         eeprom_buff);
 542        } else {
 543                for (i = 0; i < last_word - first_word + 1; i++) {
 544                        ret_val = e1000_read_nvm(hw, first_word + i, 1,
 545                                                 &eeprom_buff[i]);
 546                        if (ret_val)
 547                                break;
 548                }
 549        }
 550
 551        pm_runtime_put_sync(netdev->dev.parent);
 552
 553        if (ret_val) {
 554                /* a read error occurred, throw away the result */
 555                memset(eeprom_buff, 0xff, sizeof(u16) *
 556                       (last_word - first_word + 1));
 557        } else {
 558                /* Device's eeprom is always little-endian, word addressable */
 559                for (i = 0; i < last_word - first_word + 1; i++)
 560                        le16_to_cpus(&eeprom_buff[i]);
 561        }
 562
 563        memcpy(bytes, (u8 *)eeprom_buff + (eeprom->offset & 1), eeprom->len);
 564        kfree(eeprom_buff);
 565
 566        return ret_val;
 567}
 568
 569static int e1000_set_eeprom(struct net_device *netdev,
 570                            struct ethtool_eeprom *eeprom, u8 *bytes)
 571{
 572        struct e1000_adapter *adapter = netdev_priv(netdev);
 573        struct e1000_hw *hw = &adapter->hw;
 574        u16 *eeprom_buff;
 575        void *ptr;
 576        int max_len;
 577        int first_word;
 578        int last_word;
 579        int ret_val = 0;
 580        u16 i;
 581
 582        if (eeprom->len == 0)
 583                return -EOPNOTSUPP;
 584
 585        if (eeprom->magic !=
 586            (adapter->pdev->vendor | (adapter->pdev->device << 16)))
 587                return -EFAULT;
 588
 589        if (adapter->flags & FLAG_READ_ONLY_NVM)
 590                return -EINVAL;
 591
 592        max_len = hw->nvm.word_size * 2;
 593
 594        first_word = eeprom->offset >> 1;
 595        last_word = (eeprom->offset + eeprom->len - 1) >> 1;
 596        eeprom_buff = kmalloc(max_len, GFP_KERNEL);
 597        if (!eeprom_buff)
 598                return -ENOMEM;
 599
 600        ptr = (void *)eeprom_buff;
 601
 602        pm_runtime_get_sync(netdev->dev.parent);
 603
 604        if (eeprom->offset & 1) {
 605                /* need read/modify/write of first changed EEPROM word */
 606                /* only the second byte of the word is being modified */
 607                ret_val = e1000_read_nvm(hw, first_word, 1, &eeprom_buff[0]);
 608                ptr++;
 609        }
 610        if (((eeprom->offset + eeprom->len) & 1) && (!ret_val))
 611                /* need read/modify/write of last changed EEPROM word */
 612                /* only the first byte of the word is being modified */
 613                ret_val = e1000_read_nvm(hw, last_word, 1,
 614                                         &eeprom_buff[last_word - first_word]);
 615
 616        if (ret_val)
 617                goto out;
 618
 619        /* Device's eeprom is always little-endian, word addressable */
 620        for (i = 0; i < last_word - first_word + 1; i++)
 621                le16_to_cpus(&eeprom_buff[i]);
 622
 623        memcpy(ptr, bytes, eeprom->len);
 624
 625        for (i = 0; i < last_word - first_word + 1; i++)
 626                cpu_to_le16s(&eeprom_buff[i]);
 627
 628        ret_val = e1000_write_nvm(hw, first_word,
 629                                  last_word - first_word + 1, eeprom_buff);
 630
 631        if (ret_val)
 632                goto out;
 633
 634        /* Update the checksum over the first part of the EEPROM if needed
 635         * and flush shadow RAM for applicable controllers
 636         */
 637        if ((first_word <= NVM_CHECKSUM_REG) ||
 638            (hw->mac.type == e1000_82583) ||
 639            (hw->mac.type == e1000_82574) ||
 640            (hw->mac.type == e1000_82573))
 641                ret_val = e1000e_update_nvm_checksum(hw);
 642
 643out:
 644        pm_runtime_put_sync(netdev->dev.parent);
 645        kfree(eeprom_buff);
 646        return ret_val;
 647}
 648
 649static void e1000_get_drvinfo(struct net_device *netdev,
 650                              struct ethtool_drvinfo *drvinfo)
 651{
 652        struct e1000_adapter *adapter = netdev_priv(netdev);
 653
 654        strlcpy(drvinfo->driver, e1000e_driver_name, sizeof(drvinfo->driver));
 655        strlcpy(drvinfo->version, e1000e_driver_version,
 656                sizeof(drvinfo->version));
 657
 658        /* EEPROM image version # is reported as firmware version # for
 659         * PCI-E controllers
 660         */
 661        snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version),
 662                 "%d.%d-%d",
 663                 (adapter->eeprom_vers & 0xF000) >> 12,
 664                 (adapter->eeprom_vers & 0x0FF0) >> 4,
 665                 (adapter->eeprom_vers & 0x000F));
 666
 667        strlcpy(drvinfo->bus_info, pci_name(adapter->pdev),
 668                sizeof(drvinfo->bus_info));
 669}
 670
 671static void e1000_get_ringparam(struct net_device *netdev,
 672                                struct ethtool_ringparam *ring)
 673{
 674        struct e1000_adapter *adapter = netdev_priv(netdev);
 675
 676        ring->rx_max_pending = E1000_MAX_RXD;
 677        ring->tx_max_pending = E1000_MAX_TXD;
 678        ring->rx_pending = adapter->rx_ring_count;
 679        ring->tx_pending = adapter->tx_ring_count;
 680}
 681
 682static int e1000_set_ringparam(struct net_device *netdev,
 683                               struct ethtool_ringparam *ring)
 684{
 685        struct e1000_adapter *adapter = netdev_priv(netdev);
 686        struct e1000_ring *temp_tx = NULL, *temp_rx = NULL;
 687        int err = 0, size = sizeof(struct e1000_ring);
 688        bool set_tx = false, set_rx = false;
 689        u16 new_rx_count, new_tx_count;
 690
 691        if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending))
 692                return -EINVAL;
 693
 694        new_rx_count = clamp_t(u32, ring->rx_pending, E1000_MIN_RXD,
 695                               E1000_MAX_RXD);
 696        new_rx_count = ALIGN(new_rx_count, REQ_RX_DESCRIPTOR_MULTIPLE);
 697
 698        new_tx_count = clamp_t(u32, ring->tx_pending, E1000_MIN_TXD,
 699                               E1000_MAX_TXD);
 700        new_tx_count = ALIGN(new_tx_count, REQ_TX_DESCRIPTOR_MULTIPLE);
 701
 702        if ((new_tx_count == adapter->tx_ring_count) &&
 703            (new_rx_count == adapter->rx_ring_count))
 704                /* nothing to do */
 705                return 0;
 706
 707        while (test_and_set_bit(__E1000_RESETTING, &adapter->state))
 708                usleep_range(1000, 2000);
 709
 710        if (!netif_running(adapter->netdev)) {
 711                /* Set counts now and allocate resources during open() */
 712                adapter->tx_ring->count = new_tx_count;
 713                adapter->rx_ring->count = new_rx_count;
 714                adapter->tx_ring_count = new_tx_count;
 715                adapter->rx_ring_count = new_rx_count;
 716                goto clear_reset;
 717        }
 718
 719        set_tx = (new_tx_count != adapter->tx_ring_count);
 720        set_rx = (new_rx_count != adapter->rx_ring_count);
 721
 722        /* Allocate temporary storage for ring updates */
 723        if (set_tx) {
 724                temp_tx = vmalloc(size);
 725                if (!temp_tx) {
 726                        err = -ENOMEM;
 727                        goto free_temp;
 728                }
 729        }
 730        if (set_rx) {
 731                temp_rx = vmalloc(size);
 732                if (!temp_rx) {
 733                        err = -ENOMEM;
 734                        goto free_temp;
 735                }
 736        }
 737
 738        pm_runtime_get_sync(netdev->dev.parent);
 739
 740        e1000e_down(adapter, true);
 741
 742        /* We can't just free everything and then setup again, because the
 743         * ISRs in MSI-X mode get passed pointers to the Tx and Rx ring
 744         * structs.  First, attempt to allocate new resources...
 745         */
 746        if (set_tx) {
 747                memcpy(temp_tx, adapter->tx_ring, size);
 748                temp_tx->count = new_tx_count;
 749                err = e1000e_setup_tx_resources(temp_tx);
 750                if (err)
 751                        goto err_setup;
 752        }
 753        if (set_rx) {
 754                memcpy(temp_rx, adapter->rx_ring, size);
 755                temp_rx->count = new_rx_count;
 756                err = e1000e_setup_rx_resources(temp_rx);
 757                if (err)
 758                        goto err_setup_rx;
 759        }
 760
 761        /* ...then free the old resources and copy back any new ring data */
 762        if (set_tx) {
 763                e1000e_free_tx_resources(adapter->tx_ring);
 764                memcpy(adapter->tx_ring, temp_tx, size);
 765                adapter->tx_ring_count = new_tx_count;
 766        }
 767        if (set_rx) {
 768                e1000e_free_rx_resources(adapter->rx_ring);
 769                memcpy(adapter->rx_ring, temp_rx, size);
 770                adapter->rx_ring_count = new_rx_count;
 771        }
 772
 773err_setup_rx:
 774        if (err && set_tx)
 775                e1000e_free_tx_resources(temp_tx);
 776err_setup:
 777        e1000e_up(adapter);
 778        pm_runtime_put_sync(netdev->dev.parent);
 779free_temp:
 780        vfree(temp_tx);
 781        vfree(temp_rx);
 782clear_reset:
 783        clear_bit(__E1000_RESETTING, &adapter->state);
 784        return err;
 785}
 786
 787static bool reg_pattern_test(struct e1000_adapter *adapter, u64 *data,
 788                             int reg, int offset, u32 mask, u32 write)
 789{
 790        u32 pat, val;
 791        static const u32 test[] = {
 792                0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF
 793        };
 794        for (pat = 0; pat < ARRAY_SIZE(test); pat++) {
 795                E1000_WRITE_REG_ARRAY(&adapter->hw, reg, offset,
 796                                      (test[pat] & write));
 797                val = E1000_READ_REG_ARRAY(&adapter->hw, reg, offset);
 798                if (val != (test[pat] & write & mask)) {
 799                        e_err("pattern test failed (reg 0x%05X): got 0x%08X expected 0x%08X\n",
 800                              reg + (offset << 2), val,
 801                              (test[pat] & write & mask));
 802                        *data = reg;
 803                        return true;
 804                }
 805        }
 806        return false;
 807}
 808
 809static bool reg_set_and_check(struct e1000_adapter *adapter, u64 *data,
 810                              int reg, u32 mask, u32 write)
 811{
 812        u32 val;
 813
 814        __ew32(&adapter->hw, reg, write & mask);
 815        val = __er32(&adapter->hw, reg);
 816        if ((write & mask) != (val & mask)) {
 817                e_err("set/check test failed (reg 0x%05X): got 0x%08X expected 0x%08X\n",
 818                      reg, (val & mask), (write & mask));
 819                *data = reg;
 820                return true;
 821        }
 822        return false;
 823}
 824
 825#define REG_PATTERN_TEST_ARRAY(reg, offset, mask, write)                       \
 826        do {                                                                   \
 827                if (reg_pattern_test(adapter, data, reg, offset, mask, write)) \
 828                        return 1;                                              \
 829        } while (0)
 830#define REG_PATTERN_TEST(reg, mask, write)                                     \
 831        REG_PATTERN_TEST_ARRAY(reg, 0, mask, write)
 832
 833#define REG_SET_AND_CHECK(reg, mask, write)                                    \
 834        do {                                                                   \
 835                if (reg_set_and_check(adapter, data, reg, mask, write))        \
 836                        return 1;                                              \
 837        } while (0)
 838
 839static int e1000_reg_test(struct e1000_adapter *adapter, u64 *data)
 840{
 841        struct e1000_hw *hw = &adapter->hw;
 842        struct e1000_mac_info *mac = &adapter->hw.mac;
 843        u32 value;
 844        u32 before;
 845        u32 after;
 846        u32 i;
 847        u32 toggle;
 848        u32 mask;
 849        u32 wlock_mac = 0;
 850
 851        /* The status register is Read Only, so a write should fail.
 852         * Some bits that get toggled are ignored.  There are several bits
 853         * on newer hardware that are r/w.
 854         */
 855        switch (mac->type) {
 856        case e1000_82571:
 857        case e1000_82572:
 858        case e1000_80003es2lan:
 859                toggle = 0x7FFFF3FF;
 860                break;
 861        default:
 862                toggle = 0x7FFFF033;
 863                break;
 864        }
 865
 866        before = er32(STATUS);
 867        value = (er32(STATUS) & toggle);
 868        ew32(STATUS, toggle);
 869        after = er32(STATUS) & toggle;
 870        if (value != after) {
 871                e_err("failed STATUS register test got: 0x%08X expected: 0x%08X\n",
 872                      after, value);
 873                *data = 1;
 874                return 1;
 875        }
 876        /* restore previous status */
 877        ew32(STATUS, before);
 878
 879        if (!(adapter->flags & FLAG_IS_ICH)) {
 880                REG_PATTERN_TEST(E1000_FCAL, 0xFFFFFFFF, 0xFFFFFFFF);
 881                REG_PATTERN_TEST(E1000_FCAH, 0x0000FFFF, 0xFFFFFFFF);
 882                REG_PATTERN_TEST(E1000_FCT, 0x0000FFFF, 0xFFFFFFFF);
 883                REG_PATTERN_TEST(E1000_VET, 0x0000FFFF, 0xFFFFFFFF);
 884        }
 885
 886        REG_PATTERN_TEST(E1000_RDTR, 0x0000FFFF, 0xFFFFFFFF);
 887        REG_PATTERN_TEST(E1000_RDBAH(0), 0xFFFFFFFF, 0xFFFFFFFF);
 888        REG_PATTERN_TEST(E1000_RDLEN(0), 0x000FFF80, 0x000FFFFF);
 889        REG_PATTERN_TEST(E1000_RDH(0), 0x0000FFFF, 0x0000FFFF);
 890        REG_PATTERN_TEST(E1000_RDT(0), 0x0000FFFF, 0x0000FFFF);
 891        REG_PATTERN_TEST(E1000_FCRTH, 0x0000FFF8, 0x0000FFF8);
 892        REG_PATTERN_TEST(E1000_FCTTV, 0x0000FFFF, 0x0000FFFF);
 893        REG_PATTERN_TEST(E1000_TIPG, 0x3FFFFFFF, 0x3FFFFFFF);
 894        REG_PATTERN_TEST(E1000_TDBAH(0), 0xFFFFFFFF, 0xFFFFFFFF);
 895        REG_PATTERN_TEST(E1000_TDLEN(0), 0x000FFF80, 0x000FFFFF);
 896
 897        REG_SET_AND_CHECK(E1000_RCTL, 0xFFFFFFFF, 0x00000000);
 898
 899        before = ((adapter->flags & FLAG_IS_ICH) ? 0x06C3B33E : 0x06DFB3FE);
 900        REG_SET_AND_CHECK(E1000_RCTL, before, 0x003FFFFB);
 901        REG_SET_AND_CHECK(E1000_TCTL, 0xFFFFFFFF, 0x00000000);
 902
 903        REG_SET_AND_CHECK(E1000_RCTL, before, 0xFFFFFFFF);
 904        REG_PATTERN_TEST(E1000_RDBAL(0), 0xFFFFFFF0, 0xFFFFFFFF);
 905        if (!(adapter->flags & FLAG_IS_ICH))
 906                REG_PATTERN_TEST(E1000_TXCW, 0xC000FFFF, 0x0000FFFF);
 907        REG_PATTERN_TEST(E1000_TDBAL(0), 0xFFFFFFF0, 0xFFFFFFFF);
 908        REG_PATTERN_TEST(E1000_TIDV, 0x0000FFFF, 0x0000FFFF);
 909        mask = 0x8003FFFF;
 910        switch (mac->type) {
 911        case e1000_ich10lan:
 912        case e1000_pchlan:
 913        case e1000_pch2lan:
 914        case e1000_pch_lpt:
 915        case e1000_pch_spt:
 916                /* fall through */
 917        case e1000_pch_cnp:
 918                mask |= BIT(18);
 919                break;
 920        default:
 921                break;
 922        }
 923
 924        if (mac->type >= e1000_pch_lpt)
 925                wlock_mac = (er32(FWSM) & E1000_FWSM_WLOCK_MAC_MASK) >>
 926                    E1000_FWSM_WLOCK_MAC_SHIFT;
 927
 928        for (i = 0; i < mac->rar_entry_count; i++) {
 929                if (mac->type >= e1000_pch_lpt) {
 930                        /* Cannot test write-protected SHRAL[n] registers */
 931                        if ((wlock_mac == 1) || (wlock_mac && (i > wlock_mac)))
 932                                continue;
 933
 934                        /* SHRAH[9] different than the others */
 935                        if (i == 10)
 936                                mask |= BIT(30);
 937                        else
 938                                mask &= ~BIT(30);
 939                }
 940                if (mac->type == e1000_pch2lan) {
 941                        /* SHRAH[0,1,2] different than previous */
 942                        if (i == 1)
 943                                mask &= 0xFFF4FFFF;
 944                        /* SHRAH[3] different than SHRAH[0,1,2] */
 945                        if (i == 4)
 946                                mask |= BIT(30);
 947                        /* RAR[1-6] owned by management engine - skipping */
 948                        if (i > 0)
 949                                i += 6;
 950                }
 951
 952                REG_PATTERN_TEST_ARRAY(E1000_RA, ((i << 1) + 1), mask,
 953                                       0xFFFFFFFF);
 954                /* reset index to actual value */
 955                if ((mac->type == e1000_pch2lan) && (i > 6))
 956                        i -= 6;
 957        }
 958
 959        for (i = 0; i < mac->mta_reg_count; i++)
 960                REG_PATTERN_TEST_ARRAY(E1000_MTA, i, 0xFFFFFFFF, 0xFFFFFFFF);
 961
 962        *data = 0;
 963
 964        return 0;
 965}
 966
 967static int e1000_eeprom_test(struct e1000_adapter *adapter, u64 *data)
 968{
 969        u16 temp;
 970        u16 checksum = 0;
 971        u16 i;
 972
 973        *data = 0;
 974        /* Read and add up the contents of the EEPROM */
 975        for (i = 0; i < (NVM_CHECKSUM_REG + 1); i++) {
 976                if ((e1000_read_nvm(&adapter->hw, i, 1, &temp)) < 0) {
 977                        *data = 1;
 978                        return *data;
 979                }
 980                checksum += temp;
 981        }
 982
 983        /* If Checksum is not Correct return error else test passed */
 984        if ((checksum != (u16)NVM_SUM) && !(*data))
 985                *data = 2;
 986
 987        return *data;
 988}
 989
 990static irqreturn_t e1000_test_intr(int __always_unused irq, void *data)
 991{
 992        struct net_device *netdev = (struct net_device *)data;
 993        struct e1000_adapter *adapter = netdev_priv(netdev);
 994        struct e1000_hw *hw = &adapter->hw;
 995
 996        adapter->test_icr |= er32(ICR);
 997
 998        return IRQ_HANDLED;
 999}
1000
1001static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)
1002{
1003        struct net_device *netdev = adapter->netdev;
1004        struct e1000_hw *hw = &adapter->hw;
1005        u32 mask;
1006        u32 shared_int = 1;
1007        u32 irq = adapter->pdev->irq;
1008        int i;
1009        int ret_val = 0;
1010        int int_mode = E1000E_INT_MODE_LEGACY;
1011
1012        *data = 0;
1013
1014        /* NOTE: we don't test MSI/MSI-X interrupts here, yet */
1015        if (adapter->int_mode == E1000E_INT_MODE_MSIX) {
1016                int_mode = adapter->int_mode;
1017                e1000e_reset_interrupt_capability(adapter);
1018                adapter->int_mode = E1000E_INT_MODE_LEGACY;
1019                e1000e_set_interrupt_capability(adapter);
1020        }
1021        /* Hook up test interrupt handler just for this test */
1022        if (!request_irq(irq, e1000_test_intr, IRQF_PROBE_SHARED, netdev->name,
1023                         netdev)) {
1024                shared_int = 0;
1025        } else if (request_irq(irq, e1000_test_intr, IRQF_SHARED, netdev->name,
1026                               netdev)) {
1027                *data = 1;
1028                ret_val = -1;
1029                goto out;
1030        }
1031        e_info("testing %s interrupt\n", (shared_int ? "shared" : "unshared"));
1032
1033        /* Disable all the interrupts */
1034        ew32(IMC, 0xFFFFFFFF);
1035        e1e_flush();
1036        usleep_range(10000, 20000);
1037
1038        /* Test each interrupt */
1039        for (i = 0; i < 10; i++) {
1040                /* Interrupt to test */
1041                mask = BIT(i);
1042
1043                if (adapter->flags & FLAG_IS_ICH) {
1044                        switch (mask) {
1045                        case E1000_ICR_RXSEQ:
1046                                continue;
1047                        case 0x00000100:
1048                                if (adapter->hw.mac.type == e1000_ich8lan ||
1049                                    adapter->hw.mac.type == e1000_ich9lan)
1050                                        continue;
1051                                break;
1052                        default:
1053                                break;
1054                        }
1055                }
1056
1057                if (!shared_int) {
1058                        /* Disable the interrupt to be reported in
1059                         * the cause register and then force the same
1060                         * interrupt and see if one gets posted.  If
1061                         * an interrupt was posted to the bus, the
1062                         * test failed.
1063                         */
1064                        adapter->test_icr = 0;
1065                        ew32(IMC, mask);
1066                        ew32(ICS, mask);
1067                        e1e_flush();
1068                        usleep_range(10000, 20000);
1069
1070                        if (adapter->test_icr & mask) {
1071                                *data = 3;
1072                                break;
1073                        }
1074                }
1075
1076                /* Enable the interrupt to be reported in
1077                 * the cause register and then force the same
1078                 * interrupt and see if one gets posted.  If
1079                 * an interrupt was not posted to the bus, the
1080                 * test failed.
1081                 */
1082                adapter->test_icr = 0;
1083                ew32(IMS, mask);
1084                ew32(ICS, mask);
1085                e1e_flush();
1086                usleep_range(10000, 20000);
1087
1088                if (!(adapter->test_icr & mask)) {
1089                        *data = 4;
1090                        break;
1091                }
1092
1093                if (!shared_int) {
1094                        /* Disable the other interrupts to be reported in
1095                         * the cause register and then force the other
1096                         * interrupts and see if any get posted.  If
1097                         * an interrupt was posted to the bus, the
1098                         * test failed.
1099                         */
1100                        adapter->test_icr = 0;
1101                        ew32(IMC, ~mask & 0x00007FFF);
1102                        ew32(ICS, ~mask & 0x00007FFF);
1103                        e1e_flush();
1104                        usleep_range(10000, 20000);
1105
1106                        if (adapter->test_icr) {
1107                                *data = 5;
1108                                break;
1109                        }
1110                }
1111        }
1112
1113        /* Disable all the interrupts */
1114        ew32(IMC, 0xFFFFFFFF);
1115        e1e_flush();
1116        usleep_range(10000, 20000);
1117
1118        /* Unhook test interrupt handler */
1119        free_irq(irq, netdev);
1120
1121out:
1122        if (int_mode == E1000E_INT_MODE_MSIX) {
1123                e1000e_reset_interrupt_capability(adapter);
1124                adapter->int_mode = int_mode;
1125                e1000e_set_interrupt_capability(adapter);
1126        }
1127
1128        return ret_val;
1129}
1130
1131static void e1000_free_desc_rings(struct e1000_adapter *adapter)
1132{
1133        struct e1000_ring *tx_ring = &adapter->test_tx_ring;
1134        struct e1000_ring *rx_ring = &adapter->test_rx_ring;
1135        struct pci_dev *pdev = adapter->pdev;
1136        struct e1000_buffer *buffer_info;
1137        int i;
1138
1139        if (tx_ring->desc && tx_ring->buffer_info) {
1140                for (i = 0; i < tx_ring->count; i++) {
1141                        buffer_info = &tx_ring->buffer_info[i];
1142
1143                        if (buffer_info->dma)
1144                                dma_unmap_single(&pdev->dev,
1145                                                 buffer_info->dma,
1146                                                 buffer_info->length,
1147                                                 DMA_TO_DEVICE);
1148                        if (buffer_info->skb)
1149                                dev_kfree_skb(buffer_info->skb);
1150                }
1151        }
1152
1153        if (rx_ring->desc && rx_ring->buffer_info) {
1154                for (i = 0; i < rx_ring->count; i++) {
1155                        buffer_info = &rx_ring->buffer_info[i];
1156
1157                        if (buffer_info->dma)
1158                                dma_unmap_single(&pdev->dev,
1159                                                 buffer_info->dma,
1160                                                 2048, DMA_FROM_DEVICE);
1161                        if (buffer_info->skb)
1162                                dev_kfree_skb(buffer_info->skb);
1163                }
1164        }
1165
1166        if (tx_ring->desc) {
1167                dma_free_coherent(&pdev->dev, tx_ring->size, tx_ring->desc,
1168                                  tx_ring->dma);
1169                tx_ring->desc = NULL;
1170        }
1171        if (rx_ring->desc) {
1172                dma_free_coherent(&pdev->dev, rx_ring->size, rx_ring->desc,
1173                                  rx_ring->dma);
1174                rx_ring->desc = NULL;
1175        }
1176
1177        kfree(tx_ring->buffer_info);
1178        tx_ring->buffer_info = NULL;
1179        kfree(rx_ring->buffer_info);
1180        rx_ring->buffer_info = NULL;
1181}
1182
1183static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
1184{
1185        struct e1000_ring *tx_ring = &adapter->test_tx_ring;
1186        struct e1000_ring *rx_ring = &adapter->test_rx_ring;
1187        struct pci_dev *pdev = adapter->pdev;
1188        struct e1000_hw *hw = &adapter->hw;
1189        u32 rctl;
1190        int i;
1191        int ret_val;
1192
1193        /* Setup Tx descriptor ring and Tx buffers */
1194
1195        if (!tx_ring->count)
1196                tx_ring->count = E1000_DEFAULT_TXD;
1197
1198        tx_ring->buffer_info = kcalloc(tx_ring->count,
1199                                       sizeof(struct e1000_buffer), GFP_KERNEL);
1200        if (!tx_ring->buffer_info) {
1201                ret_val = 1;
1202                goto err_nomem;
1203        }
1204
1205        tx_ring->size = tx_ring->count * sizeof(struct e1000_tx_desc);
1206        tx_ring->size = ALIGN(tx_ring->size, 4096);
1207        tx_ring->desc = dma_alloc_coherent(&pdev->dev, tx_ring->size,
1208                                           &tx_ring->dma, GFP_KERNEL);
1209        if (!tx_ring->desc) {
1210                ret_val = 2;
1211                goto err_nomem;
1212        }
1213        tx_ring->next_to_use = 0;
1214        tx_ring->next_to_clean = 0;
1215
1216        ew32(TDBAL(0), ((u64)tx_ring->dma & 0x00000000FFFFFFFF));
1217        ew32(TDBAH(0), ((u64)tx_ring->dma >> 32));
1218        ew32(TDLEN(0), tx_ring->count * sizeof(struct e1000_tx_desc));
1219        ew32(TDH(0), 0);
1220        ew32(TDT(0), 0);
1221        ew32(TCTL, E1000_TCTL_PSP | E1000_TCTL_EN | E1000_TCTL_MULR |
1222             E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT |
1223             E1000_COLLISION_DISTANCE << E1000_COLD_SHIFT);
1224
1225        for (i = 0; i < tx_ring->count; i++) {
1226                struct e1000_tx_desc *tx_desc = E1000_TX_DESC(*tx_ring, i);
1227                struct sk_buff *skb;
1228                unsigned int skb_size = 1024;
1229
1230                skb = alloc_skb(skb_size, GFP_KERNEL);
1231                if (!skb) {
1232                        ret_val = 3;
1233                        goto err_nomem;
1234                }
1235                skb_put(skb, skb_size);
1236                tx_ring->buffer_info[i].skb = skb;
1237                tx_ring->buffer_info[i].length = skb->len;
1238                tx_ring->buffer_info[i].dma =
1239                    dma_map_single(&pdev->dev, skb->data, skb->len,
1240                                   DMA_TO_DEVICE);
1241                if (dma_mapping_error(&pdev->dev,
1242                                      tx_ring->buffer_info[i].dma)) {
1243                        ret_val = 4;
1244                        goto err_nomem;
1245                }
1246                tx_desc->buffer_addr = cpu_to_le64(tx_ring->buffer_info[i].dma);
1247                tx_desc->lower.data = cpu_to_le32(skb->len);
1248                tx_desc->lower.data |= cpu_to_le32(E1000_TXD_CMD_EOP |
1249                                                   E1000_TXD_CMD_IFCS |
1250                                                   E1000_TXD_CMD_RS);
1251                tx_desc->upper.data = 0;
1252        }
1253
1254        /* Setup Rx descriptor ring and Rx buffers */
1255
1256        if (!rx_ring->count)
1257                rx_ring->count = E1000_DEFAULT_RXD;
1258
1259        rx_ring->buffer_info = kcalloc(rx_ring->count,
1260                                       sizeof(struct e1000_buffer), GFP_KERNEL);
1261        if (!rx_ring->buffer_info) {
1262                ret_val = 5;
1263                goto err_nomem;
1264        }
1265
1266        rx_ring->size = rx_ring->count * sizeof(union e1000_rx_desc_extended);
1267        rx_ring->desc = dma_alloc_coherent(&pdev->dev, rx_ring->size,
1268                                           &rx_ring->dma, GFP_KERNEL);
1269        if (!rx_ring->desc) {
1270                ret_val = 6;
1271                goto err_nomem;
1272        }
1273        rx_ring->next_to_use = 0;
1274        rx_ring->next_to_clean = 0;
1275
1276        rctl = er32(RCTL);
1277        if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX))
1278                ew32(RCTL, rctl & ~E1000_RCTL_EN);
1279        ew32(RDBAL(0), ((u64)rx_ring->dma & 0xFFFFFFFF));
1280        ew32(RDBAH(0), ((u64)rx_ring->dma >> 32));
1281        ew32(RDLEN(0), rx_ring->size);
1282        ew32(RDH(0), 0);
1283        ew32(RDT(0), 0);
1284        rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_SZ_2048 |
1285            E1000_RCTL_UPE | E1000_RCTL_MPE | E1000_RCTL_LPE |
1286            E1000_RCTL_SBP | E1000_RCTL_SECRC |
1287            E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF |
1288            (adapter->hw.mac.mc_filter_type << E1000_RCTL_MO_SHIFT);
1289        ew32(RCTL, rctl);
1290
1291        for (i = 0; i < rx_ring->count; i++) {
1292                union e1000_rx_desc_extended *rx_desc;
1293                struct sk_buff *skb;
1294
1295                skb = alloc_skb(2048 + NET_IP_ALIGN, GFP_KERNEL);
1296                if (!skb) {
1297                        ret_val = 7;
1298                        goto err_nomem;
1299                }
1300                skb_reserve(skb, NET_IP_ALIGN);
1301                rx_ring->buffer_info[i].skb = skb;
1302                rx_ring->buffer_info[i].dma =
1303                    dma_map_single(&pdev->dev, skb->data, 2048,
1304                                   DMA_FROM_DEVICE);
1305                if (dma_mapping_error(&pdev->dev,
1306                                      rx_ring->buffer_info[i].dma)) {
1307                        ret_val = 8;
1308                        goto err_nomem;
1309                }
1310                rx_desc = E1000_RX_DESC_EXT(*rx_ring, i);
1311                rx_desc->read.buffer_addr =
1312                    cpu_to_le64(rx_ring->buffer_info[i].dma);
1313                memset(skb->data, 0x00, skb->len);
1314        }
1315
1316        return 0;
1317
1318err_nomem:
1319        e1000_free_desc_rings(adapter);
1320        return ret_val;
1321}
1322
1323static void e1000_phy_disable_receiver(struct e1000_adapter *adapter)
1324{
1325        /* Write out to PHY registers 29 and 30 to disable the Receiver. */
1326        e1e_wphy(&adapter->hw, 29, 0x001F);
1327        e1e_wphy(&adapter->hw, 30, 0x8FFC);
1328        e1e_wphy(&adapter->hw, 29, 0x001A);
1329        e1e_wphy(&adapter->hw, 30, 0x8FF0);
1330}
1331
1332static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
1333{
1334        struct e1000_hw *hw = &adapter->hw;
1335        u32 ctrl_reg = 0;
1336        u16 phy_reg = 0;
1337        s32 ret_val = 0;
1338
1339        hw->mac.autoneg = 0;
1340
1341        if (hw->phy.type == e1000_phy_ife) {
1342                /* force 100, set loopback */
1343                e1e_wphy(hw, MII_BMCR, 0x6100);
1344
1345                /* Now set up the MAC to the same speed/duplex as the PHY. */
1346                ctrl_reg = er32(CTRL);
1347                ctrl_reg &= ~E1000_CTRL_SPD_SEL; /* Clear the speed sel bits */
1348                ctrl_reg |= (E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
1349                             E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
1350                             E1000_CTRL_SPD_100 |/* Force Speed to 100 */
1351                             E1000_CTRL_FD);     /* Force Duplex to FULL */
1352
1353                ew32(CTRL, ctrl_reg);
1354                e1e_flush();
1355                usleep_range(500, 1000);
1356
1357                return 0;
1358        }
1359
1360        /* Specific PHY configuration for loopback */
1361        switch (hw->phy.type) {
1362        case e1000_phy_m88:
1363                /* Auto-MDI/MDIX Off */
1364                e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, 0x0808);
1365                /* reset to update Auto-MDI/MDIX */
1366                e1e_wphy(hw, MII_BMCR, 0x9140);
1367                /* autoneg off */
1368                e1e_wphy(hw, MII_BMCR, 0x8140);
1369                break;
1370        case e1000_phy_gg82563:
1371                e1e_wphy(hw, GG82563_PHY_KMRN_MODE_CTRL, 0x1CC);
1372                break;
1373        case e1000_phy_bm:
1374                /* Set Default MAC Interface speed to 1GB */
1375                e1e_rphy(hw, PHY_REG(2, 21), &phy_reg);
1376                phy_reg &= ~0x0007;
1377                phy_reg |= 0x006;
1378                e1e_wphy(hw, PHY_REG(2, 21), phy_reg);
1379                /* Assert SW reset for above settings to take effect */
1380                hw->phy.ops.commit(hw);
1381                usleep_range(1000, 2000);
1382                /* Force Full Duplex */
1383                e1e_rphy(hw, PHY_REG(769, 16), &phy_reg);
1384                e1e_wphy(hw, PHY_REG(769, 16), phy_reg | 0x000C);
1385                /* Set Link Up (in force link) */
1386                e1e_rphy(hw, PHY_REG(776, 16), &phy_reg);
1387                e1e_wphy(hw, PHY_REG(776, 16), phy_reg | 0x0040);
1388                /* Force Link */
1389                e1e_rphy(hw, PHY_REG(769, 16), &phy_reg);
1390                e1e_wphy(hw, PHY_REG(769, 16), phy_reg | 0x0040);
1391                /* Set Early Link Enable */
1392                e1e_rphy(hw, PHY_REG(769, 20), &phy_reg);
1393                e1e_wphy(hw, PHY_REG(769, 20), phy_reg | 0x0400);
1394                break;
1395        case e1000_phy_82577:
1396        case e1000_phy_82578:
1397                /* Workaround: K1 must be disabled for stable 1Gbps operation */
1398                ret_val = hw->phy.ops.acquire(hw);
1399                if (ret_val) {
1400                        e_err("Cannot setup 1Gbps loopback.\n");
1401                        return ret_val;
1402                }
1403                e1000_configure_k1_ich8lan(hw, false);
1404                hw->phy.ops.release(hw);
1405                break;
1406        case e1000_phy_82579:
1407                /* Disable PHY energy detect power down */
1408                e1e_rphy(hw, PHY_REG(0, 21), &phy_reg);
1409                e1e_wphy(hw, PHY_REG(0, 21), phy_reg & ~BIT(3));
1410                /* Disable full chip energy detect */
1411                e1e_rphy(hw, PHY_REG(776, 18), &phy_reg);
1412                e1e_wphy(hw, PHY_REG(776, 18), phy_reg | 1);
1413                /* Enable loopback on the PHY */
1414                e1e_wphy(hw, I82577_PHY_LBK_CTRL, 0x8001);
1415                break;
1416        default:
1417                break;
1418        }
1419
1420        /* force 1000, set loopback */
1421        e1e_wphy(hw, MII_BMCR, 0x4140);
1422        msleep(250);
1423
1424        /* Now set up the MAC to the same speed/duplex as the PHY. */
1425        ctrl_reg = er32(CTRL);
1426        ctrl_reg &= ~E1000_CTRL_SPD_SEL; /* Clear the speed sel bits */
1427        ctrl_reg |= (E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
1428                     E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
1429                     E1000_CTRL_SPD_1000 |/* Force Speed to 1000 */
1430                     E1000_CTRL_FD);     /* Force Duplex to FULL */
1431
1432        if (adapter->flags & FLAG_IS_ICH)
1433                ctrl_reg |= E1000_CTRL_SLU;     /* Set Link Up */
1434
1435        if (hw->phy.media_type == e1000_media_type_copper &&
1436            hw->phy.type == e1000_phy_m88) {
1437                ctrl_reg |= E1000_CTRL_ILOS;    /* Invert Loss of Signal */
1438        } else {
1439                /* Set the ILOS bit on the fiber Nic if half duplex link is
1440                 * detected.
1441                 */
1442                if ((er32(STATUS) & E1000_STATUS_FD) == 0)
1443                        ctrl_reg |= (E1000_CTRL_ILOS | E1000_CTRL_SLU);
1444        }
1445
1446        ew32(CTRL, ctrl_reg);
1447
1448        /* Disable the receiver on the PHY so when a cable is plugged in, the
1449         * PHY does not begin to autoneg when a cable is reconnected to the NIC.
1450         */
1451        if (hw->phy.type == e1000_phy_m88)
1452                e1000_phy_disable_receiver(adapter);
1453
1454        usleep_range(500, 1000);
1455
1456        return 0;
1457}
1458
1459static int e1000_set_82571_fiber_loopback(struct e1000_adapter *adapter)
1460{
1461        struct e1000_hw *hw = &adapter->hw;
1462        u32 ctrl = er32(CTRL);
1463        int link;
1464
1465        /* special requirements for 82571/82572 fiber adapters */
1466
1467        /* jump through hoops to make sure link is up because serdes
1468         * link is hardwired up
1469         */
1470        ctrl |= E1000_CTRL_SLU;
1471        ew32(CTRL, ctrl);
1472
1473        /* disable autoneg */
1474        ctrl = er32(TXCW);
1475        ctrl &= ~BIT(31);
1476        ew32(TXCW, ctrl);
1477
1478        link = (er32(STATUS) & E1000_STATUS_LU);
1479
1480        if (!link) {
1481                /* set invert loss of signal */
1482                ctrl = er32(CTRL);
1483                ctrl |= E1000_CTRL_ILOS;
1484                ew32(CTRL, ctrl);
1485        }
1486
1487        /* special write to serdes control register to enable SerDes analog
1488         * loopback
1489         */
1490        ew32(SCTL, E1000_SCTL_ENABLE_SERDES_LOOPBACK);
1491        e1e_flush();
1492        usleep_range(10000, 20000);
1493
1494        return 0;
1495}
1496
1497/* only call this for fiber/serdes connections to es2lan */
1498static int e1000_set_es2lan_mac_loopback(struct e1000_adapter *adapter)
1499{
1500        struct e1000_hw *hw = &adapter->hw;
1501        u32 ctrlext = er32(CTRL_EXT);
1502        u32 ctrl = er32(CTRL);
1503
1504        /* save CTRL_EXT to restore later, reuse an empty variable (unused
1505         * on mac_type 80003es2lan)
1506         */
1507        adapter->tx_fifo_head = ctrlext;
1508
1509        /* clear the serdes mode bits, putting the device into mac loopback */
1510        ctrlext &= ~E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES;
1511        ew32(CTRL_EXT, ctrlext);
1512
1513        /* force speed to 1000/FD, link up */
1514        ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
1515        ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX |
1516                 E1000_CTRL_SPD_1000 | E1000_CTRL_FD);
1517        ew32(CTRL, ctrl);
1518
1519        /* set mac loopback */
1520        ctrl = er32(RCTL);
1521        ctrl |= E1000_RCTL_LBM_MAC;
1522        ew32(RCTL, ctrl);
1523
1524        /* set testing mode parameters (no need to reset later) */
1525#define KMRNCTRLSTA_OPMODE (0x1F << 16)
1526#define KMRNCTRLSTA_OPMODE_1GB_FD_GMII 0x0582
1527        ew32(KMRNCTRLSTA,
1528             (KMRNCTRLSTA_OPMODE | KMRNCTRLSTA_OPMODE_1GB_FD_GMII));
1529
1530        return 0;
1531}
1532
1533static int e1000_setup_loopback_test(struct e1000_adapter *adapter)
1534{
1535        struct e1000_hw *hw = &adapter->hw;
1536        u32 rctl, fext_nvm11, tarc0;
1537
1538        if (hw->mac.type >= e1000_pch_spt) {
1539                fext_nvm11 = er32(FEXTNVM11);
1540                fext_nvm11 |= E1000_FEXTNVM11_DISABLE_MULR_FIX;
1541                ew32(FEXTNVM11, fext_nvm11);
1542                tarc0 = er32(TARC(0));
1543                /* clear bits 28 & 29 (control of MULR concurrent requests) */
1544                tarc0 &= 0xcfffffff;
1545                /* set bit 29 (value of MULR requests is now 2) */
1546                tarc0 |= 0x20000000;
1547                ew32(TARC(0), tarc0);
1548        }
1549        if (hw->phy.media_type == e1000_media_type_fiber ||
1550            hw->phy.media_type == e1000_media_type_internal_serdes) {
1551                switch (hw->mac.type) {
1552                case e1000_80003es2lan:
1553                        return e1000_set_es2lan_mac_loopback(adapter);
1554                case e1000_82571:
1555                case e1000_82572:
1556                        return e1000_set_82571_fiber_loopback(adapter);
1557                default:
1558                        rctl = er32(RCTL);
1559                        rctl |= E1000_RCTL_LBM_TCVR;
1560                        ew32(RCTL, rctl);
1561                        return 0;
1562                }
1563        } else if (hw->phy.media_type == e1000_media_type_copper) {
1564                return e1000_integrated_phy_loopback(adapter);
1565        }
1566
1567        return 7;
1568}
1569
1570static void e1000_loopback_cleanup(struct e1000_adapter *adapter)
1571{
1572        struct e1000_hw *hw = &adapter->hw;
1573        u32 rctl, fext_nvm11, tarc0;
1574        u16 phy_reg;
1575
1576        rctl = er32(RCTL);
1577        rctl &= ~(E1000_RCTL_LBM_TCVR | E1000_RCTL_LBM_MAC);
1578        ew32(RCTL, rctl);
1579
1580        switch (hw->mac.type) {
1581        case e1000_pch_spt:
1582        case e1000_pch_cnp:
1583                fext_nvm11 = er32(FEXTNVM11);
1584                fext_nvm11 &= ~E1000_FEXTNVM11_DISABLE_MULR_FIX;
1585                ew32(FEXTNVM11, fext_nvm11);
1586                tarc0 = er32(TARC(0));
1587                /* clear bits 28 & 29 (control of MULR concurrent requests) */
1588                /* set bit 29 (value of MULR requests is now 0) */
1589                tarc0 &= 0xcfffffff;
1590                ew32(TARC(0), tarc0);
1591                /* fall through */
1592        case e1000_80003es2lan:
1593                if (hw->phy.media_type == e1000_media_type_fiber ||
1594                    hw->phy.media_type == e1000_media_type_internal_serdes) {
1595                        /* restore CTRL_EXT, stealing space from tx_fifo_head */
1596                        ew32(CTRL_EXT, adapter->tx_fifo_head);
1597                        adapter->tx_fifo_head = 0;
1598                }
1599                /* fall through */
1600        case e1000_82571:
1601        case e1000_82572:
1602                if (hw->phy.media_type == e1000_media_type_fiber ||
1603                    hw->phy.media_type == e1000_media_type_internal_serdes) {
1604                        ew32(SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
1605                        e1e_flush();
1606                        usleep_range(10000, 20000);
1607                        break;
1608                }
1609                /* Fall Through */
1610        default:
1611                hw->mac.autoneg = 1;
1612                if (hw->phy.type == e1000_phy_gg82563)
1613                        e1e_wphy(hw, GG82563_PHY_KMRN_MODE_CTRL, 0x180);
1614                e1e_rphy(hw, MII_BMCR, &phy_reg);
1615                if (phy_reg & BMCR_LOOPBACK) {
1616                        phy_reg &= ~BMCR_LOOPBACK;
1617                        e1e_wphy(hw, MII_BMCR, phy_reg);
1618                        if (hw->phy.ops.commit)
1619                                hw->phy.ops.commit(hw);
1620                }
1621                break;
1622        }
1623}
1624
1625static void e1000_create_lbtest_frame(struct sk_buff *skb,
1626                                      unsigned int frame_size)
1627{
1628        memset(skb->data, 0xFF, frame_size);
1629        frame_size &= ~1;
1630        memset(&skb->data[frame_size / 2], 0xAA, frame_size / 2 - 1);
1631        memset(&skb->data[frame_size / 2 + 10], 0xBE, 1);
1632        memset(&skb->data[frame_size / 2 + 12], 0xAF, 1);
1633}
1634
1635static int e1000_check_lbtest_frame(struct sk_buff *skb,
1636                                    unsigned int frame_size)
1637{
1638        frame_size &= ~1;
1639        if (*(skb->data + 3) == 0xFF)
1640                if ((*(skb->data + frame_size / 2 + 10) == 0xBE) &&
1641                    (*(skb->data + frame_size / 2 + 12) == 0xAF))
1642                        return 0;
1643        return 13;
1644}
1645
1646static int e1000_run_loopback_test(struct e1000_adapter *adapter)
1647{
1648        struct e1000_ring *tx_ring = &adapter->test_tx_ring;
1649        struct e1000_ring *rx_ring = &adapter->test_rx_ring;
1650        struct pci_dev *pdev = adapter->pdev;
1651        struct e1000_hw *hw = &adapter->hw;
1652        struct e1000_buffer *buffer_info;
1653        int i, j, k, l;
1654        int lc;
1655        int good_cnt;
1656        int ret_val = 0;
1657        unsigned long time;
1658
1659        ew32(RDT(0), rx_ring->count - 1);
1660
1661        /* Calculate the loop count based on the largest descriptor ring
1662         * The idea is to wrap the largest ring a number of times using 64
1663         * send/receive pairs during each loop
1664         */
1665
1666        if (rx_ring->count <= tx_ring->count)
1667                lc = ((tx_ring->count / 64) * 2) + 1;
1668        else
1669                lc = ((rx_ring->count / 64) * 2) + 1;
1670
1671        k = 0;
1672        l = 0;
1673        /* loop count loop */
1674        for (j = 0; j <= lc; j++) {
1675                /* send the packets */
1676                for (i = 0; i < 64; i++) {
1677                        buffer_info = &tx_ring->buffer_info[k];
1678
1679                        e1000_create_lbtest_frame(buffer_info->skb, 1024);
1680                        dma_sync_single_for_device(&pdev->dev,
1681                                                   buffer_info->dma,
1682                                                   buffer_info->length,
1683                                                   DMA_TO_DEVICE);
1684                        k++;
1685                        if (k == tx_ring->count)
1686                                k = 0;
1687                }
1688                ew32(TDT(0), k);
1689                e1e_flush();
1690                msleep(200);
1691                time = jiffies; /* set the start time for the receive */
1692                good_cnt = 0;
1693                /* receive the sent packets */
1694                do {
1695                        buffer_info = &rx_ring->buffer_info[l];
1696
1697                        dma_sync_single_for_cpu(&pdev->dev,
1698                                                buffer_info->dma, 2048,
1699                                                DMA_FROM_DEVICE);
1700
1701                        ret_val = e1000_check_lbtest_frame(buffer_info->skb,
1702                                                           1024);
1703                        if (!ret_val)
1704                                good_cnt++;
1705                        l++;
1706                        if (l == rx_ring->count)
1707                                l = 0;
1708                        /* time + 20 msecs (200 msecs on 2.4) is more than
1709                         * enough time to complete the receives, if it's
1710                         * exceeded, break and error off
1711                         */
1712                } while ((good_cnt < 64) && !time_after(jiffies, time + 20));
1713                if (good_cnt != 64) {
1714                        ret_val = 13;   /* ret_val is the same as mis-compare */
1715                        break;
1716                }
1717                if (time_after(jiffies, time + 20)) {
1718                        ret_val = 14;   /* error code for time out error */
1719                        break;
1720                }
1721        }
1722        return ret_val;
1723}
1724
1725static int e1000_loopback_test(struct e1000_adapter *adapter, u64 *data)
1726{
1727        struct e1000_hw *hw = &adapter->hw;
1728
1729        /* PHY loopback cannot be performed if SoL/IDER sessions are active */
1730        if (hw->phy.ops.check_reset_block &&
1731            hw->phy.ops.check_reset_block(hw)) {
1732                e_err("Cannot do PHY loopback test when SoL/IDER is active.\n");
1733                *data = 0;
1734                goto out;
1735        }
1736
1737        *data = e1000_setup_desc_rings(adapter);
1738        if (*data)
1739                goto out;
1740
1741        *data = e1000_setup_loopback_test(adapter);
1742        if (*data)
1743                goto err_loopback;
1744
1745        *data = e1000_run_loopback_test(adapter);
1746        e1000_loopback_cleanup(adapter);
1747
1748err_loopback:
1749        e1000_free_desc_rings(adapter);
1750out:
1751        return *data;
1752}
1753
1754static int e1000_link_test(struct e1000_adapter *adapter, u64 *data)
1755{
1756        struct e1000_hw *hw = &adapter->hw;
1757
1758        *data = 0;
1759        if (hw->phy.media_type == e1000_media_type_internal_serdes) {
1760                int i = 0;
1761
1762                hw->mac.serdes_has_link = false;
1763
1764                /* On some blade server designs, link establishment
1765                 * could take as long as 2-3 minutes
1766                 */
1767                do {
1768                        hw->mac.ops.check_for_link(hw);
1769                        if (hw->mac.serdes_has_link)
1770                                return *data;
1771                        msleep(20);
1772                } while (i++ < 3750);
1773
1774                *data = 1;
1775        } else {
1776                hw->mac.ops.check_for_link(hw);
1777                if (hw->mac.autoneg)
1778                        /* On some Phy/switch combinations, link establishment
1779                         * can take a few seconds more than expected.
1780                         */
1781                        msleep_interruptible(5000);
1782
1783                if (!(er32(STATUS) & E1000_STATUS_LU))
1784                        *data = 1;
1785        }
1786        return *data;
1787}
1788
1789static int e1000e_get_sset_count(struct net_device __always_unused *netdev,
1790                                 int sset)
1791{
1792        switch (sset) {
1793        case ETH_SS_TEST:
1794                return E1000_TEST_LEN;
1795        case ETH_SS_STATS:
1796                return E1000_STATS_LEN;
1797        default:
1798                return -EOPNOTSUPP;
1799        }
1800}
1801
1802static void e1000_diag_test(struct net_device *netdev,
1803                            struct ethtool_test *eth_test, u64 *data)
1804{
1805        struct e1000_adapter *adapter = netdev_priv(netdev);
1806        u16 autoneg_advertised;
1807        u8 forced_speed_duplex;
1808        u8 autoneg;
1809        bool if_running = netif_running(netdev);
1810
1811        pm_runtime_get_sync(netdev->dev.parent);
1812
1813        set_bit(__E1000_TESTING, &adapter->state);
1814
1815        if (!if_running) {
1816                /* Get control of and reset hardware */
1817                if (adapter->flags & FLAG_HAS_AMT)
1818                        e1000e_get_hw_control(adapter);
1819
1820                e1000e_power_up_phy(adapter);
1821
1822                adapter->hw.phy.autoneg_wait_to_complete = 1;
1823                e1000e_reset(adapter);
1824                adapter->hw.phy.autoneg_wait_to_complete = 0;
1825        }
1826
1827        if (eth_test->flags == ETH_TEST_FL_OFFLINE) {
1828                /* Offline tests */
1829
1830                /* save speed, duplex, autoneg settings */
1831                autoneg_advertised = adapter->hw.phy.autoneg_advertised;
1832                forced_speed_duplex = adapter->hw.mac.forced_speed_duplex;
1833                autoneg = adapter->hw.mac.autoneg;
1834
1835                e_info("offline testing starting\n");
1836
1837                if (if_running)
1838                        /* indicate we're in test mode */
1839                        e1000e_close(netdev);
1840
1841                if (e1000_reg_test(adapter, &data[0]))
1842                        eth_test->flags |= ETH_TEST_FL_FAILED;
1843
1844                e1000e_reset(adapter);
1845                if (e1000_eeprom_test(adapter, &data[1]))
1846                        eth_test->flags |= ETH_TEST_FL_FAILED;
1847
1848                e1000e_reset(adapter);
1849                if (e1000_intr_test(adapter, &data[2]))
1850                        eth_test->flags |= ETH_TEST_FL_FAILED;
1851
1852                e1000e_reset(adapter);
1853                if (e1000_loopback_test(adapter, &data[3]))
1854                        eth_test->flags |= ETH_TEST_FL_FAILED;
1855
1856                /* force this routine to wait until autoneg complete/timeout */
1857                adapter->hw.phy.autoneg_wait_to_complete = 1;
1858                e1000e_reset(adapter);
1859                adapter->hw.phy.autoneg_wait_to_complete = 0;
1860
1861                if (e1000_link_test(adapter, &data[4]))
1862                        eth_test->flags |= ETH_TEST_FL_FAILED;
1863
1864                /* restore speed, duplex, autoneg settings */
1865                adapter->hw.phy.autoneg_advertised = autoneg_advertised;
1866                adapter->hw.mac.forced_speed_duplex = forced_speed_duplex;
1867                adapter->hw.mac.autoneg = autoneg;
1868                e1000e_reset(adapter);
1869
1870                clear_bit(__E1000_TESTING, &adapter->state);
1871                if (if_running)
1872                        e1000e_open(netdev);
1873        } else {
1874                /* Online tests */
1875
1876                e_info("online testing starting\n");
1877
1878                /* register, eeprom, intr and loopback tests not run online */
1879                data[0] = 0;
1880                data[1] = 0;
1881                data[2] = 0;
1882                data[3] = 0;
1883
1884                if (e1000_link_test(adapter, &data[4]))
1885                        eth_test->flags |= ETH_TEST_FL_FAILED;
1886
1887                clear_bit(__E1000_TESTING, &adapter->state);
1888        }
1889
1890        if (!if_running) {
1891                e1000e_reset(adapter);
1892
1893                if (adapter->flags & FLAG_HAS_AMT)
1894                        e1000e_release_hw_control(adapter);
1895        }
1896
1897        msleep_interruptible(4 * 1000);
1898
1899        pm_runtime_put_sync(netdev->dev.parent);
1900}
1901
1902static void e1000_get_wol(struct net_device *netdev,
1903                          struct ethtool_wolinfo *wol)
1904{
1905        struct e1000_adapter *adapter = netdev_priv(netdev);
1906
1907        wol->supported = 0;
1908        wol->wolopts = 0;
1909
1910        if (!(adapter->flags & FLAG_HAS_WOL) ||
1911            !device_can_wakeup(&adapter->pdev->dev))
1912                return;
1913
1914        wol->supported = WAKE_UCAST | WAKE_MCAST |
1915            WAKE_BCAST | WAKE_MAGIC | WAKE_PHY;
1916
1917        /* apply any specific unsupported masks here */
1918        if (adapter->flags & FLAG_NO_WAKE_UCAST) {
1919                wol->supported &= ~WAKE_UCAST;
1920
1921                if (adapter->wol & E1000_WUFC_EX)
1922                        e_err("Interface does not support directed (unicast) frame wake-up packets\n");
1923        }
1924
1925        if (adapter->wol & E1000_WUFC_EX)
1926                wol->wolopts |= WAKE_UCAST;
1927        if (adapter->wol & E1000_WUFC_MC)
1928                wol->wolopts |= WAKE_MCAST;
1929        if (adapter->wol & E1000_WUFC_BC)
1930                wol->wolopts |= WAKE_BCAST;
1931        if (adapter->wol & E1000_WUFC_MAG)
1932                wol->wolopts |= WAKE_MAGIC;
1933        if (adapter->wol & E1000_WUFC_LNKC)
1934                wol->wolopts |= WAKE_PHY;
1935}
1936
1937static int e1000_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
1938{
1939        struct e1000_adapter *adapter = netdev_priv(netdev);
1940
1941        if (!(adapter->flags & FLAG_HAS_WOL) ||
1942            !device_can_wakeup(&adapter->pdev->dev) ||
1943            (wol->wolopts & ~(WAKE_UCAST | WAKE_MCAST | WAKE_BCAST |
1944                              WAKE_MAGIC | WAKE_PHY)))
1945                return -EOPNOTSUPP;
1946
1947        /* these settings will always override what we currently have */
1948        adapter->wol = 0;
1949
1950        if (wol->wolopts & WAKE_UCAST)
1951                adapter->wol |= E1000_WUFC_EX;
1952        if (wol->wolopts & WAKE_MCAST)
1953                adapter->wol |= E1000_WUFC_MC;
1954        if (wol->wolopts & WAKE_BCAST)
1955                adapter->wol |= E1000_WUFC_BC;
1956        if (wol->wolopts & WAKE_MAGIC)
1957                adapter->wol |= E1000_WUFC_MAG;
1958        if (wol->wolopts & WAKE_PHY)
1959                adapter->wol |= E1000_WUFC_LNKC;
1960
1961        device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol);
1962
1963        return 0;
1964}
1965
1966static int e1000_set_phys_id(struct net_device *netdev,
1967                             enum ethtool_phys_id_state state)
1968{
1969        struct e1000_adapter *adapter = netdev_priv(netdev);
1970        struct e1000_hw *hw = &adapter->hw;
1971
1972        switch (state) {
1973        case ETHTOOL_ID_ACTIVE:
1974                pm_runtime_get_sync(netdev->dev.parent);
1975
1976                if (!hw->mac.ops.blink_led)
1977                        return 2;       /* cycle on/off twice per second */
1978
1979                hw->mac.ops.blink_led(hw);
1980                break;
1981
1982        case ETHTOOL_ID_INACTIVE:
1983                if (hw->phy.type == e1000_phy_ife)
1984                        e1e_wphy(hw, IFE_PHY_SPECIAL_CONTROL_LED, 0);
1985                hw->mac.ops.led_off(hw);
1986                hw->mac.ops.cleanup_led(hw);
1987                pm_runtime_put_sync(netdev->dev.parent);
1988                break;
1989
1990        case ETHTOOL_ID_ON:
1991                hw->mac.ops.led_on(hw);
1992                break;
1993
1994        case ETHTOOL_ID_OFF:
1995                hw->mac.ops.led_off(hw);
1996                break;
1997        }
1998
1999        return 0;
2000}
2001
2002static int e1000_get_coalesce(struct net_device *netdev,
2003                              struct ethtool_coalesce *ec)
2004{
2005        struct e1000_adapter *adapter = netdev_priv(netdev);
2006
2007        if (adapter->itr_setting <= 4)
2008                ec->rx_coalesce_usecs = adapter->itr_setting;
2009        else
2010                ec->rx_coalesce_usecs = 1000000 / adapter->itr_setting;
2011
2012        return 0;
2013}
2014
2015static int e1000_set_coalesce(struct net_device *netdev,
2016                              struct ethtool_coalesce *ec)
2017{
2018        struct e1000_adapter *adapter = netdev_priv(netdev);
2019
2020        if ((ec->rx_coalesce_usecs > E1000_MAX_ITR_USECS) ||
2021            ((ec->rx_coalesce_usecs > 4) &&
2022             (ec->rx_coalesce_usecs < E1000_MIN_ITR_USECS)) ||
2023            (ec->rx_coalesce_usecs == 2))
2024                return -EINVAL;
2025
2026        if (ec->rx_coalesce_usecs == 4) {
2027                adapter->itr_setting = 4;
2028                adapter->itr = adapter->itr_setting;
2029        } else if (ec->rx_coalesce_usecs <= 3) {
2030                adapter->itr = 20000;
2031                adapter->itr_setting = ec->rx_coalesce_usecs;
2032        } else {
2033                adapter->itr = (1000000 / ec->rx_coalesce_usecs);
2034                adapter->itr_setting = adapter->itr & ~3;
2035        }
2036
2037        pm_runtime_get_sync(netdev->dev.parent);
2038
2039        if (adapter->itr_setting != 0)
2040                e1000e_write_itr(adapter, adapter->itr);
2041        else
2042                e1000e_write_itr(adapter, 0);
2043
2044        pm_runtime_put_sync(netdev->dev.parent);
2045
2046        return 0;
2047}
2048
2049static int e1000_nway_reset(struct net_device *netdev)
2050{
2051        struct e1000_adapter *adapter = netdev_priv(netdev);
2052
2053        if (!netif_running(netdev))
2054                return -EAGAIN;
2055
2056        if (!adapter->hw.mac.autoneg)
2057                return -EINVAL;
2058
2059        pm_runtime_get_sync(netdev->dev.parent);
2060        e1000e_reinit_locked(adapter);
2061        pm_runtime_put_sync(netdev->dev.parent);
2062
2063        return 0;
2064}
2065
2066static void e1000_get_ethtool_stats(struct net_device *netdev,
2067                                    struct ethtool_stats __always_unused *stats,
2068                                    u64 *data)
2069{
2070        struct e1000_adapter *adapter = netdev_priv(netdev);
2071        struct rtnl_link_stats64 net_stats;
2072        int i;
2073        char *p = NULL;
2074
2075        pm_runtime_get_sync(netdev->dev.parent);
2076
2077        dev_get_stats(netdev, &net_stats);
2078
2079        pm_runtime_put_sync(netdev->dev.parent);
2080
2081        for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
2082                switch (e1000_gstrings_stats[i].type) {
2083                case NETDEV_STATS:
2084                        p = (char *)&net_stats +
2085                            e1000_gstrings_stats[i].stat_offset;
2086                        break;
2087                case E1000_STATS:
2088                        p = (char *)adapter +
2089                            e1000_gstrings_stats[i].stat_offset;
2090                        break;
2091                default:
2092                        data[i] = 0;
2093                        continue;
2094                }
2095
2096                data[i] = (e1000_gstrings_stats[i].sizeof_stat ==
2097                           sizeof(u64)) ? *(u64 *)p : *(u32 *)p;
2098        }
2099}
2100
2101static void e1000_get_strings(struct net_device __always_unused *netdev,
2102                              u32 stringset, u8 *data)
2103{
2104        u8 *p = data;
2105        int i;
2106
2107        switch (stringset) {
2108        case ETH_SS_TEST:
2109                memcpy(data, e1000_gstrings_test, sizeof(e1000_gstrings_test));
2110                break;
2111        case ETH_SS_STATS:
2112                for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
2113                        memcpy(p, e1000_gstrings_stats[i].stat_string,
2114                               ETH_GSTRING_LEN);
2115                        p += ETH_GSTRING_LEN;
2116                }
2117                break;
2118        }
2119}
2120
2121static int e1000_get_rxnfc(struct net_device *netdev,
2122                           struct ethtool_rxnfc *info,
2123                           u32 __always_unused *rule_locs)
2124{
2125        info->data = 0;
2126
2127        switch (info->cmd) {
2128        case ETHTOOL_GRXFH: {
2129                struct e1000_adapter *adapter = netdev_priv(netdev);
2130                struct e1000_hw *hw = &adapter->hw;
2131                u32 mrqc;
2132
2133                pm_runtime_get_sync(netdev->dev.parent);
2134                mrqc = er32(MRQC);
2135                pm_runtime_put_sync(netdev->dev.parent);
2136
2137                if (!(mrqc & E1000_MRQC_RSS_FIELD_MASK))
2138                        return 0;
2139
2140                switch (info->flow_type) {
2141                case TCP_V4_FLOW:
2142                        if (mrqc & E1000_MRQC_RSS_FIELD_IPV4_TCP)
2143                                info->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2144                        /* fall through */
2145                case UDP_V4_FLOW:
2146                case SCTP_V4_FLOW:
2147                case AH_ESP_V4_FLOW:
2148                case IPV4_FLOW:
2149                        if (mrqc & E1000_MRQC_RSS_FIELD_IPV4)
2150                                info->data |= RXH_IP_SRC | RXH_IP_DST;
2151                        break;
2152                case TCP_V6_FLOW:
2153                        if (mrqc & E1000_MRQC_RSS_FIELD_IPV6_TCP)
2154                                info->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
2155                        /* fall through */
2156                case UDP_V6_FLOW:
2157                case SCTP_V6_FLOW:
2158                case AH_ESP_V6_FLOW:
2159                case IPV6_FLOW:
2160                        if (mrqc & E1000_MRQC_RSS_FIELD_IPV6)
2161                                info->data |= RXH_IP_SRC | RXH_IP_DST;
2162                        break;
2163                default:
2164                        break;
2165                }
2166                return 0;
2167        }
2168        default:
2169                return -EOPNOTSUPP;
2170        }
2171}
2172
2173static int e1000e_get_eee(struct net_device *netdev, struct ethtool_eee *edata)
2174{
2175        struct e1000_adapter *adapter = netdev_priv(netdev);
2176        struct e1000_hw *hw = &adapter->hw;
2177        u16 cap_addr, lpa_addr, pcs_stat_addr, phy_data;
2178        u32 ret_val;
2179
2180        if (!(adapter->flags2 & FLAG2_HAS_EEE))
2181                return -EOPNOTSUPP;
2182
2183        switch (hw->phy.type) {
2184        case e1000_phy_82579:
2185                cap_addr = I82579_EEE_CAPABILITY;
2186                lpa_addr = I82579_EEE_LP_ABILITY;
2187                pcs_stat_addr = I82579_EEE_PCS_STATUS;
2188                break;
2189        case e1000_phy_i217:
2190                cap_addr = I217_EEE_CAPABILITY;
2191                lpa_addr = I217_EEE_LP_ABILITY;
2192                pcs_stat_addr = I217_EEE_PCS_STATUS;
2193                break;
2194        default:
2195                return -EOPNOTSUPP;
2196        }
2197
2198        pm_runtime_get_sync(netdev->dev.parent);
2199
2200        ret_val = hw->phy.ops.acquire(hw);
2201        if (ret_val) {
2202                pm_runtime_put_sync(netdev->dev.parent);
2203                return -EBUSY;
2204        }
2205
2206        /* EEE Capability */
2207        ret_val = e1000_read_emi_reg_locked(hw, cap_addr, &phy_data);
2208        if (ret_val)
2209                goto release;
2210        edata->supported = mmd_eee_cap_to_ethtool_sup_t(phy_data);
2211
2212        /* EEE Advertised */
2213        edata->advertised = mmd_eee_adv_to_ethtool_adv_t(adapter->eee_advert);
2214
2215        /* EEE Link Partner Advertised */
2216        ret_val = e1000_read_emi_reg_locked(hw, lpa_addr, &phy_data);
2217        if (ret_val)
2218                goto release;
2219        edata->lp_advertised = mmd_eee_adv_to_ethtool_adv_t(phy_data);
2220
2221        /* EEE PCS Status */
2222        ret_val = e1000_read_emi_reg_locked(hw, pcs_stat_addr, &phy_data);
2223        if (ret_val)
2224                goto release;
2225        if (hw->phy.type == e1000_phy_82579)
2226                phy_data <<= 8;
2227
2228        /* Result of the EEE auto negotiation - there is no register that
2229         * has the status of the EEE negotiation so do a best-guess based
2230         * on whether Tx or Rx LPI indications have been received.
2231         */
2232        if (phy_data & (E1000_EEE_TX_LPI_RCVD | E1000_EEE_RX_LPI_RCVD))
2233                edata->eee_active = true;
2234
2235        edata->eee_enabled = !hw->dev_spec.ich8lan.eee_disable;
2236        edata->tx_lpi_enabled = true;
2237        edata->tx_lpi_timer = er32(LPIC) >> E1000_LPIC_LPIET_SHIFT;
2238
2239release:
2240        hw->phy.ops.release(hw);
2241        if (ret_val)
2242                ret_val = -ENODATA;
2243
2244        pm_runtime_put_sync(netdev->dev.parent);
2245
2246        return ret_val;
2247}
2248
2249static int e1000e_set_eee(struct net_device *netdev, struct ethtool_eee *edata)
2250{
2251        struct e1000_adapter *adapter = netdev_priv(netdev);
2252        struct e1000_hw *hw = &adapter->hw;
2253        struct ethtool_eee eee_curr;
2254        s32 ret_val;
2255
2256        ret_val = e1000e_get_eee(netdev, &eee_curr);
2257        if (ret_val)
2258                return ret_val;
2259
2260        if (eee_curr.tx_lpi_enabled != edata->tx_lpi_enabled) {
2261                e_err("Setting EEE tx-lpi is not supported\n");
2262                return -EINVAL;
2263        }
2264
2265        if (eee_curr.tx_lpi_timer != edata->tx_lpi_timer) {
2266                e_err("Setting EEE Tx LPI timer is not supported\n");
2267                return -EINVAL;
2268        }
2269
2270        if (edata->advertised & ~(ADVERTISE_100_FULL | ADVERTISE_1000_FULL)) {
2271                e_err("EEE advertisement supports only 100TX and/or 1000T full-duplex\n");
2272                return -EINVAL;
2273        }
2274
2275        adapter->eee_advert = ethtool_adv_to_mmd_eee_adv_t(edata->advertised);
2276
2277        hw->dev_spec.ich8lan.eee_disable = !edata->eee_enabled;
2278
2279        pm_runtime_get_sync(netdev->dev.parent);
2280
2281        /* reset the link */
2282        if (netif_running(netdev))
2283                e1000e_reinit_locked(adapter);
2284        else
2285                e1000e_reset(adapter);
2286
2287        pm_runtime_put_sync(netdev->dev.parent);
2288
2289        return 0;
2290}
2291
2292static int e1000e_get_ts_info(struct net_device *netdev,
2293                              struct ethtool_ts_info *info)
2294{
2295        struct e1000_adapter *adapter = netdev_priv(netdev);
2296
2297        ethtool_op_get_ts_info(netdev, info);
2298
2299        if (!(adapter->flags & FLAG_HAS_HW_TIMESTAMP))
2300                return 0;
2301
2302        info->so_timestamping |= (SOF_TIMESTAMPING_TX_HARDWARE |
2303                                  SOF_TIMESTAMPING_RX_HARDWARE |
2304                                  SOF_TIMESTAMPING_RAW_HARDWARE);
2305
2306        info->tx_types = BIT(HWTSTAMP_TX_OFF) | BIT(HWTSTAMP_TX_ON);
2307
2308        info->rx_filters = (BIT(HWTSTAMP_FILTER_NONE) |
2309                            BIT(HWTSTAMP_FILTER_PTP_V1_L4_SYNC) |
2310                            BIT(HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) |
2311                            BIT(HWTSTAMP_FILTER_PTP_V2_L4_SYNC) |
2312                            BIT(HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ) |
2313                            BIT(HWTSTAMP_FILTER_PTP_V2_L2_SYNC) |
2314                            BIT(HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ) |
2315                            BIT(HWTSTAMP_FILTER_PTP_V2_EVENT) |
2316                            BIT(HWTSTAMP_FILTER_PTP_V2_SYNC) |
2317                            BIT(HWTSTAMP_FILTER_PTP_V2_DELAY_REQ) |
2318                            BIT(HWTSTAMP_FILTER_ALL));
2319
2320        if (adapter->ptp_clock)
2321                info->phc_index = ptp_clock_index(adapter->ptp_clock);
2322
2323        return 0;
2324}
2325
2326static const struct ethtool_ops e1000_ethtool_ops = {
2327        .get_drvinfo            = e1000_get_drvinfo,
2328        .get_regs_len           = e1000_get_regs_len,
2329        .get_regs               = e1000_get_regs,
2330        .get_wol                = e1000_get_wol,
2331        .set_wol                = e1000_set_wol,
2332        .get_msglevel           = e1000_get_msglevel,
2333        .set_msglevel           = e1000_set_msglevel,
2334        .nway_reset             = e1000_nway_reset,
2335        .get_link               = ethtool_op_get_link,
2336        .get_eeprom_len         = e1000_get_eeprom_len,
2337        .get_eeprom             = e1000_get_eeprom,
2338        .set_eeprom             = e1000_set_eeprom,
2339        .get_ringparam          = e1000_get_ringparam,
2340        .set_ringparam          = e1000_set_ringparam,
2341        .get_pauseparam         = e1000_get_pauseparam,
2342        .set_pauseparam         = e1000_set_pauseparam,
2343        .self_test              = e1000_diag_test,
2344        .get_strings            = e1000_get_strings,
2345        .set_phys_id            = e1000_set_phys_id,
2346        .get_ethtool_stats      = e1000_get_ethtool_stats,
2347        .get_sset_count         = e1000e_get_sset_count,
2348        .get_coalesce           = e1000_get_coalesce,
2349        .set_coalesce           = e1000_set_coalesce,
2350        .get_rxnfc              = e1000_get_rxnfc,
2351        .get_ts_info            = e1000e_get_ts_info,
2352        .get_eee                = e1000e_get_eee,
2353        .set_eee                = e1000e_set_eee,
2354        .get_link_ksettings     = e1000_get_link_ksettings,
2355        .set_link_ksettings     = e1000_set_link_ksettings,
2356};
2357
2358void e1000e_set_ethtool_ops(struct net_device *netdev)
2359{
2360        netdev->ethtool_ops = &e1000_ethtool_ops;
2361}
2362