linux/drivers/net/e1000/e1000_ethtool.c
<<
>>
Prefs
   1/*******************************************************************************
   2
   3  Intel PRO/1000 Linux driver
   4  Copyright(c) 1999 - 2006 Intel Corporation.
   5
   6  This program is free software; you can redistribute it and/or modify it
   7  under the terms and conditions of the GNU General Public License,
   8  version 2, as published by the Free Software Foundation.
   9
  10  This program is distributed in the hope it will be useful, but WITHOUT
  11  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  13  more details.
  14
  15  You should have received a copy of the GNU General Public License along with
  16  this program; if not, write to the Free Software Foundation, Inc.,
  17  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  18
  19  The full GNU General Public License is included in this distribution in
  20  the file called "COPYING".
  21
  22  Contact Information:
  23  Linux NICS <linux.nics@intel.com>
  24  e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
  25  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  26
  27*******************************************************************************/
  28
  29/* ethtool support for e1000 */
  30
  31#include "e1000.h"
  32#include <asm/uaccess.h>
  33
  34enum {NETDEV_STATS, E1000_STATS};
  35
  36struct e1000_stats {
  37        char stat_string[ETH_GSTRING_LEN];
  38        int type;
  39        int sizeof_stat;
  40        int stat_offset;
  41};
  42
  43#define E1000_STAT(m)           E1000_STATS, \
  44                                sizeof(((struct e1000_adapter *)0)->m), \
  45                                offsetof(struct e1000_adapter, m)
  46#define E1000_NETDEV_STAT(m)    NETDEV_STATS, \
  47                                sizeof(((struct net_device *)0)->m), \
  48                                offsetof(struct net_device, m)
  49
  50static const struct e1000_stats e1000_gstrings_stats[] = {
  51        { "rx_packets", E1000_STAT(stats.gprc) },
  52        { "tx_packets", E1000_STAT(stats.gptc) },
  53        { "rx_bytes", E1000_STAT(stats.gorcl) },
  54        { "tx_bytes", E1000_STAT(stats.gotcl) },
  55        { "rx_broadcast", E1000_STAT(stats.bprc) },
  56        { "tx_broadcast", E1000_STAT(stats.bptc) },
  57        { "rx_multicast", E1000_STAT(stats.mprc) },
  58        { "tx_multicast", E1000_STAT(stats.mptc) },
  59        { "rx_errors", E1000_STAT(stats.rxerrc) },
  60        { "tx_errors", E1000_STAT(stats.txerrc) },
  61        { "tx_dropped", E1000_NETDEV_STAT(stats.tx_dropped) },
  62        { "multicast", E1000_STAT(stats.mprc) },
  63        { "collisions", E1000_STAT(stats.colc) },
  64        { "rx_length_errors", E1000_STAT(stats.rlerrc) },
  65        { "rx_over_errors", E1000_NETDEV_STAT(stats.rx_over_errors) },
  66        { "rx_crc_errors", E1000_STAT(stats.crcerrs) },
  67        { "rx_frame_errors", E1000_NETDEV_STAT(stats.rx_frame_errors) },
  68        { "rx_no_buffer_count", E1000_STAT(stats.rnbc) },
  69        { "rx_missed_errors", E1000_STAT(stats.mpc) },
  70        { "tx_aborted_errors", E1000_STAT(stats.ecol) },
  71        { "tx_carrier_errors", E1000_STAT(stats.tncrs) },
  72        { "tx_fifo_errors", E1000_NETDEV_STAT(stats.tx_fifo_errors) },
  73        { "tx_heartbeat_errors", E1000_NETDEV_STAT(stats.tx_heartbeat_errors) },
  74        { "tx_window_errors", E1000_STAT(stats.latecol) },
  75        { "tx_abort_late_coll", E1000_STAT(stats.latecol) },
  76        { "tx_deferred_ok", E1000_STAT(stats.dc) },
  77        { "tx_single_coll_ok", E1000_STAT(stats.scc) },
  78        { "tx_multi_coll_ok", E1000_STAT(stats.mcc) },
  79        { "tx_timeout_count", E1000_STAT(tx_timeout_count) },
  80        { "tx_restart_queue", E1000_STAT(restart_queue) },
  81        { "rx_long_length_errors", E1000_STAT(stats.roc) },
  82        { "rx_short_length_errors", E1000_STAT(stats.ruc) },
  83        { "rx_align_errors", E1000_STAT(stats.algnerrc) },
  84        { "tx_tcp_seg_good", E1000_STAT(stats.tsctc) },
  85        { "tx_tcp_seg_failed", E1000_STAT(stats.tsctfc) },
  86        { "rx_flow_control_xon", E1000_STAT(stats.xonrxc) },
  87        { "rx_flow_control_xoff", E1000_STAT(stats.xoffrxc) },
  88        { "tx_flow_control_xon", E1000_STAT(stats.xontxc) },
  89        { "tx_flow_control_xoff", E1000_STAT(stats.xofftxc) },
  90        { "rx_long_byte_count", E1000_STAT(stats.gorcl) },
  91        { "rx_csum_offload_good", E1000_STAT(hw_csum_good) },
  92        { "rx_csum_offload_errors", E1000_STAT(hw_csum_err) },
  93        { "alloc_rx_buff_failed", E1000_STAT(alloc_rx_buff_failed) },
  94        { "tx_smbus", E1000_STAT(stats.mgptc) },
  95        { "rx_smbus", E1000_STAT(stats.mgprc) },
  96        { "dropped_smbus", E1000_STAT(stats.mgpdc) },
  97};
  98
  99#define E1000_QUEUE_STATS_LEN 0
 100#define E1000_GLOBAL_STATS_LEN ARRAY_SIZE(e1000_gstrings_stats)
 101#define E1000_STATS_LEN (E1000_GLOBAL_STATS_LEN + E1000_QUEUE_STATS_LEN)
 102static const char e1000_gstrings_test[][ETH_GSTRING_LEN] = {
 103        "Register test  (offline)", "Eeprom test    (offline)",
 104        "Interrupt test (offline)", "Loopback test  (offline)",
 105        "Link test   (on/offline)"
 106};
 107#define E1000_TEST_LEN  ARRAY_SIZE(e1000_gstrings_test)
 108
 109static int e1000_get_settings(struct net_device *netdev,
 110                              struct ethtool_cmd *ecmd)
 111{
 112        struct e1000_adapter *adapter = netdev_priv(netdev);
 113        struct e1000_hw *hw = &adapter->hw;
 114
 115        if (hw->media_type == e1000_media_type_copper) {
 116
 117                ecmd->supported = (SUPPORTED_10baseT_Half |
 118                                   SUPPORTED_10baseT_Full |
 119                                   SUPPORTED_100baseT_Half |
 120                                   SUPPORTED_100baseT_Full |
 121                                   SUPPORTED_1000baseT_Full|
 122                                   SUPPORTED_Autoneg |
 123                                   SUPPORTED_TP);
 124                ecmd->advertising = ADVERTISED_TP;
 125
 126                if (hw->autoneg == 1) {
 127                        ecmd->advertising |= ADVERTISED_Autoneg;
 128                        /* the e1000 autoneg seems to match ethtool nicely */
 129                        ecmd->advertising |= hw->autoneg_advertised;
 130                }
 131
 132                ecmd->port = PORT_TP;
 133                ecmd->phy_address = hw->phy_addr;
 134
 135                if (hw->mac_type == e1000_82543)
 136                        ecmd->transceiver = XCVR_EXTERNAL;
 137                else
 138                        ecmd->transceiver = XCVR_INTERNAL;
 139
 140        } else {
 141                ecmd->supported   = (SUPPORTED_1000baseT_Full |
 142                                     SUPPORTED_FIBRE |
 143                                     SUPPORTED_Autoneg);
 144
 145                ecmd->advertising = (ADVERTISED_1000baseT_Full |
 146                                     ADVERTISED_FIBRE |
 147                                     ADVERTISED_Autoneg);
 148
 149                ecmd->port = PORT_FIBRE;
 150
 151                if (hw->mac_type >= e1000_82545)
 152                        ecmd->transceiver = XCVR_INTERNAL;
 153                else
 154                        ecmd->transceiver = XCVR_EXTERNAL;
 155        }
 156
 157        if (er32(STATUS) & E1000_STATUS_LU) {
 158
 159                e1000_get_speed_and_duplex(hw, &adapter->link_speed,
 160                                                   &adapter->link_duplex);
 161                ecmd->speed = adapter->link_speed;
 162
 163                /* unfortunatly FULL_DUPLEX != DUPLEX_FULL
 164                 *          and HALF_DUPLEX != DUPLEX_HALF */
 165
 166                if (adapter->link_duplex == FULL_DUPLEX)
 167                        ecmd->duplex = DUPLEX_FULL;
 168                else
 169                        ecmd->duplex = DUPLEX_HALF;
 170        } else {
 171                ecmd->speed = -1;
 172                ecmd->duplex = -1;
 173        }
 174
 175        ecmd->autoneg = ((hw->media_type == e1000_media_type_fiber) ||
 176                         hw->autoneg) ? AUTONEG_ENABLE : AUTONEG_DISABLE;
 177        return 0;
 178}
 179
 180static int e1000_set_settings(struct net_device *netdev,
 181                              struct ethtool_cmd *ecmd)
 182{
 183        struct e1000_adapter *adapter = netdev_priv(netdev);
 184        struct e1000_hw *hw = &adapter->hw;
 185
 186        while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
 187                msleep(1);
 188
 189        if (ecmd->autoneg == AUTONEG_ENABLE) {
 190                hw->autoneg = 1;
 191                if (hw->media_type == e1000_media_type_fiber)
 192                        hw->autoneg_advertised = ADVERTISED_1000baseT_Full |
 193                                     ADVERTISED_FIBRE |
 194                                     ADVERTISED_Autoneg;
 195                else
 196                        hw->autoneg_advertised = ecmd->advertising |
 197                                                 ADVERTISED_TP |
 198                                                 ADVERTISED_Autoneg;
 199                ecmd->advertising = hw->autoneg_advertised;
 200        } else
 201                if (e1000_set_spd_dplx(adapter, ecmd->speed + ecmd->duplex)) {
 202                        clear_bit(__E1000_RESETTING, &adapter->flags);
 203                        return -EINVAL;
 204                }
 205
 206        /* reset the link */
 207
 208        if (netif_running(adapter->netdev)) {
 209                e1000_down(adapter);
 210                e1000_up(adapter);
 211        } else
 212                e1000_reset(adapter);
 213
 214        clear_bit(__E1000_RESETTING, &adapter->flags);
 215        return 0;
 216}
 217
 218static u32 e1000_get_link(struct net_device *netdev)
 219{
 220        struct e1000_adapter *adapter = netdev_priv(netdev);
 221
 222        /*
 223         * If the link is not reported up to netdev, interrupts are disabled,
 224         * and so the physical link state may have changed since we last
 225         * looked. Set get_link_status to make sure that the true link
 226         * state is interrogated, rather than pulling a cached and possibly
 227         * stale link state from the driver.
 228         */
 229        if (!netif_carrier_ok(netdev))
 230                adapter->hw.get_link_status = 1;
 231
 232        return e1000_has_link(adapter);
 233}
 234
 235static void e1000_get_pauseparam(struct net_device *netdev,
 236                                 struct ethtool_pauseparam *pause)
 237{
 238        struct e1000_adapter *adapter = netdev_priv(netdev);
 239        struct e1000_hw *hw = &adapter->hw;
 240
 241        pause->autoneg =
 242                (adapter->fc_autoneg ? AUTONEG_ENABLE : AUTONEG_DISABLE);
 243
 244        if (hw->fc == E1000_FC_RX_PAUSE)
 245                pause->rx_pause = 1;
 246        else if (hw->fc == E1000_FC_TX_PAUSE)
 247                pause->tx_pause = 1;
 248        else if (hw->fc == E1000_FC_FULL) {
 249                pause->rx_pause = 1;
 250                pause->tx_pause = 1;
 251        }
 252}
 253
 254static int e1000_set_pauseparam(struct net_device *netdev,
 255                                struct ethtool_pauseparam *pause)
 256{
 257        struct e1000_adapter *adapter = netdev_priv(netdev);
 258        struct e1000_hw *hw = &adapter->hw;
 259        int retval = 0;
 260
 261        adapter->fc_autoneg = pause->autoneg;
 262
 263        while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
 264                msleep(1);
 265
 266        if (pause->rx_pause && pause->tx_pause)
 267                hw->fc = E1000_FC_FULL;
 268        else if (pause->rx_pause && !pause->tx_pause)
 269                hw->fc = E1000_FC_RX_PAUSE;
 270        else if (!pause->rx_pause && pause->tx_pause)
 271                hw->fc = E1000_FC_TX_PAUSE;
 272        else if (!pause->rx_pause && !pause->tx_pause)
 273                hw->fc = E1000_FC_NONE;
 274
 275        hw->original_fc = hw->fc;
 276
 277        if (adapter->fc_autoneg == AUTONEG_ENABLE) {
 278                if (netif_running(adapter->netdev)) {
 279                        e1000_down(adapter);
 280                        e1000_up(adapter);
 281                } else
 282                        e1000_reset(adapter);
 283        } else
 284                retval = ((hw->media_type == e1000_media_type_fiber) ?
 285                          e1000_setup_link(hw) : e1000_force_mac_fc(hw));
 286
 287        clear_bit(__E1000_RESETTING, &adapter->flags);
 288        return retval;
 289}
 290
 291static u32 e1000_get_rx_csum(struct net_device *netdev)
 292{
 293        struct e1000_adapter *adapter = netdev_priv(netdev);
 294        return adapter->rx_csum;
 295}
 296
 297static int e1000_set_rx_csum(struct net_device *netdev, u32 data)
 298{
 299        struct e1000_adapter *adapter = netdev_priv(netdev);
 300        adapter->rx_csum = data;
 301
 302        if (netif_running(netdev))
 303                e1000_reinit_locked(adapter);
 304        else
 305                e1000_reset(adapter);
 306        return 0;
 307}
 308
 309static u32 e1000_get_tx_csum(struct net_device *netdev)
 310{
 311        return (netdev->features & NETIF_F_HW_CSUM) != 0;
 312}
 313
 314static int e1000_set_tx_csum(struct net_device *netdev, u32 data)
 315{
 316        struct e1000_adapter *adapter = netdev_priv(netdev);
 317        struct e1000_hw *hw = &adapter->hw;
 318
 319        if (hw->mac_type < e1000_82543) {
 320                if (!data)
 321                        return -EINVAL;
 322                return 0;
 323        }
 324
 325        if (data)
 326                netdev->features |= NETIF_F_HW_CSUM;
 327        else
 328                netdev->features &= ~NETIF_F_HW_CSUM;
 329
 330        return 0;
 331}
 332
 333static int e1000_set_tso(struct net_device *netdev, u32 data)
 334{
 335        struct e1000_adapter *adapter = netdev_priv(netdev);
 336        struct e1000_hw *hw = &adapter->hw;
 337
 338        if ((hw->mac_type < e1000_82544) ||
 339            (hw->mac_type == e1000_82547))
 340                return data ? -EINVAL : 0;
 341
 342        if (data)
 343                netdev->features |= NETIF_F_TSO;
 344        else
 345                netdev->features &= ~NETIF_F_TSO;
 346
 347        netdev->features &= ~NETIF_F_TSO6;
 348
 349        e_info(probe, "TSO is %s\n", data ? "Enabled" : "Disabled");
 350        adapter->tso_force = true;
 351        return 0;
 352}
 353
 354static u32 e1000_get_msglevel(struct net_device *netdev)
 355{
 356        struct e1000_adapter *adapter = netdev_priv(netdev);
 357        return adapter->msg_enable;
 358}
 359
 360static void e1000_set_msglevel(struct net_device *netdev, u32 data)
 361{
 362        struct e1000_adapter *adapter = netdev_priv(netdev);
 363        adapter->msg_enable = data;
 364}
 365
 366static int e1000_get_regs_len(struct net_device *netdev)
 367{
 368#define E1000_REGS_LEN 32
 369        return E1000_REGS_LEN * sizeof(u32);
 370}
 371
 372static void e1000_get_regs(struct net_device *netdev, struct ethtool_regs *regs,
 373                           void *p)
 374{
 375        struct e1000_adapter *adapter = netdev_priv(netdev);
 376        struct e1000_hw *hw = &adapter->hw;
 377        u32 *regs_buff = p;
 378        u16 phy_data;
 379
 380        memset(p, 0, E1000_REGS_LEN * sizeof(u32));
 381
 382        regs->version = (1 << 24) | (hw->revision_id << 16) | hw->device_id;
 383
 384        regs_buff[0]  = er32(CTRL);
 385        regs_buff[1]  = er32(STATUS);
 386
 387        regs_buff[2]  = er32(RCTL);
 388        regs_buff[3]  = er32(RDLEN);
 389        regs_buff[4]  = er32(RDH);
 390        regs_buff[5]  = er32(RDT);
 391        regs_buff[6]  = er32(RDTR);
 392
 393        regs_buff[7]  = er32(TCTL);
 394        regs_buff[8]  = er32(TDLEN);
 395        regs_buff[9]  = er32(TDH);
 396        regs_buff[10] = er32(TDT);
 397        regs_buff[11] = er32(TIDV);
 398
 399        regs_buff[12] = hw->phy_type;  /* PHY type (IGP=1, M88=0) */
 400        if (hw->phy_type == e1000_phy_igp) {
 401                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
 402                                    IGP01E1000_PHY_AGC_A);
 403                e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_A &
 404                                   IGP01E1000_PHY_PAGE_SELECT, &phy_data);
 405                regs_buff[13] = (u32)phy_data; /* cable length */
 406                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
 407                                    IGP01E1000_PHY_AGC_B);
 408                e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_B &
 409                                   IGP01E1000_PHY_PAGE_SELECT, &phy_data);
 410                regs_buff[14] = (u32)phy_data; /* cable length */
 411                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
 412                                    IGP01E1000_PHY_AGC_C);
 413                e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_C &
 414                                   IGP01E1000_PHY_PAGE_SELECT, &phy_data);
 415                regs_buff[15] = (u32)phy_data; /* cable length */
 416                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
 417                                    IGP01E1000_PHY_AGC_D);
 418                e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_D &
 419                                   IGP01E1000_PHY_PAGE_SELECT, &phy_data);
 420                regs_buff[16] = (u32)phy_data; /* cable length */
 421                regs_buff[17] = 0; /* extended 10bt distance (not needed) */
 422                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, 0x0);
 423                e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS &
 424                                   IGP01E1000_PHY_PAGE_SELECT, &phy_data);
 425                regs_buff[18] = (u32)phy_data; /* cable polarity */
 426                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
 427                                    IGP01E1000_PHY_PCS_INIT_REG);
 428                e1000_read_phy_reg(hw, IGP01E1000_PHY_PCS_INIT_REG &
 429                                   IGP01E1000_PHY_PAGE_SELECT, &phy_data);
 430                regs_buff[19] = (u32)phy_data; /* cable polarity */
 431                regs_buff[20] = 0; /* polarity correction enabled (always) */
 432                regs_buff[22] = 0; /* phy receive errors (unavailable) */
 433                regs_buff[23] = regs_buff[18]; /* mdix mode */
 434                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, 0x0);
 435        } else {
 436                e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
 437                regs_buff[13] = (u32)phy_data; /* cable length */
 438                regs_buff[14] = 0;  /* Dummy (to align w/ IGP phy reg dump) */
 439                regs_buff[15] = 0;  /* Dummy (to align w/ IGP phy reg dump) */
 440                regs_buff[16] = 0;  /* Dummy (to align w/ IGP phy reg dump) */
 441                e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
 442                regs_buff[17] = (u32)phy_data; /* extended 10bt distance */
 443                regs_buff[18] = regs_buff[13]; /* cable polarity */
 444                regs_buff[19] = 0;  /* Dummy (to align w/ IGP phy reg dump) */
 445                regs_buff[20] = regs_buff[17]; /* polarity correction */
 446                /* phy receive errors */
 447                regs_buff[22] = adapter->phy_stats.receive_errors;
 448                regs_buff[23] = regs_buff[13]; /* mdix mode */
 449        }
 450        regs_buff[21] = adapter->phy_stats.idle_errors;  /* phy idle errors */
 451        e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
 452        regs_buff[24] = (u32)phy_data;  /* phy local receiver status */
 453        regs_buff[25] = regs_buff[24];  /* phy remote receiver status */
 454        if (hw->mac_type >= e1000_82540 &&
 455            hw->media_type == e1000_media_type_copper) {
 456                regs_buff[26] = er32(MANC);
 457        }
 458}
 459
 460static int e1000_get_eeprom_len(struct net_device *netdev)
 461{
 462        struct e1000_adapter *adapter = netdev_priv(netdev);
 463        struct e1000_hw *hw = &adapter->hw;
 464
 465        return hw->eeprom.word_size * 2;
 466}
 467
 468static int e1000_get_eeprom(struct net_device *netdev,
 469                            struct ethtool_eeprom *eeprom, u8 *bytes)
 470{
 471        struct e1000_adapter *adapter = netdev_priv(netdev);
 472        struct e1000_hw *hw = &adapter->hw;
 473        u16 *eeprom_buff;
 474        int first_word, last_word;
 475        int ret_val = 0;
 476        u16 i;
 477
 478        if (eeprom->len == 0)
 479                return -EINVAL;
 480
 481        eeprom->magic = hw->vendor_id | (hw->device_id << 16);
 482
 483        first_word = eeprom->offset >> 1;
 484        last_word = (eeprom->offset + eeprom->len - 1) >> 1;
 485
 486        eeprom_buff = kmalloc(sizeof(u16) *
 487                        (last_word - first_word + 1), GFP_KERNEL);
 488        if (!eeprom_buff)
 489                return -ENOMEM;
 490
 491        if (hw->eeprom.type == e1000_eeprom_spi)
 492                ret_val = e1000_read_eeprom(hw, first_word,
 493                                            last_word - first_word + 1,
 494                                            eeprom_buff);
 495        else {
 496                for (i = 0; i < last_word - first_word + 1; i++) {
 497                        ret_val = e1000_read_eeprom(hw, first_word + i, 1,
 498                                                    &eeprom_buff[i]);
 499                        if (ret_val)
 500                                break;
 501                }
 502        }
 503
 504        /* Device's eeprom is always little-endian, word addressable */
 505        for (i = 0; i < last_word - first_word + 1; i++)
 506                le16_to_cpus(&eeprom_buff[i]);
 507
 508        memcpy(bytes, (u8 *)eeprom_buff + (eeprom->offset & 1),
 509                        eeprom->len);
 510        kfree(eeprom_buff);
 511
 512        return ret_val;
 513}
 514
 515static int e1000_set_eeprom(struct net_device *netdev,
 516                            struct ethtool_eeprom *eeprom, u8 *bytes)
 517{
 518        struct e1000_adapter *adapter = netdev_priv(netdev);
 519        struct e1000_hw *hw = &adapter->hw;
 520        u16 *eeprom_buff;
 521        void *ptr;
 522        int max_len, first_word, last_word, ret_val = 0;
 523        u16 i;
 524
 525        if (eeprom->len == 0)
 526                return -EOPNOTSUPP;
 527
 528        if (eeprom->magic != (hw->vendor_id | (hw->device_id << 16)))
 529                return -EFAULT;
 530
 531        max_len = hw->eeprom.word_size * 2;
 532
 533        first_word = eeprom->offset >> 1;
 534        last_word = (eeprom->offset + eeprom->len - 1) >> 1;
 535        eeprom_buff = kmalloc(max_len, GFP_KERNEL);
 536        if (!eeprom_buff)
 537                return -ENOMEM;
 538
 539        ptr = (void *)eeprom_buff;
 540
 541        if (eeprom->offset & 1) {
 542                /* need read/modify/write of first changed EEPROM word */
 543                /* only the second byte of the word is being modified */
 544                ret_val = e1000_read_eeprom(hw, first_word, 1,
 545                                            &eeprom_buff[0]);
 546                ptr++;
 547        }
 548        if (((eeprom->offset + eeprom->len) & 1) && (ret_val == 0)) {
 549                /* need read/modify/write of last changed EEPROM word */
 550                /* only the first byte of the word is being modified */
 551                ret_val = e1000_read_eeprom(hw, last_word, 1,
 552                                  &eeprom_buff[last_word - first_word]);
 553        }
 554
 555        /* Device's eeprom is always little-endian, word addressable */
 556        for (i = 0; i < last_word - first_word + 1; i++)
 557                le16_to_cpus(&eeprom_buff[i]);
 558
 559        memcpy(ptr, bytes, eeprom->len);
 560
 561        for (i = 0; i < last_word - first_word + 1; i++)
 562                eeprom_buff[i] = cpu_to_le16(eeprom_buff[i]);
 563
 564        ret_val = e1000_write_eeprom(hw, first_word,
 565                                     last_word - first_word + 1, eeprom_buff);
 566
 567        /* Update the checksum over the first part of the EEPROM if needed */
 568        if ((ret_val == 0) && (first_word <= EEPROM_CHECKSUM_REG))
 569                e1000_update_eeprom_checksum(hw);
 570
 571        kfree(eeprom_buff);
 572        return ret_val;
 573}
 574
 575static void e1000_get_drvinfo(struct net_device *netdev,
 576                              struct ethtool_drvinfo *drvinfo)
 577{
 578        struct e1000_adapter *adapter = netdev_priv(netdev);
 579        char firmware_version[32];
 580
 581        strncpy(drvinfo->driver,  e1000_driver_name, 32);
 582        strncpy(drvinfo->version, e1000_driver_version, 32);
 583
 584        sprintf(firmware_version, "N/A");
 585        strncpy(drvinfo->fw_version, firmware_version, 32);
 586        strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32);
 587        drvinfo->regdump_len = e1000_get_regs_len(netdev);
 588        drvinfo->eedump_len = e1000_get_eeprom_len(netdev);
 589}
 590
 591static void e1000_get_ringparam(struct net_device *netdev,
 592                                struct ethtool_ringparam *ring)
 593{
 594        struct e1000_adapter *adapter = netdev_priv(netdev);
 595        struct e1000_hw *hw = &adapter->hw;
 596        e1000_mac_type mac_type = hw->mac_type;
 597        struct e1000_tx_ring *txdr = adapter->tx_ring;
 598        struct e1000_rx_ring *rxdr = adapter->rx_ring;
 599
 600        ring->rx_max_pending = (mac_type < e1000_82544) ? E1000_MAX_RXD :
 601                E1000_MAX_82544_RXD;
 602        ring->tx_max_pending = (mac_type < e1000_82544) ? E1000_MAX_TXD :
 603                E1000_MAX_82544_TXD;
 604        ring->rx_mini_max_pending = 0;
 605        ring->rx_jumbo_max_pending = 0;
 606        ring->rx_pending = rxdr->count;
 607        ring->tx_pending = txdr->count;
 608        ring->rx_mini_pending = 0;
 609        ring->rx_jumbo_pending = 0;
 610}
 611
 612static int e1000_set_ringparam(struct net_device *netdev,
 613                               struct ethtool_ringparam *ring)
 614{
 615        struct e1000_adapter *adapter = netdev_priv(netdev);
 616        struct e1000_hw *hw = &adapter->hw;
 617        e1000_mac_type mac_type = hw->mac_type;
 618        struct e1000_tx_ring *txdr, *tx_old;
 619        struct e1000_rx_ring *rxdr, *rx_old;
 620        int i, err;
 621
 622        if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending))
 623                return -EINVAL;
 624
 625        while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
 626                msleep(1);
 627
 628        if (netif_running(adapter->netdev))
 629                e1000_down(adapter);
 630
 631        tx_old = adapter->tx_ring;
 632        rx_old = adapter->rx_ring;
 633
 634        err = -ENOMEM;
 635        txdr = kcalloc(adapter->num_tx_queues, sizeof(struct e1000_tx_ring), GFP_KERNEL);
 636        if (!txdr)
 637                goto err_alloc_tx;
 638
 639        rxdr = kcalloc(adapter->num_rx_queues, sizeof(struct e1000_rx_ring), GFP_KERNEL);
 640        if (!rxdr)
 641                goto err_alloc_rx;
 642
 643        adapter->tx_ring = txdr;
 644        adapter->rx_ring = rxdr;
 645
 646        rxdr->count = max(ring->rx_pending,(u32)E1000_MIN_RXD);
 647        rxdr->count = min(rxdr->count,(u32)(mac_type < e1000_82544 ?
 648                E1000_MAX_RXD : E1000_MAX_82544_RXD));
 649        rxdr->count = ALIGN(rxdr->count, REQ_RX_DESCRIPTOR_MULTIPLE);
 650
 651        txdr->count = max(ring->tx_pending,(u32)E1000_MIN_TXD);
 652        txdr->count = min(txdr->count,(u32)(mac_type < e1000_82544 ?
 653                E1000_MAX_TXD : E1000_MAX_82544_TXD));
 654        txdr->count = ALIGN(txdr->count, REQ_TX_DESCRIPTOR_MULTIPLE);
 655
 656        for (i = 0; i < adapter->num_tx_queues; i++)
 657                txdr[i].count = txdr->count;
 658        for (i = 0; i < adapter->num_rx_queues; i++)
 659                rxdr[i].count = rxdr->count;
 660
 661        if (netif_running(adapter->netdev)) {
 662                /* Try to get new resources before deleting old */
 663                err = e1000_setup_all_rx_resources(adapter);
 664                if (err)
 665                        goto err_setup_rx;
 666                err = e1000_setup_all_tx_resources(adapter);
 667                if (err)
 668                        goto err_setup_tx;
 669
 670                /* save the new, restore the old in order to free it,
 671                 * then restore the new back again */
 672
 673                adapter->rx_ring = rx_old;
 674                adapter->tx_ring = tx_old;
 675                e1000_free_all_rx_resources(adapter);
 676                e1000_free_all_tx_resources(adapter);
 677                kfree(tx_old);
 678                kfree(rx_old);
 679                adapter->rx_ring = rxdr;
 680                adapter->tx_ring = txdr;
 681                err = e1000_up(adapter);
 682                if (err)
 683                        goto err_setup;
 684        }
 685
 686        clear_bit(__E1000_RESETTING, &adapter->flags);
 687        return 0;
 688err_setup_tx:
 689        e1000_free_all_rx_resources(adapter);
 690err_setup_rx:
 691        adapter->rx_ring = rx_old;
 692        adapter->tx_ring = tx_old;
 693        kfree(rxdr);
 694err_alloc_rx:
 695        kfree(txdr);
 696err_alloc_tx:
 697        e1000_up(adapter);
 698err_setup:
 699        clear_bit(__E1000_RESETTING, &adapter->flags);
 700        return err;
 701}
 702
 703static bool reg_pattern_test(struct e1000_adapter *adapter, u64 *data, int reg,
 704                             u32 mask, u32 write)
 705{
 706        struct e1000_hw *hw = &adapter->hw;
 707        static const u32 test[] =
 708                {0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF};
 709        u8 __iomem *address = hw->hw_addr + reg;
 710        u32 read;
 711        int i;
 712
 713        for (i = 0; i < ARRAY_SIZE(test); i++) {
 714                writel(write & test[i], address);
 715                read = readl(address);
 716                if (read != (write & test[i] & mask)) {
 717                        e_err(drv, "pattern test reg %04X failed: "
 718                              "got 0x%08X expected 0x%08X\n",
 719                              reg, read, (write & test[i] & mask));
 720                        *data = reg;
 721                        return true;
 722                }
 723        }
 724        return false;
 725}
 726
 727static bool reg_set_and_check(struct e1000_adapter *adapter, u64 *data, int reg,
 728                              u32 mask, u32 write)
 729{
 730        struct e1000_hw *hw = &adapter->hw;
 731        u8 __iomem *address = hw->hw_addr + reg;
 732        u32 read;
 733
 734        writel(write & mask, address);
 735        read = readl(address);
 736        if ((read & mask) != (write & mask)) {
 737                e_err(drv, "set/check reg %04X test failed: "
 738                      "got 0x%08X expected 0x%08X\n",
 739                      reg, (read & mask), (write & mask));
 740                *data = reg;
 741                return true;
 742        }
 743        return false;
 744}
 745
 746#define REG_PATTERN_TEST(reg, mask, write)                           \
 747        do {                                                         \
 748                if (reg_pattern_test(adapter, data,                  \
 749                             (hw->mac_type >= e1000_82543)   \
 750                             ? E1000_##reg : E1000_82542_##reg,      \
 751                             mask, write))                           \
 752                        return 1;                                    \
 753        } while (0)
 754
 755#define REG_SET_AND_CHECK(reg, mask, write)                          \
 756        do {                                                         \
 757                if (reg_set_and_check(adapter, data,                 \
 758                              (hw->mac_type >= e1000_82543)  \
 759                              ? E1000_##reg : E1000_82542_##reg,     \
 760                              mask, write))                          \
 761                        return 1;                                    \
 762        } while (0)
 763
 764static int e1000_reg_test(struct e1000_adapter *adapter, u64 *data)
 765{
 766        u32 value, before, after;
 767        u32 i, toggle;
 768        struct e1000_hw *hw = &adapter->hw;
 769
 770        /* The status register is Read Only, so a write should fail.
 771         * Some bits that get toggled are ignored.
 772         */
 773
 774        /* there are several bits on newer hardware that are r/w */
 775        toggle = 0xFFFFF833;
 776
 777        before = er32(STATUS);
 778        value = (er32(STATUS) & toggle);
 779        ew32(STATUS, toggle);
 780        after = er32(STATUS) & toggle;
 781        if (value != after) {
 782                e_err(drv, "failed STATUS register test got: "
 783                      "0x%08X expected: 0x%08X\n", after, value);
 784                *data = 1;
 785                return 1;
 786        }
 787        /* restore previous status */
 788        ew32(STATUS, before);
 789
 790        REG_PATTERN_TEST(FCAL, 0xFFFFFFFF, 0xFFFFFFFF);
 791        REG_PATTERN_TEST(FCAH, 0x0000FFFF, 0xFFFFFFFF);
 792        REG_PATTERN_TEST(FCT, 0x0000FFFF, 0xFFFFFFFF);
 793        REG_PATTERN_TEST(VET, 0x0000FFFF, 0xFFFFFFFF);
 794
 795        REG_PATTERN_TEST(RDTR, 0x0000FFFF, 0xFFFFFFFF);
 796        REG_PATTERN_TEST(RDBAH, 0xFFFFFFFF, 0xFFFFFFFF);
 797        REG_PATTERN_TEST(RDLEN, 0x000FFF80, 0x000FFFFF);
 798        REG_PATTERN_TEST(RDH, 0x0000FFFF, 0x0000FFFF);
 799        REG_PATTERN_TEST(RDT, 0x0000FFFF, 0x0000FFFF);
 800        REG_PATTERN_TEST(FCRTH, 0x0000FFF8, 0x0000FFF8);
 801        REG_PATTERN_TEST(FCTTV, 0x0000FFFF, 0x0000FFFF);
 802        REG_PATTERN_TEST(TIPG, 0x3FFFFFFF, 0x3FFFFFFF);
 803        REG_PATTERN_TEST(TDBAH, 0xFFFFFFFF, 0xFFFFFFFF);
 804        REG_PATTERN_TEST(TDLEN, 0x000FFF80, 0x000FFFFF);
 805
 806        REG_SET_AND_CHECK(RCTL, 0xFFFFFFFF, 0x00000000);
 807
 808        before = 0x06DFB3FE;
 809        REG_SET_AND_CHECK(RCTL, before, 0x003FFFFB);
 810        REG_SET_AND_CHECK(TCTL, 0xFFFFFFFF, 0x00000000);
 811
 812        if (hw->mac_type >= e1000_82543) {
 813
 814                REG_SET_AND_CHECK(RCTL, before, 0xFFFFFFFF);
 815                REG_PATTERN_TEST(RDBAL, 0xFFFFFFF0, 0xFFFFFFFF);
 816                REG_PATTERN_TEST(TXCW, 0xC000FFFF, 0x0000FFFF);
 817                REG_PATTERN_TEST(TDBAL, 0xFFFFFFF0, 0xFFFFFFFF);
 818                REG_PATTERN_TEST(TIDV, 0x0000FFFF, 0x0000FFFF);
 819                value = E1000_RAR_ENTRIES;
 820                for (i = 0; i < value; i++) {
 821                        REG_PATTERN_TEST(RA + (((i << 1) + 1) << 2), 0x8003FFFF,
 822                                         0xFFFFFFFF);
 823                }
 824
 825        } else {
 826
 827                REG_SET_AND_CHECK(RCTL, 0xFFFFFFFF, 0x01FFFFFF);
 828                REG_PATTERN_TEST(RDBAL, 0xFFFFF000, 0xFFFFFFFF);
 829                REG_PATTERN_TEST(TXCW, 0x0000FFFF, 0x0000FFFF);
 830                REG_PATTERN_TEST(TDBAL, 0xFFFFF000, 0xFFFFFFFF);
 831
 832        }
 833
 834        value = E1000_MC_TBL_SIZE;
 835        for (i = 0; i < value; i++)
 836                REG_PATTERN_TEST(MTA + (i << 2), 0xFFFFFFFF, 0xFFFFFFFF);
 837
 838        *data = 0;
 839        return 0;
 840}
 841
 842static int e1000_eeprom_test(struct e1000_adapter *adapter, u64 *data)
 843{
 844        struct e1000_hw *hw = &adapter->hw;
 845        u16 temp;
 846        u16 checksum = 0;
 847        u16 i;
 848
 849        *data = 0;
 850        /* Read and add up the contents of the EEPROM */
 851        for (i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++) {
 852                if ((e1000_read_eeprom(hw, i, 1, &temp)) < 0) {
 853                        *data = 1;
 854                        break;
 855                }
 856                checksum += temp;
 857        }
 858
 859        /* If Checksum is not Correct return error else test passed */
 860        if ((checksum != (u16)EEPROM_SUM) && !(*data))
 861                *data = 2;
 862
 863        return *data;
 864}
 865
 866static irqreturn_t e1000_test_intr(int irq, void *data)
 867{
 868        struct net_device *netdev = (struct net_device *)data;
 869        struct e1000_adapter *adapter = netdev_priv(netdev);
 870        struct e1000_hw *hw = &adapter->hw;
 871
 872        adapter->test_icr |= er32(ICR);
 873
 874        return IRQ_HANDLED;
 875}
 876
 877static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)
 878{
 879        struct net_device *netdev = adapter->netdev;
 880        u32 mask, i = 0;
 881        bool shared_int = true;
 882        u32 irq = adapter->pdev->irq;
 883        struct e1000_hw *hw = &adapter->hw;
 884
 885        *data = 0;
 886
 887        /* NOTE: we don't test MSI interrupts here, yet */
 888        /* Hook up test interrupt handler just for this test */
 889        if (!request_irq(irq, e1000_test_intr, IRQF_PROBE_SHARED, netdev->name,
 890                         netdev))
 891                shared_int = false;
 892        else if (request_irq(irq, e1000_test_intr, IRQF_SHARED,
 893                 netdev->name, netdev)) {
 894                *data = 1;
 895                return -1;
 896        }
 897        e_info(hw, "testing %s interrupt\n", (shared_int ?
 898               "shared" : "unshared"));
 899
 900        /* Disable all the interrupts */
 901        ew32(IMC, 0xFFFFFFFF);
 902        msleep(10);
 903
 904        /* Test each interrupt */
 905        for (; i < 10; i++) {
 906
 907                /* Interrupt to test */
 908                mask = 1 << i;
 909
 910                if (!shared_int) {
 911                        /* Disable the interrupt to be reported in
 912                         * the cause register and then force the same
 913                         * interrupt and see if one gets posted.  If
 914                         * an interrupt was posted to the bus, the
 915                         * test failed.
 916                         */
 917                        adapter->test_icr = 0;
 918                        ew32(IMC, mask);
 919                        ew32(ICS, mask);
 920                        msleep(10);
 921
 922                        if (adapter->test_icr & mask) {
 923                                *data = 3;
 924                                break;
 925                        }
 926                }
 927
 928                /* Enable the interrupt to be reported in
 929                 * the cause register and then force the same
 930                 * interrupt and see if one gets posted.  If
 931                 * an interrupt was not posted to the bus, the
 932                 * test failed.
 933                 */
 934                adapter->test_icr = 0;
 935                ew32(IMS, mask);
 936                ew32(ICS, mask);
 937                msleep(10);
 938
 939                if (!(adapter->test_icr & mask)) {
 940                        *data = 4;
 941                        break;
 942                }
 943
 944                if (!shared_int) {
 945                        /* Disable the other interrupts to be reported in
 946                         * the cause register and then force the other
 947                         * interrupts and see if any get posted.  If
 948                         * an interrupt was posted to the bus, the
 949                         * test failed.
 950                         */
 951                        adapter->test_icr = 0;
 952                        ew32(IMC, ~mask & 0x00007FFF);
 953                        ew32(ICS, ~mask & 0x00007FFF);
 954                        msleep(10);
 955
 956                        if (adapter->test_icr) {
 957                                *data = 5;
 958                                break;
 959                        }
 960                }
 961        }
 962
 963        /* Disable all the interrupts */
 964        ew32(IMC, 0xFFFFFFFF);
 965        msleep(10);
 966
 967        /* Unhook test interrupt handler */
 968        free_irq(irq, netdev);
 969
 970        return *data;
 971}
 972
 973static void e1000_free_desc_rings(struct e1000_adapter *adapter)
 974{
 975        struct e1000_tx_ring *txdr = &adapter->test_tx_ring;
 976        struct e1000_rx_ring *rxdr = &adapter->test_rx_ring;
 977        struct pci_dev *pdev = adapter->pdev;
 978        int i;
 979
 980        if (txdr->desc && txdr->buffer_info) {
 981                for (i = 0; i < txdr->count; i++) {
 982                        if (txdr->buffer_info[i].dma)
 983                                dma_unmap_single(&pdev->dev,
 984                                                 txdr->buffer_info[i].dma,
 985                                                 txdr->buffer_info[i].length,
 986                                                 DMA_TO_DEVICE);
 987                        if (txdr->buffer_info[i].skb)
 988                                dev_kfree_skb(txdr->buffer_info[i].skb);
 989                }
 990        }
 991
 992        if (rxdr->desc && rxdr->buffer_info) {
 993                for (i = 0; i < rxdr->count; i++) {
 994                        if (rxdr->buffer_info[i].dma)
 995                                dma_unmap_single(&pdev->dev,
 996                                                 rxdr->buffer_info[i].dma,
 997                                                 rxdr->buffer_info[i].length,
 998                                                 DMA_FROM_DEVICE);
 999                        if (rxdr->buffer_info[i].skb)
1000                                dev_kfree_skb(rxdr->buffer_info[i].skb);
1001                }
1002        }
1003
1004        if (txdr->desc) {
1005                dma_free_coherent(&pdev->dev, txdr->size, txdr->desc,
1006                                  txdr->dma);
1007                txdr->desc = NULL;
1008        }
1009        if (rxdr->desc) {
1010                dma_free_coherent(&pdev->dev, rxdr->size, rxdr->desc,
1011                                  rxdr->dma);
1012                rxdr->desc = NULL;
1013        }
1014
1015        kfree(txdr->buffer_info);
1016        txdr->buffer_info = NULL;
1017        kfree(rxdr->buffer_info);
1018        rxdr->buffer_info = NULL;
1019}
1020
1021static int e1000_setup_desc_rings(struct e1000_adapter *adapter)
1022{
1023        struct e1000_hw *hw = &adapter->hw;
1024        struct e1000_tx_ring *txdr = &adapter->test_tx_ring;
1025        struct e1000_rx_ring *rxdr = &adapter->test_rx_ring;
1026        struct pci_dev *pdev = adapter->pdev;
1027        u32 rctl;
1028        int i, ret_val;
1029
1030        /* Setup Tx descriptor ring and Tx buffers */
1031
1032        if (!txdr->count)
1033                txdr->count = E1000_DEFAULT_TXD;
1034
1035        txdr->buffer_info = kcalloc(txdr->count, sizeof(struct e1000_buffer),
1036                                    GFP_KERNEL);
1037        if (!txdr->buffer_info) {
1038                ret_val = 1;
1039                goto err_nomem;
1040        }
1041
1042        txdr->size = txdr->count * sizeof(struct e1000_tx_desc);
1043        txdr->size = ALIGN(txdr->size, 4096);
1044        txdr->desc = dma_alloc_coherent(&pdev->dev, txdr->size, &txdr->dma,
1045                                        GFP_KERNEL);
1046        if (!txdr->desc) {
1047                ret_val = 2;
1048                goto err_nomem;
1049        }
1050        memset(txdr->desc, 0, txdr->size);
1051        txdr->next_to_use = txdr->next_to_clean = 0;
1052
1053        ew32(TDBAL, ((u64)txdr->dma & 0x00000000FFFFFFFF));
1054        ew32(TDBAH, ((u64)txdr->dma >> 32));
1055        ew32(TDLEN, txdr->count * sizeof(struct e1000_tx_desc));
1056        ew32(TDH, 0);
1057        ew32(TDT, 0);
1058        ew32(TCTL, E1000_TCTL_PSP | E1000_TCTL_EN |
1059             E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT |
1060             E1000_FDX_COLLISION_DISTANCE << E1000_COLD_SHIFT);
1061
1062        for (i = 0; i < txdr->count; i++) {
1063                struct e1000_tx_desc *tx_desc = E1000_TX_DESC(*txdr, i);
1064                struct sk_buff *skb;
1065                unsigned int size = 1024;
1066
1067                skb = alloc_skb(size, GFP_KERNEL);
1068                if (!skb) {
1069                        ret_val = 3;
1070                        goto err_nomem;
1071                }
1072                skb_put(skb, size);
1073                txdr->buffer_info[i].skb = skb;
1074                txdr->buffer_info[i].length = skb->len;
1075                txdr->buffer_info[i].dma =
1076                        dma_map_single(&pdev->dev, skb->data, skb->len,
1077                                       DMA_TO_DEVICE);
1078                tx_desc->buffer_addr = cpu_to_le64(txdr->buffer_info[i].dma);
1079                tx_desc->lower.data = cpu_to_le32(skb->len);
1080                tx_desc->lower.data |= cpu_to_le32(E1000_TXD_CMD_EOP |
1081                                                   E1000_TXD_CMD_IFCS |
1082                                                   E1000_TXD_CMD_RPS);
1083                tx_desc->upper.data = 0;
1084        }
1085
1086        /* Setup Rx descriptor ring and Rx buffers */
1087
1088        if (!rxdr->count)
1089                rxdr->count = E1000_DEFAULT_RXD;
1090
1091        rxdr->buffer_info = kcalloc(rxdr->count, sizeof(struct e1000_buffer),
1092                                    GFP_KERNEL);
1093        if (!rxdr->buffer_info) {
1094                ret_val = 4;
1095                goto err_nomem;
1096        }
1097
1098        rxdr->size = rxdr->count * sizeof(struct e1000_rx_desc);
1099        rxdr->desc = dma_alloc_coherent(&pdev->dev, rxdr->size, &rxdr->dma,
1100                                        GFP_KERNEL);
1101        if (!rxdr->desc) {
1102                ret_val = 5;
1103                goto err_nomem;
1104        }
1105        memset(rxdr->desc, 0, rxdr->size);
1106        rxdr->next_to_use = rxdr->next_to_clean = 0;
1107
1108        rctl = er32(RCTL);
1109        ew32(RCTL, rctl & ~E1000_RCTL_EN);
1110        ew32(RDBAL, ((u64)rxdr->dma & 0xFFFFFFFF));
1111        ew32(RDBAH, ((u64)rxdr->dma >> 32));
1112        ew32(RDLEN, rxdr->size);
1113        ew32(RDH, 0);
1114        ew32(RDT, 0);
1115        rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_SZ_2048 |
1116                E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF |
1117                (hw->mc_filter_type << E1000_RCTL_MO_SHIFT);
1118        ew32(RCTL, rctl);
1119
1120        for (i = 0; i < rxdr->count; i++) {
1121                struct e1000_rx_desc *rx_desc = E1000_RX_DESC(*rxdr, i);
1122                struct sk_buff *skb;
1123
1124                skb = alloc_skb(E1000_RXBUFFER_2048 + NET_IP_ALIGN, GFP_KERNEL);
1125                if (!skb) {
1126                        ret_val = 6;
1127                        goto err_nomem;
1128                }
1129                skb_reserve(skb, NET_IP_ALIGN);
1130                rxdr->buffer_info[i].skb = skb;
1131                rxdr->buffer_info[i].length = E1000_RXBUFFER_2048;
1132                rxdr->buffer_info[i].dma =
1133                        dma_map_single(&pdev->dev, skb->data,
1134                                       E1000_RXBUFFER_2048, DMA_FROM_DEVICE);
1135                rx_desc->buffer_addr = cpu_to_le64(rxdr->buffer_info[i].dma);
1136                memset(skb->data, 0x00, skb->len);
1137        }
1138
1139        return 0;
1140
1141err_nomem:
1142        e1000_free_desc_rings(adapter);
1143        return ret_val;
1144}
1145
1146static void e1000_phy_disable_receiver(struct e1000_adapter *adapter)
1147{
1148        struct e1000_hw *hw = &adapter->hw;
1149
1150        /* Write out to PHY registers 29 and 30 to disable the Receiver. */
1151        e1000_write_phy_reg(hw, 29, 0x001F);
1152        e1000_write_phy_reg(hw, 30, 0x8FFC);
1153        e1000_write_phy_reg(hw, 29, 0x001A);
1154        e1000_write_phy_reg(hw, 30, 0x8FF0);
1155}
1156
1157static void e1000_phy_reset_clk_and_crs(struct e1000_adapter *adapter)
1158{
1159        struct e1000_hw *hw = &adapter->hw;
1160        u16 phy_reg;
1161
1162        /* Because we reset the PHY above, we need to re-force TX_CLK in the
1163         * Extended PHY Specific Control Register to 25MHz clock.  This
1164         * value defaults back to a 2.5MHz clock when the PHY is reset.
1165         */
1166        e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_reg);
1167        phy_reg |= M88E1000_EPSCR_TX_CLK_25;
1168        e1000_write_phy_reg(hw,
1169                M88E1000_EXT_PHY_SPEC_CTRL, phy_reg);
1170
1171        /* In addition, because of the s/w reset above, we need to enable
1172         * CRS on TX.  This must be set for both full and half duplex
1173         * operation.
1174         */
1175        e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_reg);
1176        phy_reg |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
1177        e1000_write_phy_reg(hw,
1178                M88E1000_PHY_SPEC_CTRL, phy_reg);
1179}
1180
1181static int e1000_nonintegrated_phy_loopback(struct e1000_adapter *adapter)
1182{
1183        struct e1000_hw *hw = &adapter->hw;
1184        u32 ctrl_reg;
1185        u16 phy_reg;
1186
1187        /* Setup the Device Control Register for PHY loopback test. */
1188
1189        ctrl_reg = er32(CTRL);
1190        ctrl_reg |= (E1000_CTRL_ILOS |          /* Invert Loss-Of-Signal */
1191                     E1000_CTRL_FRCSPD |        /* Set the Force Speed Bit */
1192                     E1000_CTRL_FRCDPX |        /* Set the Force Duplex Bit */
1193                     E1000_CTRL_SPD_1000 |      /* Force Speed to 1000 */
1194                     E1000_CTRL_FD);            /* Force Duplex to FULL */
1195
1196        ew32(CTRL, ctrl_reg);
1197
1198        /* Read the PHY Specific Control Register (0x10) */
1199        e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_reg);
1200
1201        /* Clear Auto-Crossover bits in PHY Specific Control Register
1202         * (bits 6:5).
1203         */
1204        phy_reg &= ~M88E1000_PSCR_AUTO_X_MODE;
1205        e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_reg);
1206
1207        /* Perform software reset on the PHY */
1208        e1000_phy_reset(hw);
1209
1210        /* Have to setup TX_CLK and TX_CRS after software reset */
1211        e1000_phy_reset_clk_and_crs(adapter);
1212
1213        e1000_write_phy_reg(hw, PHY_CTRL, 0x8100);
1214
1215        /* Wait for reset to complete. */
1216        udelay(500);
1217
1218        /* Have to setup TX_CLK and TX_CRS after software reset */
1219        e1000_phy_reset_clk_and_crs(adapter);
1220
1221        /* Write out to PHY registers 29 and 30 to disable the Receiver. */
1222        e1000_phy_disable_receiver(adapter);
1223
1224        /* Set the loopback bit in the PHY control register. */
1225        e1000_read_phy_reg(hw, PHY_CTRL, &phy_reg);
1226        phy_reg |= MII_CR_LOOPBACK;
1227        e1000_write_phy_reg(hw, PHY_CTRL, phy_reg);
1228
1229        /* Setup TX_CLK and TX_CRS one more time. */
1230        e1000_phy_reset_clk_and_crs(adapter);
1231
1232        /* Check Phy Configuration */
1233        e1000_read_phy_reg(hw, PHY_CTRL, &phy_reg);
1234        if (phy_reg != 0x4100)
1235                 return 9;
1236
1237        e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_reg);
1238        if (phy_reg != 0x0070)
1239                return 10;
1240
1241        e1000_read_phy_reg(hw, 29, &phy_reg);
1242        if (phy_reg != 0x001A)
1243                return 11;
1244
1245        return 0;
1246}
1247
1248static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
1249{
1250        struct e1000_hw *hw = &adapter->hw;
1251        u32 ctrl_reg = 0;
1252        u32 stat_reg = 0;
1253
1254        hw->autoneg = false;
1255
1256        if (hw->phy_type == e1000_phy_m88) {
1257                /* Auto-MDI/MDIX Off */
1258                e1000_write_phy_reg(hw,
1259                                    M88E1000_PHY_SPEC_CTRL, 0x0808);
1260                /* reset to update Auto-MDI/MDIX */
1261                e1000_write_phy_reg(hw, PHY_CTRL, 0x9140);
1262                /* autoneg off */
1263                e1000_write_phy_reg(hw, PHY_CTRL, 0x8140);
1264        }
1265
1266        ctrl_reg = er32(CTRL);
1267
1268        /* force 1000, set loopback */
1269        e1000_write_phy_reg(hw, PHY_CTRL, 0x4140);
1270
1271        /* Now set up the MAC to the same speed/duplex as the PHY. */
1272        ctrl_reg = er32(CTRL);
1273        ctrl_reg &= ~E1000_CTRL_SPD_SEL; /* Clear the speed sel bits */
1274        ctrl_reg |= (E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
1275                        E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
1276                        E1000_CTRL_SPD_1000 |/* Force Speed to 1000 */
1277                        E1000_CTRL_FD);  /* Force Duplex to FULL */
1278
1279        if (hw->media_type == e1000_media_type_copper &&
1280           hw->phy_type == e1000_phy_m88)
1281                ctrl_reg |= E1000_CTRL_ILOS; /* Invert Loss of Signal */
1282        else {
1283                /* Set the ILOS bit on the fiber Nic is half
1284                 * duplex link is detected. */
1285                stat_reg = er32(STATUS);
1286                if ((stat_reg & E1000_STATUS_FD) == 0)
1287                        ctrl_reg |= (E1000_CTRL_ILOS | E1000_CTRL_SLU);
1288        }
1289
1290        ew32(CTRL, ctrl_reg);
1291
1292        /* Disable the receiver on the PHY so when a cable is plugged in, the
1293         * PHY does not begin to autoneg when a cable is reconnected to the NIC.
1294         */
1295        if (hw->phy_type == e1000_phy_m88)
1296                e1000_phy_disable_receiver(adapter);
1297
1298        udelay(500);
1299
1300        return 0;
1301}
1302
1303static int e1000_set_phy_loopback(struct e1000_adapter *adapter)
1304{
1305        struct e1000_hw *hw = &adapter->hw;
1306        u16 phy_reg = 0;
1307        u16 count = 0;
1308
1309        switch (hw->mac_type) {
1310        case e1000_82543:
1311                if (hw->media_type == e1000_media_type_copper) {
1312                        /* Attempt to setup Loopback mode on Non-integrated PHY.
1313                         * Some PHY registers get corrupted at random, so
1314                         * attempt this 10 times.
1315                         */
1316                        while (e1000_nonintegrated_phy_loopback(adapter) &&
1317                              count++ < 10);
1318                        if (count < 11)
1319                                return 0;
1320                }
1321                break;
1322
1323        case e1000_82544:
1324        case e1000_82540:
1325        case e1000_82545:
1326        case e1000_82545_rev_3:
1327        case e1000_82546:
1328        case e1000_82546_rev_3:
1329        case e1000_82541:
1330        case e1000_82541_rev_2:
1331        case e1000_82547:
1332        case e1000_82547_rev_2:
1333                return e1000_integrated_phy_loopback(adapter);
1334                break;
1335        default:
1336                /* Default PHY loopback work is to read the MII
1337                 * control register and assert bit 14 (loopback mode).
1338                 */
1339                e1000_read_phy_reg(hw, PHY_CTRL, &phy_reg);
1340                phy_reg |= MII_CR_LOOPBACK;
1341                e1000_write_phy_reg(hw, PHY_CTRL, phy_reg);
1342                return 0;
1343                break;
1344        }
1345
1346        return 8;
1347}
1348
1349static int e1000_setup_loopback_test(struct e1000_adapter *adapter)
1350{
1351        struct e1000_hw *hw = &adapter->hw;
1352        u32 rctl;
1353
1354        if (hw->media_type == e1000_media_type_fiber ||
1355            hw->media_type == e1000_media_type_internal_serdes) {
1356                switch (hw->mac_type) {
1357                case e1000_82545:
1358                case e1000_82546:
1359                case e1000_82545_rev_3:
1360                case e1000_82546_rev_3:
1361                        return e1000_set_phy_loopback(adapter);
1362                        break;
1363                default:
1364                        rctl = er32(RCTL);
1365                        rctl |= E1000_RCTL_LBM_TCVR;
1366                        ew32(RCTL, rctl);
1367                        return 0;
1368                }
1369        } else if (hw->media_type == e1000_media_type_copper)
1370                return e1000_set_phy_loopback(adapter);
1371
1372        return 7;
1373}
1374
1375static void e1000_loopback_cleanup(struct e1000_adapter *adapter)
1376{
1377        struct e1000_hw *hw = &adapter->hw;
1378        u32 rctl;
1379        u16 phy_reg;
1380
1381        rctl = er32(RCTL);
1382        rctl &= ~(E1000_RCTL_LBM_TCVR | E1000_RCTL_LBM_MAC);
1383        ew32(RCTL, rctl);
1384
1385        switch (hw->mac_type) {
1386        case e1000_82545:
1387        case e1000_82546:
1388        case e1000_82545_rev_3:
1389        case e1000_82546_rev_3:
1390        default:
1391                hw->autoneg = true;
1392                e1000_read_phy_reg(hw, PHY_CTRL, &phy_reg);
1393                if (phy_reg & MII_CR_LOOPBACK) {
1394                        phy_reg &= ~MII_CR_LOOPBACK;
1395                        e1000_write_phy_reg(hw, PHY_CTRL, phy_reg);
1396                        e1000_phy_reset(hw);
1397                }
1398                break;
1399        }
1400}
1401
1402static void e1000_create_lbtest_frame(struct sk_buff *skb,
1403                                      unsigned int frame_size)
1404{
1405        memset(skb->data, 0xFF, frame_size);
1406        frame_size &= ~1;
1407        memset(&skb->data[frame_size / 2], 0xAA, frame_size / 2 - 1);
1408        memset(&skb->data[frame_size / 2 + 10], 0xBE, 1);
1409        memset(&skb->data[frame_size / 2 + 12], 0xAF, 1);
1410}
1411
1412static int e1000_check_lbtest_frame(struct sk_buff *skb,
1413                                    unsigned int frame_size)
1414{
1415        frame_size &= ~1;
1416        if (*(skb->data + 3) == 0xFF) {
1417                if ((*(skb->data + frame_size / 2 + 10) == 0xBE) &&
1418                   (*(skb->data + frame_size / 2 + 12) == 0xAF)) {
1419                        return 0;
1420                }
1421        }
1422        return 13;
1423}
1424
1425static int e1000_run_loopback_test(struct e1000_adapter *adapter)
1426{
1427        struct e1000_hw *hw = &adapter->hw;
1428        struct e1000_tx_ring *txdr = &adapter->test_tx_ring;
1429        struct e1000_rx_ring *rxdr = &adapter->test_rx_ring;
1430        struct pci_dev *pdev = adapter->pdev;
1431        int i, j, k, l, lc, good_cnt, ret_val=0;
1432        unsigned long time;
1433
1434        ew32(RDT, rxdr->count - 1);
1435
1436        /* Calculate the loop count based on the largest descriptor ring
1437         * The idea is to wrap the largest ring a number of times using 64
1438         * send/receive pairs during each loop
1439         */
1440
1441        if (rxdr->count <= txdr->count)
1442                lc = ((txdr->count / 64) * 2) + 1;
1443        else
1444                lc = ((rxdr->count / 64) * 2) + 1;
1445
1446        k = l = 0;
1447        for (j = 0; j <= lc; j++) { /* loop count loop */
1448                for (i = 0; i < 64; i++) { /* send the packets */
1449                        e1000_create_lbtest_frame(txdr->buffer_info[i].skb,
1450                                        1024);
1451                        dma_sync_single_for_device(&pdev->dev,
1452                                                   txdr->buffer_info[k].dma,
1453                                                   txdr->buffer_info[k].length,
1454                                                   DMA_TO_DEVICE);
1455                        if (unlikely(++k == txdr->count)) k = 0;
1456                }
1457                ew32(TDT, k);
1458                msleep(200);
1459                time = jiffies; /* set the start time for the receive */
1460                good_cnt = 0;
1461                do { /* receive the sent packets */
1462                        dma_sync_single_for_cpu(&pdev->dev,
1463                                                rxdr->buffer_info[l].dma,
1464                                                rxdr->buffer_info[l].length,
1465                                                DMA_FROM_DEVICE);
1466
1467                        ret_val = e1000_check_lbtest_frame(
1468                                        rxdr->buffer_info[l].skb,
1469                                        1024);
1470                        if (!ret_val)
1471                                good_cnt++;
1472                        if (unlikely(++l == rxdr->count)) l = 0;
1473                        /* time + 20 msecs (200 msecs on 2.4) is more than
1474                         * enough time to complete the receives, if it's
1475                         * exceeded, break and error off
1476                         */
1477                } while (good_cnt < 64 && jiffies < (time + 20));
1478                if (good_cnt != 64) {
1479                        ret_val = 13; /* ret_val is the same as mis-compare */
1480                        break;
1481                }
1482                if (jiffies >= (time + 2)) {
1483                        ret_val = 14; /* error code for time out error */
1484                        break;
1485                }
1486        } /* end loop count loop */
1487        return ret_val;
1488}
1489
1490static int e1000_loopback_test(struct e1000_adapter *adapter, u64 *data)
1491{
1492        *data = e1000_setup_desc_rings(adapter);
1493        if (*data)
1494                goto out;
1495        *data = e1000_setup_loopback_test(adapter);
1496        if (*data)
1497                goto err_loopback;
1498        *data = e1000_run_loopback_test(adapter);
1499        e1000_loopback_cleanup(adapter);
1500
1501err_loopback:
1502        e1000_free_desc_rings(adapter);
1503out:
1504        return *data;
1505}
1506
1507static int e1000_link_test(struct e1000_adapter *adapter, u64 *data)
1508{
1509        struct e1000_hw *hw = &adapter->hw;
1510        *data = 0;
1511        if (hw->media_type == e1000_media_type_internal_serdes) {
1512                int i = 0;
1513                hw->serdes_has_link = false;
1514
1515                /* On some blade server designs, link establishment
1516                 * could take as long as 2-3 minutes */
1517                do {
1518                        e1000_check_for_link(hw);
1519                        if (hw->serdes_has_link)
1520                                return *data;
1521                        msleep(20);
1522                } while (i++ < 3750);
1523
1524                *data = 1;
1525        } else {
1526                e1000_check_for_link(hw);
1527                if (hw->autoneg)  /* if auto_neg is set wait for it */
1528                        msleep(4000);
1529
1530                if (!(er32(STATUS) & E1000_STATUS_LU)) {
1531                        *data = 1;
1532                }
1533        }
1534        return *data;
1535}
1536
1537static int e1000_get_sset_count(struct net_device *netdev, int sset)
1538{
1539        switch (sset) {
1540        case ETH_SS_TEST:
1541                return E1000_TEST_LEN;
1542        case ETH_SS_STATS:
1543                return E1000_STATS_LEN;
1544        default:
1545                return -EOPNOTSUPP;
1546        }
1547}
1548
1549static void e1000_diag_test(struct net_device *netdev,
1550                            struct ethtool_test *eth_test, u64 *data)
1551{
1552        struct e1000_adapter *adapter = netdev_priv(netdev);
1553        struct e1000_hw *hw = &adapter->hw;
1554        bool if_running = netif_running(netdev);
1555
1556        set_bit(__E1000_TESTING, &adapter->flags);
1557        if (eth_test->flags == ETH_TEST_FL_OFFLINE) {
1558                /* Offline tests */
1559
1560                /* save speed, duplex, autoneg settings */
1561                u16 autoneg_advertised = hw->autoneg_advertised;
1562                u8 forced_speed_duplex = hw->forced_speed_duplex;
1563                u8 autoneg = hw->autoneg;
1564
1565                e_info(hw, "offline testing starting\n");
1566
1567                /* Link test performed before hardware reset so autoneg doesn't
1568                 * interfere with test result */
1569                if (e1000_link_test(adapter, &data[4]))
1570                        eth_test->flags |= ETH_TEST_FL_FAILED;
1571
1572                if (if_running)
1573                        /* indicate we're in test mode */
1574                        dev_close(netdev);
1575                else
1576                        e1000_reset(adapter);
1577
1578                if (e1000_reg_test(adapter, &data[0]))
1579                        eth_test->flags |= ETH_TEST_FL_FAILED;
1580
1581                e1000_reset(adapter);
1582                if (e1000_eeprom_test(adapter, &data[1]))
1583                        eth_test->flags |= ETH_TEST_FL_FAILED;
1584
1585                e1000_reset(adapter);
1586                if (e1000_intr_test(adapter, &data[2]))
1587                        eth_test->flags |= ETH_TEST_FL_FAILED;
1588
1589                e1000_reset(adapter);
1590                /* make sure the phy is powered up */
1591                e1000_power_up_phy(adapter);
1592                if (e1000_loopback_test(adapter, &data[3]))
1593                        eth_test->flags |= ETH_TEST_FL_FAILED;
1594
1595                /* restore speed, duplex, autoneg settings */
1596                hw->autoneg_advertised = autoneg_advertised;
1597                hw->forced_speed_duplex = forced_speed_duplex;
1598                hw->autoneg = autoneg;
1599
1600                e1000_reset(adapter);
1601                clear_bit(__E1000_TESTING, &adapter->flags);
1602                if (if_running)
1603                        dev_open(netdev);
1604        } else {
1605                e_info(hw, "online testing starting\n");
1606                /* Online tests */
1607                if (e1000_link_test(adapter, &data[4]))
1608                        eth_test->flags |= ETH_TEST_FL_FAILED;
1609
1610                /* Online tests aren't run; pass by default */
1611                data[0] = 0;
1612                data[1] = 0;
1613                data[2] = 0;
1614                data[3] = 0;
1615
1616                clear_bit(__E1000_TESTING, &adapter->flags);
1617        }
1618        msleep_interruptible(4 * 1000);
1619}
1620
1621static int e1000_wol_exclusion(struct e1000_adapter *adapter,
1622                               struct ethtool_wolinfo *wol)
1623{
1624        struct e1000_hw *hw = &adapter->hw;
1625        int retval = 1; /* fail by default */
1626
1627        switch (hw->device_id) {
1628        case E1000_DEV_ID_82542:
1629        case E1000_DEV_ID_82543GC_FIBER:
1630        case E1000_DEV_ID_82543GC_COPPER:
1631        case E1000_DEV_ID_82544EI_FIBER:
1632        case E1000_DEV_ID_82546EB_QUAD_COPPER:
1633        case E1000_DEV_ID_82545EM_FIBER:
1634        case E1000_DEV_ID_82545EM_COPPER:
1635        case E1000_DEV_ID_82546GB_QUAD_COPPER:
1636        case E1000_DEV_ID_82546GB_PCIE:
1637                /* these don't support WoL at all */
1638                wol->supported = 0;
1639                break;
1640        case E1000_DEV_ID_82546EB_FIBER:
1641        case E1000_DEV_ID_82546GB_FIBER:
1642                /* Wake events not supported on port B */
1643                if (er32(STATUS) & E1000_STATUS_FUNC_1) {
1644                        wol->supported = 0;
1645                        break;
1646                }
1647                /* return success for non excluded adapter ports */
1648                retval = 0;
1649                break;
1650        case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
1651                /* quad port adapters only support WoL on port A */
1652                if (!adapter->quad_port_a) {
1653                        wol->supported = 0;
1654                        break;
1655                }
1656                /* return success for non excluded adapter ports */
1657                retval = 0;
1658                break;
1659        default:
1660                /* dual port cards only support WoL on port A from now on
1661                 * unless it was enabled in the eeprom for port B
1662                 * so exclude FUNC_1 ports from having WoL enabled */
1663                if (er32(STATUS) & E1000_STATUS_FUNC_1 &&
1664                    !adapter->eeprom_wol) {
1665                        wol->supported = 0;
1666                        break;
1667                }
1668
1669                retval = 0;
1670        }
1671
1672        return retval;
1673}
1674
1675static void e1000_get_wol(struct net_device *netdev,
1676                          struct ethtool_wolinfo *wol)
1677{
1678        struct e1000_adapter *adapter = netdev_priv(netdev);
1679        struct e1000_hw *hw = &adapter->hw;
1680
1681        wol->supported = WAKE_UCAST | WAKE_MCAST |
1682                         WAKE_BCAST | WAKE_MAGIC;
1683        wol->wolopts = 0;
1684
1685        /* this function will set ->supported = 0 and return 1 if wol is not
1686         * supported by this hardware */
1687        if (e1000_wol_exclusion(adapter, wol) ||
1688            !device_can_wakeup(&adapter->pdev->dev))
1689                return;
1690
1691        /* apply any specific unsupported masks here */
1692        switch (hw->device_id) {
1693        case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
1694                /* KSP3 does not suppport UCAST wake-ups */
1695                wol->supported &= ~WAKE_UCAST;
1696
1697                if (adapter->wol & E1000_WUFC_EX)
1698                        e_err(drv, "Interface does not support directed "
1699                              "(unicast) frame wake-up packets\n");
1700                break;
1701        default:
1702                break;
1703        }
1704
1705        if (adapter->wol & E1000_WUFC_EX)
1706                wol->wolopts |= WAKE_UCAST;
1707        if (adapter->wol & E1000_WUFC_MC)
1708                wol->wolopts |= WAKE_MCAST;
1709        if (adapter->wol & E1000_WUFC_BC)
1710                wol->wolopts |= WAKE_BCAST;
1711        if (adapter->wol & E1000_WUFC_MAG)
1712                wol->wolopts |= WAKE_MAGIC;
1713}
1714
1715static int e1000_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
1716{
1717        struct e1000_adapter *adapter = netdev_priv(netdev);
1718        struct e1000_hw *hw = &adapter->hw;
1719
1720        if (wol->wolopts & (WAKE_PHY | WAKE_ARP | WAKE_MAGICSECURE))
1721                return -EOPNOTSUPP;
1722
1723        if (e1000_wol_exclusion(adapter, wol) ||
1724            !device_can_wakeup(&adapter->pdev->dev))
1725                return wol->wolopts ? -EOPNOTSUPP : 0;
1726
1727        switch (hw->device_id) {
1728        case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
1729                if (wol->wolopts & WAKE_UCAST) {
1730                        e_err(drv, "Interface does not support directed "
1731                              "(unicast) frame wake-up packets\n");
1732                        return -EOPNOTSUPP;
1733                }
1734                break;
1735        default:
1736                break;
1737        }
1738
1739        /* these settings will always override what we currently have */
1740        adapter->wol = 0;
1741
1742        if (wol->wolopts & WAKE_UCAST)
1743                adapter->wol |= E1000_WUFC_EX;
1744        if (wol->wolopts & WAKE_MCAST)
1745                adapter->wol |= E1000_WUFC_MC;
1746        if (wol->wolopts & WAKE_BCAST)
1747                adapter->wol |= E1000_WUFC_BC;
1748        if (wol->wolopts & WAKE_MAGIC)
1749                adapter->wol |= E1000_WUFC_MAG;
1750
1751        device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol);
1752
1753        return 0;
1754}
1755
1756/* toggle LED 4 times per second = 2 "blinks" per second */
1757#define E1000_ID_INTERVAL       (HZ/4)
1758
1759/* bit defines for adapter->led_status */
1760#define E1000_LED_ON            0
1761
1762static void e1000_led_blink_callback(unsigned long data)
1763{
1764        struct e1000_adapter *adapter = (struct e1000_adapter *) data;
1765        struct e1000_hw *hw = &adapter->hw;
1766
1767        if (test_and_change_bit(E1000_LED_ON, &adapter->led_status))
1768                e1000_led_off(hw);
1769        else
1770                e1000_led_on(hw);
1771
1772        mod_timer(&adapter->blink_timer, jiffies + E1000_ID_INTERVAL);
1773}
1774
1775static int e1000_phys_id(struct net_device *netdev, u32 data)
1776{
1777        struct e1000_adapter *adapter = netdev_priv(netdev);
1778        struct e1000_hw *hw = &adapter->hw;
1779
1780        if (!data)
1781                data = INT_MAX;
1782
1783        if (!adapter->blink_timer.function) {
1784                init_timer(&adapter->blink_timer);
1785                adapter->blink_timer.function = e1000_led_blink_callback;
1786                adapter->blink_timer.data = (unsigned long)adapter;
1787        }
1788        e1000_setup_led(hw);
1789        mod_timer(&adapter->blink_timer, jiffies);
1790        msleep_interruptible(data * 1000);
1791        del_timer_sync(&adapter->blink_timer);
1792
1793        e1000_led_off(hw);
1794        clear_bit(E1000_LED_ON, &adapter->led_status);
1795        e1000_cleanup_led(hw);
1796
1797        return 0;
1798}
1799
1800static int e1000_get_coalesce(struct net_device *netdev,
1801                              struct ethtool_coalesce *ec)
1802{
1803        struct e1000_adapter *adapter = netdev_priv(netdev);
1804
1805        if (adapter->hw.mac_type < e1000_82545)
1806                return -EOPNOTSUPP;
1807
1808        if (adapter->itr_setting <= 4)
1809                ec->rx_coalesce_usecs = adapter->itr_setting;
1810        else
1811                ec->rx_coalesce_usecs = 1000000 / adapter->itr_setting;
1812
1813        return 0;
1814}
1815
1816static int e1000_set_coalesce(struct net_device *netdev,
1817                              struct ethtool_coalesce *ec)
1818{
1819        struct e1000_adapter *adapter = netdev_priv(netdev);
1820        struct e1000_hw *hw = &adapter->hw;
1821
1822        if (hw->mac_type < e1000_82545)
1823                return -EOPNOTSUPP;
1824
1825        if ((ec->rx_coalesce_usecs > E1000_MAX_ITR_USECS) ||
1826            ((ec->rx_coalesce_usecs > 4) &&
1827             (ec->rx_coalesce_usecs < E1000_MIN_ITR_USECS)) ||
1828            (ec->rx_coalesce_usecs == 2))
1829                return -EINVAL;
1830
1831        if (ec->rx_coalesce_usecs == 4) {
1832                adapter->itr = adapter->itr_setting = 4;
1833        } else if (ec->rx_coalesce_usecs <= 3) {
1834                adapter->itr = 20000;
1835                adapter->itr_setting = ec->rx_coalesce_usecs;
1836        } else {
1837                adapter->itr = (1000000 / ec->rx_coalesce_usecs);
1838                adapter->itr_setting = adapter->itr & ~3;
1839        }
1840
1841        if (adapter->itr_setting != 0)
1842                ew32(ITR, 1000000000 / (adapter->itr * 256));
1843        else
1844                ew32(ITR, 0);
1845
1846        return 0;
1847}
1848
1849static int e1000_nway_reset(struct net_device *netdev)
1850{
1851        struct e1000_adapter *adapter = netdev_priv(netdev);
1852        if (netif_running(netdev))
1853                e1000_reinit_locked(adapter);
1854        return 0;
1855}
1856
1857static void e1000_get_ethtool_stats(struct net_device *netdev,
1858                                    struct ethtool_stats *stats, u64 *data)
1859{
1860        struct e1000_adapter *adapter = netdev_priv(netdev);
1861        int i;
1862        char *p = NULL;
1863
1864        e1000_update_stats(adapter);
1865        for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
1866                switch (e1000_gstrings_stats[i].type) {
1867                case NETDEV_STATS:
1868                        p = (char *) netdev +
1869                                        e1000_gstrings_stats[i].stat_offset;
1870                        break;
1871                case E1000_STATS:
1872                        p = (char *) adapter +
1873                                        e1000_gstrings_stats[i].stat_offset;
1874                        break;
1875                }
1876
1877                data[i] = (e1000_gstrings_stats[i].sizeof_stat ==
1878                        sizeof(u64)) ? *(u64 *)p : *(u32 *)p;
1879        }
1880/*      BUG_ON(i != E1000_STATS_LEN); */
1881}
1882
1883static void e1000_get_strings(struct net_device *netdev, u32 stringset,
1884                              u8 *data)
1885{
1886        u8 *p = data;
1887        int i;
1888
1889        switch (stringset) {
1890        case ETH_SS_TEST:
1891                memcpy(data, *e1000_gstrings_test,
1892                        sizeof(e1000_gstrings_test));
1893                break;
1894        case ETH_SS_STATS:
1895                for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
1896                        memcpy(p, e1000_gstrings_stats[i].stat_string,
1897                               ETH_GSTRING_LEN);
1898                        p += ETH_GSTRING_LEN;
1899                }
1900/*              BUG_ON(p - data != E1000_STATS_LEN * ETH_GSTRING_LEN); */
1901                break;
1902        }
1903}
1904
1905static const struct ethtool_ops e1000_ethtool_ops = {
1906        .get_settings           = e1000_get_settings,
1907        .set_settings           = e1000_set_settings,
1908        .get_drvinfo            = e1000_get_drvinfo,
1909        .get_regs_len           = e1000_get_regs_len,
1910        .get_regs               = e1000_get_regs,
1911        .get_wol                = e1000_get_wol,
1912        .set_wol                = e1000_set_wol,
1913        .get_msglevel           = e1000_get_msglevel,
1914        .set_msglevel           = e1000_set_msglevel,
1915        .nway_reset             = e1000_nway_reset,
1916        .get_link               = e1000_get_link,
1917        .get_eeprom_len         = e1000_get_eeprom_len,
1918        .get_eeprom             = e1000_get_eeprom,
1919        .set_eeprom             = e1000_set_eeprom,
1920        .get_ringparam          = e1000_get_ringparam,
1921        .set_ringparam          = e1000_set_ringparam,
1922        .get_pauseparam         = e1000_get_pauseparam,
1923        .set_pauseparam         = e1000_set_pauseparam,
1924        .get_rx_csum            = e1000_get_rx_csum,
1925        .set_rx_csum            = e1000_set_rx_csum,
1926        .get_tx_csum            = e1000_get_tx_csum,
1927        .set_tx_csum            = e1000_set_tx_csum,
1928        .set_sg                 = ethtool_op_set_sg,
1929        .set_tso                = e1000_set_tso,
1930        .self_test              = e1000_diag_test,
1931        .get_strings            = e1000_get_strings,
1932        .phys_id                = e1000_phys_id,
1933        .get_ethtool_stats      = e1000_get_ethtool_stats,
1934        .get_sset_count         = e1000_get_sset_count,
1935        .get_coalesce           = e1000_get_coalesce,
1936        .set_coalesce           = e1000_set_coalesce,
1937};
1938
1939void e1000_set_ethtool_ops(struct net_device *netdev)
1940{
1941        SET_ETHTOOL_OPS(netdev, &e1000_ethtool_ops);
1942}
1943