linux/drivers/net/ixgb/ixgb_hw.c
<<
>>
Prefs
   1/*******************************************************************************
   2
   3  Intel PRO/10GbE 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/* ixgb_hw.c
  30 * Shared functions for accessing and configuring the adapter
  31 */
  32
  33#include "ixgb_hw.h"
  34#include "ixgb_ids.h"
  35
  36/*  Local function prototypes */
  37
  38static uint32_t ixgb_hash_mc_addr(struct ixgb_hw *hw, uint8_t * mc_addr);
  39
  40static void ixgb_mta_set(struct ixgb_hw *hw, uint32_t hash_value);
  41
  42static void ixgb_get_bus_info(struct ixgb_hw *hw);
  43
  44static boolean_t ixgb_link_reset(struct ixgb_hw *hw);
  45
  46static void ixgb_optics_reset(struct ixgb_hw *hw);
  47
  48static ixgb_phy_type ixgb_identify_phy(struct ixgb_hw *hw);
  49
  50static void ixgb_clear_hw_cntrs(struct ixgb_hw *hw);
  51
  52static void ixgb_clear_vfta(struct ixgb_hw *hw);
  53
  54static void ixgb_init_rx_addrs(struct ixgb_hw *hw);
  55
  56static uint16_t ixgb_read_phy_reg(struct ixgb_hw *hw,
  57                                  uint32_t reg_address,
  58                                  uint32_t phy_address,
  59                                  uint32_t device_type);
  60
  61static boolean_t ixgb_setup_fc(struct ixgb_hw *hw);
  62
  63static boolean_t mac_addr_valid(uint8_t *mac_addr);
  64
  65static uint32_t ixgb_mac_reset(struct ixgb_hw *hw)
  66{
  67        uint32_t ctrl_reg;
  68
  69        ctrl_reg =  IXGB_CTRL0_RST |
  70                                IXGB_CTRL0_SDP3_DIR |   /* All pins are Output=1 */
  71                                IXGB_CTRL0_SDP2_DIR |
  72                                IXGB_CTRL0_SDP1_DIR |
  73                                IXGB_CTRL0_SDP0_DIR |
  74                                IXGB_CTRL0_SDP3  |   /* Initial value 1101   */
  75                                IXGB_CTRL0_SDP2  |
  76                                IXGB_CTRL0_SDP0;
  77
  78#ifdef HP_ZX1
  79        /* Workaround for 82597EX reset errata */
  80        IXGB_WRITE_REG_IO(hw, CTRL0, ctrl_reg);
  81#else
  82        IXGB_WRITE_REG(hw, CTRL0, ctrl_reg);
  83#endif
  84
  85        /* Delay a few ms just to allow the reset to complete */
  86        msleep(IXGB_DELAY_AFTER_RESET);
  87        ctrl_reg = IXGB_READ_REG(hw, CTRL0);
  88#ifdef DBG
  89        /* Make sure the self-clearing global reset bit did self clear */
  90        ASSERT(!(ctrl_reg & IXGB_CTRL0_RST));
  91#endif
  92
  93        if (hw->phy_type == ixgb_phy_type_txn17401) {
  94                ixgb_optics_reset(hw);
  95        }
  96
  97        return ctrl_reg;
  98}
  99
 100/******************************************************************************
 101 * Reset the transmit and receive units; mask and clear all interrupts.
 102 *
 103 * hw - Struct containing variables accessed by shared code
 104 *****************************************************************************/
 105boolean_t
 106ixgb_adapter_stop(struct ixgb_hw *hw)
 107{
 108        uint32_t ctrl_reg;
 109        uint32_t icr_reg;
 110
 111        DEBUGFUNC("ixgb_adapter_stop");
 112
 113        /* If we are stopped or resetting exit gracefully and wait to be
 114         * started again before accessing the hardware.
 115         */
 116        if(hw->adapter_stopped) {
 117                DEBUGOUT("Exiting because the adapter is already stopped!!!\n");
 118                return FALSE;
 119        }
 120
 121        /* Set the Adapter Stopped flag so other driver functions stop
 122         * touching the Hardware.
 123         */
 124        hw->adapter_stopped = TRUE;
 125
 126        /* Clear interrupt mask to stop board from generating interrupts */
 127        DEBUGOUT("Masking off all interrupts\n");
 128        IXGB_WRITE_REG(hw, IMC, 0xFFFFFFFF);
 129
 130        /* Disable the Transmit and Receive units.  Then delay to allow
 131         * any pending transactions to complete before we hit the MAC with
 132         * the global reset.
 133         */
 134        IXGB_WRITE_REG(hw, RCTL, IXGB_READ_REG(hw, RCTL) & ~IXGB_RCTL_RXEN);
 135        IXGB_WRITE_REG(hw, TCTL, IXGB_READ_REG(hw, TCTL) & ~IXGB_TCTL_TXEN);
 136        msleep(IXGB_DELAY_BEFORE_RESET);
 137
 138        /* Issue a global reset to the MAC.  This will reset the chip's
 139         * transmit, receive, DMA, and link units.  It will not effect
 140         * the current PCI configuration.  The global reset bit is self-
 141         * clearing, and should clear within a microsecond.
 142         */
 143        DEBUGOUT("Issuing a global reset to MAC\n");
 144
 145        ctrl_reg = ixgb_mac_reset(hw);
 146
 147        /* Clear interrupt mask to stop board from generating interrupts */
 148        DEBUGOUT("Masking off all interrupts\n");
 149        IXGB_WRITE_REG(hw, IMC, 0xffffffff);
 150
 151        /* Clear any pending interrupt events. */
 152        icr_reg = IXGB_READ_REG(hw, ICR);
 153
 154        return (ctrl_reg & IXGB_CTRL0_RST);
 155}
 156
 157
 158/******************************************************************************
 159 * Identifies the vendor of the optics module on the adapter.  The SR adapters
 160 * support two different types of XPAK optics, so it is necessary to determine
 161 * which optics are present before applying any optics-specific workarounds.
 162 *
 163 * hw - Struct containing variables accessed by shared code.
 164 *
 165 * Returns: the vendor of the XPAK optics module.
 166 *****************************************************************************/
 167static ixgb_xpak_vendor
 168ixgb_identify_xpak_vendor(struct ixgb_hw *hw)
 169{
 170        uint32_t i;
 171        uint16_t vendor_name[5];
 172        ixgb_xpak_vendor xpak_vendor;
 173
 174        DEBUGFUNC("ixgb_identify_xpak_vendor");
 175
 176        /* Read the first few bytes of the vendor string from the XPAK NVR
 177         * registers.  These are standard XENPAK/XPAK registers, so all XPAK
 178         * devices should implement them. */
 179        for (i = 0; i < 5; i++) {
 180                vendor_name[i] = ixgb_read_phy_reg(hw,
 181                                                   MDIO_PMA_PMD_XPAK_VENDOR_NAME
 182                                                   + i, IXGB_PHY_ADDRESS,
 183                                                   MDIO_PMA_PMD_DID);
 184        }
 185
 186        /* Determine the actual vendor */
 187        if (vendor_name[0] == 'I' &&
 188            vendor_name[1] == 'N' &&
 189            vendor_name[2] == 'T' &&
 190            vendor_name[3] == 'E' && vendor_name[4] == 'L') {
 191                xpak_vendor = ixgb_xpak_vendor_intel;
 192        } else {
 193                xpak_vendor = ixgb_xpak_vendor_infineon;
 194        }
 195
 196        return (xpak_vendor);
 197}
 198
 199/******************************************************************************
 200 * Determine the physical layer module on the adapter.
 201 *
 202 * hw - Struct containing variables accessed by shared code.  The device_id
 203 *      field must be (correctly) populated before calling this routine.
 204 *
 205 * Returns: the phy type of the adapter.
 206 *****************************************************************************/
 207static ixgb_phy_type
 208ixgb_identify_phy(struct ixgb_hw *hw)
 209{
 210        ixgb_phy_type phy_type;
 211        ixgb_xpak_vendor xpak_vendor;
 212
 213        DEBUGFUNC("ixgb_identify_phy");
 214
 215        /* Infer the transceiver/phy type from the device id */
 216        switch (hw->device_id) {
 217        case IXGB_DEVICE_ID_82597EX:
 218                DEBUGOUT("Identified TXN17401 optics\n");
 219                phy_type = ixgb_phy_type_txn17401;
 220                break;
 221
 222        case IXGB_DEVICE_ID_82597EX_SR:
 223                /* The SR adapters carry two different types of XPAK optics
 224                 * modules; read the vendor identifier to determine the exact
 225                 * type of optics. */
 226                xpak_vendor = ixgb_identify_xpak_vendor(hw);
 227                if (xpak_vendor == ixgb_xpak_vendor_intel) {
 228                        DEBUGOUT("Identified TXN17201 optics\n");
 229                        phy_type = ixgb_phy_type_txn17201;
 230                } else {
 231                        DEBUGOUT("Identified G6005 optics\n");
 232                        phy_type = ixgb_phy_type_g6005;
 233                }
 234                break;
 235        case IXGB_DEVICE_ID_82597EX_LR:
 236                DEBUGOUT("Identified G6104 optics\n");
 237                phy_type = ixgb_phy_type_g6104;
 238                break;
 239        case IXGB_DEVICE_ID_82597EX_CX4:
 240                DEBUGOUT("Identified CX4\n");
 241                xpak_vendor = ixgb_identify_xpak_vendor(hw);
 242                if (xpak_vendor == ixgb_xpak_vendor_intel) {
 243                        DEBUGOUT("Identified TXN17201 optics\n");
 244                        phy_type = ixgb_phy_type_txn17201;
 245                } else {
 246                        DEBUGOUT("Identified G6005 optics\n");
 247                        phy_type = ixgb_phy_type_g6005;
 248                }
 249                break;
 250        default:
 251                DEBUGOUT("Unknown physical layer module\n");
 252                phy_type = ixgb_phy_type_unknown;
 253                break;
 254        }
 255
 256        return (phy_type);
 257}
 258
 259/******************************************************************************
 260 * Performs basic configuration of the adapter.
 261 *
 262 * hw - Struct containing variables accessed by shared code
 263 *
 264 * Resets the controller.
 265 * Reads and validates the EEPROM.
 266 * Initializes the receive address registers.
 267 * Initializes the multicast table.
 268 * Clears all on-chip counters.
 269 * Calls routine to setup flow control settings.
 270 * Leaves the transmit and receive units disabled and uninitialized.
 271 *
 272 * Returns:
 273 *      TRUE if successful,
 274 *      FALSE if unrecoverable problems were encountered.
 275 *****************************************************************************/
 276boolean_t
 277ixgb_init_hw(struct ixgb_hw *hw)
 278{
 279        uint32_t i;
 280        uint32_t ctrl_reg;
 281        boolean_t status;
 282
 283        DEBUGFUNC("ixgb_init_hw");
 284
 285        /* Issue a global reset to the MAC.  This will reset the chip's
 286         * transmit, receive, DMA, and link units.  It will not effect
 287         * the current PCI configuration.  The global reset bit is self-
 288         * clearing, and should clear within a microsecond.
 289         */
 290        DEBUGOUT("Issuing a global reset to MAC\n");
 291
 292        ctrl_reg = ixgb_mac_reset(hw);
 293
 294        DEBUGOUT("Issuing an EE reset to MAC\n");
 295#ifdef HP_ZX1
 296        /* Workaround for 82597EX reset errata */
 297        IXGB_WRITE_REG_IO(hw, CTRL1, IXGB_CTRL1_EE_RST);
 298#else
 299        IXGB_WRITE_REG(hw, CTRL1, IXGB_CTRL1_EE_RST);
 300#endif
 301
 302        /* Delay a few ms just to allow the reset to complete */
 303        msleep(IXGB_DELAY_AFTER_EE_RESET);
 304
 305        if (ixgb_get_eeprom_data(hw) == FALSE) {
 306                return(FALSE);
 307        }
 308
 309        /* Use the device id to determine the type of phy/transceiver. */
 310        hw->device_id = ixgb_get_ee_device_id(hw);
 311        hw->phy_type = ixgb_identify_phy(hw);
 312
 313        /* Setup the receive addresses.
 314         * Receive Address Registers (RARs 0 - 15).
 315         */
 316        ixgb_init_rx_addrs(hw);
 317
 318        /*
 319         * Check that a valid MAC address has been set.
 320         * If it is not valid, we fail hardware init.
 321         */
 322        if (!mac_addr_valid(hw->curr_mac_addr)) {
 323                DEBUGOUT("MAC address invalid after ixgb_init_rx_addrs\n");
 324                return(FALSE);
 325        }
 326
 327        /* tell the routines in this file they can access hardware again */
 328        hw->adapter_stopped = FALSE;
 329
 330        /* Fill in the bus_info structure */
 331        ixgb_get_bus_info(hw);
 332
 333        /* Zero out the Multicast HASH table */
 334        DEBUGOUT("Zeroing the MTA\n");
 335        for(i = 0; i < IXGB_MC_TBL_SIZE; i++)
 336                IXGB_WRITE_REG_ARRAY(hw, MTA, i, 0);
 337
 338        /* Zero out the VLAN Filter Table Array */
 339        ixgb_clear_vfta(hw);
 340
 341        /* Zero all of the hardware counters */
 342        ixgb_clear_hw_cntrs(hw);
 343
 344        /* Call a subroutine to setup flow control. */
 345        status = ixgb_setup_fc(hw);
 346
 347        /* 82597EX errata: Call check-for-link in case lane deskew is locked */
 348        ixgb_check_for_link(hw);
 349
 350        return (status);
 351}
 352
 353/******************************************************************************
 354 * Initializes receive address filters.
 355 *
 356 * hw - Struct containing variables accessed by shared code
 357 *
 358 * Places the MAC address in receive address register 0 and clears the rest
 359 * of the receive addresss registers. Clears the multicast table. Assumes
 360 * the receiver is in reset when the routine is called.
 361 *****************************************************************************/
 362static void
 363ixgb_init_rx_addrs(struct ixgb_hw *hw)
 364{
 365        uint32_t i;
 366
 367        DEBUGFUNC("ixgb_init_rx_addrs");
 368
 369        /*
 370         * If the current mac address is valid, assume it is a software override
 371         * to the permanent address.
 372         * Otherwise, use the permanent address from the eeprom.
 373         */
 374        if (!mac_addr_valid(hw->curr_mac_addr)) {
 375
 376                /* Get the MAC address from the eeprom for later reference */
 377                ixgb_get_ee_mac_addr(hw, hw->curr_mac_addr);
 378
 379                DEBUGOUT3(" Keeping Permanent MAC Addr =%.2X %.2X %.2X ",
 380                          hw->curr_mac_addr[0],
 381                          hw->curr_mac_addr[1], hw->curr_mac_addr[2]);
 382                DEBUGOUT3("%.2X %.2X %.2X\n",
 383                          hw->curr_mac_addr[3],
 384                          hw->curr_mac_addr[4], hw->curr_mac_addr[5]);
 385        } else {
 386
 387                /* Setup the receive address. */
 388                DEBUGOUT("Overriding MAC Address in RAR[0]\n");
 389                DEBUGOUT3(" New MAC Addr =%.2X %.2X %.2X ",
 390                          hw->curr_mac_addr[0],
 391                          hw->curr_mac_addr[1], hw->curr_mac_addr[2]);
 392                DEBUGOUT3("%.2X %.2X %.2X\n",
 393                          hw->curr_mac_addr[3],
 394                          hw->curr_mac_addr[4], hw->curr_mac_addr[5]);
 395
 396                ixgb_rar_set(hw, hw->curr_mac_addr, 0);
 397        }
 398
 399        /* Zero out the other 15 receive addresses. */
 400        DEBUGOUT("Clearing RAR[1-15]\n");
 401        for(i = 1; i < IXGB_RAR_ENTRIES; i++) {
 402                /* Write high reg first to disable the AV bit first */
 403                IXGB_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
 404                IXGB_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
 405        }
 406
 407        return;
 408}
 409
 410/******************************************************************************
 411 * Updates the MAC's list of multicast addresses.
 412 *
 413 * hw - Struct containing variables accessed by shared code
 414 * mc_addr_list - the list of new multicast addresses
 415 * mc_addr_count - number of addresses
 416 * pad - number of bytes between addresses in the list
 417 *
 418 * The given list replaces any existing list. Clears the last 15 receive
 419 * address registers and the multicast table. Uses receive address registers
 420 * for the first 15 multicast addresses, and hashes the rest into the
 421 * multicast table.
 422 *****************************************************************************/
 423void
 424ixgb_mc_addr_list_update(struct ixgb_hw *hw,
 425                          uint8_t *mc_addr_list,
 426                          uint32_t mc_addr_count,
 427                          uint32_t pad)
 428{
 429        uint32_t hash_value;
 430        uint32_t i;
 431        uint32_t rar_used_count = 1;            /* RAR[0] is used for our MAC address */
 432
 433        DEBUGFUNC("ixgb_mc_addr_list_update");
 434
 435        /* Set the new number of MC addresses that we are being requested to use. */
 436        hw->num_mc_addrs = mc_addr_count;
 437
 438        /* Clear RAR[1-15] */
 439        DEBUGOUT(" Clearing RAR[1-15]\n");
 440        for(i = rar_used_count; i < IXGB_RAR_ENTRIES; i++) {
 441                IXGB_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
 442                IXGB_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
 443        }
 444
 445        /* Clear the MTA */
 446        DEBUGOUT(" Clearing MTA\n");
 447        for(i = 0; i < IXGB_MC_TBL_SIZE; i++) {
 448                IXGB_WRITE_REG_ARRAY(hw, MTA, i, 0);
 449        }
 450
 451        /* Add the new addresses */
 452        for(i = 0; i < mc_addr_count; i++) {
 453                DEBUGOUT(" Adding the multicast addresses:\n");
 454                DEBUGOUT7(" MC Addr #%d =%.2X %.2X %.2X %.2X %.2X %.2X\n", i,
 455                          mc_addr_list[i * (IXGB_ETH_LENGTH_OF_ADDRESS + pad)],
 456                          mc_addr_list[i * (IXGB_ETH_LENGTH_OF_ADDRESS + pad) +
 457                                       1],
 458                          mc_addr_list[i * (IXGB_ETH_LENGTH_OF_ADDRESS + pad) +
 459                                       2],
 460                          mc_addr_list[i * (IXGB_ETH_LENGTH_OF_ADDRESS + pad) +
 461                                       3],
 462                          mc_addr_list[i * (IXGB_ETH_LENGTH_OF_ADDRESS + pad) +
 463                                       4],
 464                          mc_addr_list[i * (IXGB_ETH_LENGTH_OF_ADDRESS + pad) +
 465                                       5]);
 466
 467                /* Place this multicast address in the RAR if there is room, *
 468                 * else put it in the MTA
 469                 */
 470                if(rar_used_count < IXGB_RAR_ENTRIES) {
 471                        ixgb_rar_set(hw,
 472                                     mc_addr_list +
 473                                     (i * (IXGB_ETH_LENGTH_OF_ADDRESS + pad)),
 474                                     rar_used_count);
 475                        DEBUGOUT1("Added a multicast address to RAR[%d]\n", i);
 476                        rar_used_count++;
 477                } else {
 478                        hash_value = ixgb_hash_mc_addr(hw,
 479                                                       mc_addr_list +
 480                                                       (i *
 481                                                        (IXGB_ETH_LENGTH_OF_ADDRESS
 482                                                         + pad)));
 483
 484                        DEBUGOUT1(" Hash value = 0x%03X\n", hash_value);
 485
 486                        ixgb_mta_set(hw, hash_value);
 487                }
 488        }
 489
 490        DEBUGOUT("MC Update Complete\n");
 491        return;
 492}
 493
 494/******************************************************************************
 495 * Hashes an address to determine its location in the multicast table
 496 *
 497 * hw - Struct containing variables accessed by shared code
 498 * mc_addr - the multicast address to hash
 499 *
 500 * Returns:
 501 *      The hash value
 502 *****************************************************************************/
 503static uint32_t
 504ixgb_hash_mc_addr(struct ixgb_hw *hw,
 505                   uint8_t *mc_addr)
 506{
 507        uint32_t hash_value = 0;
 508
 509        DEBUGFUNC("ixgb_hash_mc_addr");
 510
 511        /* The portion of the address that is used for the hash table is
 512         * determined by the mc_filter_type setting.
 513         */
 514        switch (hw->mc_filter_type) {
 515                /* [0] [1] [2] [3] [4] [5]
 516                 * 01  AA  00  12  34  56
 517                 * LSB                 MSB - According to H/W docs */
 518        case 0:
 519                /* [47:36] i.e. 0x563 for above example address */
 520                hash_value =
 521                    ((mc_addr[4] >> 4) | (((uint16_t) mc_addr[5]) << 4));
 522                break;
 523        case 1:         /* [46:35] i.e. 0xAC6 for above example address */
 524                hash_value =
 525                    ((mc_addr[4] >> 3) | (((uint16_t) mc_addr[5]) << 5));
 526                break;
 527        case 2:         /* [45:34] i.e. 0x5D8 for above example address */
 528                hash_value =
 529                    ((mc_addr[4] >> 2) | (((uint16_t) mc_addr[5]) << 6));
 530                break;
 531        case 3:         /* [43:32] i.e. 0x634 for above example address */
 532                hash_value = ((mc_addr[4]) | (((uint16_t) mc_addr[5]) << 8));
 533                break;
 534        default:
 535                /* Invalid mc_filter_type, what should we do? */
 536                DEBUGOUT("MC filter type param set incorrectly\n");
 537                ASSERT(0);
 538                break;
 539        }
 540
 541        hash_value &= 0xFFF;
 542        return (hash_value);
 543}
 544
 545/******************************************************************************
 546 * Sets the bit in the multicast table corresponding to the hash value.
 547 *
 548 * hw - Struct containing variables accessed by shared code
 549 * hash_value - Multicast address hash value
 550 *****************************************************************************/
 551static void
 552ixgb_mta_set(struct ixgb_hw *hw,
 553                  uint32_t hash_value)
 554{
 555        uint32_t hash_bit, hash_reg;
 556        uint32_t mta_reg;
 557
 558        /* The MTA is a register array of 128 32-bit registers.
 559         * It is treated like an array of 4096 bits.  We want to set
 560         * bit BitArray[hash_value]. So we figure out what register
 561         * the bit is in, read it, OR in the new bit, then write
 562         * back the new value.  The register is determined by the
 563         * upper 7 bits of the hash value and the bit within that
 564         * register are determined by the lower 5 bits of the value.
 565         */
 566        hash_reg = (hash_value >> 5) & 0x7F;
 567        hash_bit = hash_value & 0x1F;
 568
 569        mta_reg = IXGB_READ_REG_ARRAY(hw, MTA, hash_reg);
 570
 571        mta_reg |= (1 << hash_bit);
 572
 573        IXGB_WRITE_REG_ARRAY(hw, MTA, hash_reg, mta_reg);
 574
 575        return;
 576}
 577
 578/******************************************************************************
 579 * Puts an ethernet address into a receive address register.
 580 *
 581 * hw - Struct containing variables accessed by shared code
 582 * addr - Address to put into receive address register
 583 * index - Receive address register to write
 584 *****************************************************************************/
 585void
 586ixgb_rar_set(struct ixgb_hw *hw,
 587                  uint8_t *addr,
 588                  uint32_t index)
 589{
 590        uint32_t rar_low, rar_high;
 591
 592        DEBUGFUNC("ixgb_rar_set");
 593
 594        /* HW expects these in little endian so we reverse the byte order
 595         * from network order (big endian) to little endian
 596         */
 597        rar_low = ((uint32_t) addr[0] |
 598                   ((uint32_t)addr[1] << 8) |
 599                   ((uint32_t)addr[2] << 16) |
 600                   ((uint32_t)addr[3] << 24));
 601
 602        rar_high = ((uint32_t) addr[4] |
 603                        ((uint32_t)addr[5] << 8) |
 604                        IXGB_RAH_AV);
 605
 606        IXGB_WRITE_REG_ARRAY(hw, RA, (index << 1), rar_low);
 607        IXGB_WRITE_REG_ARRAY(hw, RA, ((index << 1) + 1), rar_high);
 608        return;
 609}
 610
 611/******************************************************************************
 612 * Writes a value to the specified offset in the VLAN filter table.
 613 *
 614 * hw - Struct containing variables accessed by shared code
 615 * offset - Offset in VLAN filer table to write
 616 * value - Value to write into VLAN filter table
 617 *****************************************************************************/
 618void
 619ixgb_write_vfta(struct ixgb_hw *hw,
 620                 uint32_t offset,
 621                 uint32_t value)
 622{
 623        IXGB_WRITE_REG_ARRAY(hw, VFTA, offset, value);
 624        return;
 625}
 626
 627/******************************************************************************
 628 * Clears the VLAN filer table
 629 *
 630 * hw - Struct containing variables accessed by shared code
 631 *****************************************************************************/
 632static void
 633ixgb_clear_vfta(struct ixgb_hw *hw)
 634{
 635        uint32_t offset;
 636
 637        for(offset = 0; offset < IXGB_VLAN_FILTER_TBL_SIZE; offset++)
 638                IXGB_WRITE_REG_ARRAY(hw, VFTA, offset, 0);
 639        return;
 640}
 641
 642/******************************************************************************
 643 * Configures the flow control settings based on SW configuration.
 644 *
 645 * hw - Struct containing variables accessed by shared code
 646 *****************************************************************************/
 647
 648static boolean_t
 649ixgb_setup_fc(struct ixgb_hw *hw)
 650{
 651        uint32_t ctrl_reg;
 652        uint32_t pap_reg = 0;   /* by default, assume no pause time */
 653        boolean_t status = TRUE;
 654
 655        DEBUGFUNC("ixgb_setup_fc");
 656
 657        /* Get the current control reg 0 settings */
 658        ctrl_reg = IXGB_READ_REG(hw, CTRL0);
 659
 660        /* Clear the Receive Pause Enable and Transmit Pause Enable bits */
 661        ctrl_reg &= ~(IXGB_CTRL0_RPE | IXGB_CTRL0_TPE);
 662
 663        /* The possible values of the "flow_control" parameter are:
 664         *      0:  Flow control is completely disabled
 665         *      1:  Rx flow control is enabled (we can receive pause frames
 666         *          but not send pause frames).
 667         *      2:  Tx flow control is enabled (we can send pause frames
 668         *          but we do not support receiving pause frames).
 669         *      3:  Both Rx and TX flow control (symmetric) are enabled.
 670         *  other:  Invalid.
 671         */
 672        switch (hw->fc.type) {
 673        case ixgb_fc_none:      /* 0 */
 674                /* Set CMDC bit to disable Rx Flow control */
 675                ctrl_reg |= (IXGB_CTRL0_CMDC);
 676                break;
 677        case ixgb_fc_rx_pause:  /* 1 */
 678                /* RX Flow control is enabled, and TX Flow control is
 679                 * disabled.
 680                 */
 681                ctrl_reg |= (IXGB_CTRL0_RPE);
 682                break;
 683        case ixgb_fc_tx_pause:  /* 2 */
 684                /* TX Flow control is enabled, and RX Flow control is
 685                 * disabled, by a software over-ride.
 686                 */
 687                ctrl_reg |= (IXGB_CTRL0_TPE);
 688                pap_reg = hw->fc.pause_time;
 689                break;
 690        case ixgb_fc_full:      /* 3 */
 691                /* Flow control (both RX and TX) is enabled by a software
 692                 * over-ride.
 693                 */
 694                ctrl_reg |= (IXGB_CTRL0_RPE | IXGB_CTRL0_TPE);
 695                pap_reg = hw->fc.pause_time;
 696                break;
 697        default:
 698                /* We should never get here.  The value should be 0-3. */
 699                DEBUGOUT("Flow control param set incorrectly\n");
 700                ASSERT(0);
 701                break;
 702        }
 703
 704        /* Write the new settings */
 705        IXGB_WRITE_REG(hw, CTRL0, ctrl_reg);
 706
 707        if (pap_reg != 0) {
 708                IXGB_WRITE_REG(hw, PAP, pap_reg);
 709        }
 710
 711        /* Set the flow control receive threshold registers.  Normally,
 712         * these registers will be set to a default threshold that may be
 713         * adjusted later by the driver's runtime code.  However, if the
 714         * ability to transmit pause frames in not enabled, then these
 715         * registers will be set to 0.
 716         */
 717        if(!(hw->fc.type & ixgb_fc_tx_pause)) {
 718                IXGB_WRITE_REG(hw, FCRTL, 0);
 719                IXGB_WRITE_REG(hw, FCRTH, 0);
 720        } else {
 721           /* We need to set up the Receive Threshold high and low water
 722            * marks as well as (optionally) enabling the transmission of XON
 723            * frames. */
 724                if(hw->fc.send_xon) {
 725                        IXGB_WRITE_REG(hw, FCRTL,
 726                                (hw->fc.low_water | IXGB_FCRTL_XONE));
 727                } else {
 728                        IXGB_WRITE_REG(hw, FCRTL, hw->fc.low_water);
 729                }
 730                IXGB_WRITE_REG(hw, FCRTH, hw->fc.high_water);
 731        }
 732        return (status);
 733}
 734
 735/******************************************************************************
 736 * Reads a word from a device over the Management Data Interface (MDI) bus.
 737 * This interface is used to manage Physical layer devices.
 738 *
 739 * hw          - Struct containing variables accessed by hw code
 740 * reg_address - Offset of device register being read.
 741 * phy_address - Address of device on MDI.
 742 *
 743 * Returns:  Data word (16 bits) from MDI device.
 744 *
 745 * The 82597EX has support for several MDI access methods.  This routine
 746 * uses the new protocol MDI Single Command and Address Operation.
 747 * This requires that first an address cycle command is sent, followed by a
 748 * read command.
 749 *****************************************************************************/
 750static uint16_t
 751ixgb_read_phy_reg(struct ixgb_hw *hw,
 752                uint32_t reg_address,
 753                uint32_t phy_address,
 754                uint32_t device_type)
 755{
 756        uint32_t i;
 757        uint32_t data;
 758        uint32_t command = 0;
 759
 760        ASSERT(reg_address <= IXGB_MAX_PHY_REG_ADDRESS);
 761        ASSERT(phy_address <= IXGB_MAX_PHY_ADDRESS);
 762        ASSERT(device_type <= IXGB_MAX_PHY_DEV_TYPE);
 763
 764        /* Setup and write the address cycle command */
 765        command = ((reg_address << IXGB_MSCA_NP_ADDR_SHIFT) |
 766                   (device_type << IXGB_MSCA_DEV_TYPE_SHIFT) |
 767                   (phy_address << IXGB_MSCA_PHY_ADDR_SHIFT) |
 768                   (IXGB_MSCA_ADDR_CYCLE | IXGB_MSCA_MDI_COMMAND));
 769
 770        IXGB_WRITE_REG(hw, MSCA, command);
 771
 772    /**************************************************************
 773    ** Check every 10 usec to see if the address cycle completed
 774    ** The COMMAND bit will clear when the operation is complete.
 775    ** This may take as long as 64 usecs (we'll wait 100 usecs max)
 776    ** from the CPU Write to the Ready bit assertion.
 777    **************************************************************/
 778
 779        for(i = 0; i < 10; i++)
 780        {
 781                udelay(10);
 782
 783                command = IXGB_READ_REG(hw, MSCA);
 784
 785                if ((command & IXGB_MSCA_MDI_COMMAND) == 0)
 786                        break;
 787        }
 788
 789        ASSERT((command & IXGB_MSCA_MDI_COMMAND) == 0);
 790
 791        /* Address cycle complete, setup and write the read command */
 792        command = ((reg_address << IXGB_MSCA_NP_ADDR_SHIFT) |
 793                   (device_type << IXGB_MSCA_DEV_TYPE_SHIFT) |
 794                   (phy_address << IXGB_MSCA_PHY_ADDR_SHIFT) |
 795                   (IXGB_MSCA_READ | IXGB_MSCA_MDI_COMMAND));
 796
 797        IXGB_WRITE_REG(hw, MSCA, command);
 798
 799    /**************************************************************
 800    ** Check every 10 usec to see if the read command completed
 801    ** The COMMAND bit will clear when the operation is complete.
 802    ** The read may take as long as 64 usecs (we'll wait 100 usecs max)
 803    ** from the CPU Write to the Ready bit assertion.
 804    **************************************************************/
 805
 806        for(i = 0; i < 10; i++)
 807        {
 808                udelay(10);
 809
 810                command = IXGB_READ_REG(hw, MSCA);
 811
 812                if ((command & IXGB_MSCA_MDI_COMMAND) == 0)
 813                        break;
 814        }
 815
 816        ASSERT((command & IXGB_MSCA_MDI_COMMAND) == 0);
 817
 818        /* Operation is complete, get the data from the MDIO Read/Write Data
 819         * register and return.
 820         */
 821        data = IXGB_READ_REG(hw, MSRWD);
 822        data >>= IXGB_MSRWD_READ_DATA_SHIFT;
 823        return((uint16_t) data);
 824}
 825
 826/******************************************************************************
 827 * Writes a word to a device over the Management Data Interface (MDI) bus.
 828 * This interface is used to manage Physical layer devices.
 829 *
 830 * hw          - Struct containing variables accessed by hw code
 831 * reg_address - Offset of device register being read.
 832 * phy_address - Address of device on MDI.
 833 * device_type - Also known as the Device ID or DID.
 834 * data        - 16-bit value to be written
 835 *
 836 * Returns:  void.
 837 *
 838 * The 82597EX has support for several MDI access methods.  This routine
 839 * uses the new protocol MDI Single Command and Address Operation.
 840 * This requires that first an address cycle command is sent, followed by a
 841 * write command.
 842 *****************************************************************************/
 843static void
 844ixgb_write_phy_reg(struct ixgb_hw *hw,
 845                        uint32_t reg_address,
 846                        uint32_t phy_address,
 847                        uint32_t device_type,
 848                        uint16_t data)
 849{
 850        uint32_t i;
 851        uint32_t command = 0;
 852
 853        ASSERT(reg_address <= IXGB_MAX_PHY_REG_ADDRESS);
 854        ASSERT(phy_address <= IXGB_MAX_PHY_ADDRESS);
 855        ASSERT(device_type <= IXGB_MAX_PHY_DEV_TYPE);
 856
 857        /* Put the data in the MDIO Read/Write Data register */
 858        IXGB_WRITE_REG(hw, MSRWD, (uint32_t)data);
 859
 860        /* Setup and write the address cycle command */
 861        command = ((reg_address << IXGB_MSCA_NP_ADDR_SHIFT)  |
 862                           (device_type << IXGB_MSCA_DEV_TYPE_SHIFT) |
 863                           (phy_address << IXGB_MSCA_PHY_ADDR_SHIFT) |
 864                           (IXGB_MSCA_ADDR_CYCLE | IXGB_MSCA_MDI_COMMAND));
 865
 866        IXGB_WRITE_REG(hw, MSCA, command);
 867
 868        /**************************************************************
 869        ** Check every 10 usec to see if the address cycle completed
 870        ** The COMMAND bit will clear when the operation is complete.
 871        ** This may take as long as 64 usecs (we'll wait 100 usecs max)
 872        ** from the CPU Write to the Ready bit assertion.
 873        **************************************************************/
 874
 875        for(i = 0; i < 10; i++)
 876        {
 877                udelay(10);
 878
 879                command = IXGB_READ_REG(hw, MSCA);
 880
 881                if ((command & IXGB_MSCA_MDI_COMMAND) == 0)
 882                        break;
 883        }
 884
 885        ASSERT((command & IXGB_MSCA_MDI_COMMAND) == 0);
 886
 887        /* Address cycle complete, setup and write the write command */
 888        command = ((reg_address << IXGB_MSCA_NP_ADDR_SHIFT)  |
 889                           (device_type << IXGB_MSCA_DEV_TYPE_SHIFT) |
 890                           (phy_address << IXGB_MSCA_PHY_ADDR_SHIFT) |
 891                           (IXGB_MSCA_WRITE | IXGB_MSCA_MDI_COMMAND));
 892
 893        IXGB_WRITE_REG(hw, MSCA, command);
 894
 895        /**************************************************************
 896        ** Check every 10 usec to see if the read command completed
 897        ** The COMMAND bit will clear when the operation is complete.
 898        ** The write may take as long as 64 usecs (we'll wait 100 usecs max)
 899        ** from the CPU Write to the Ready bit assertion.
 900        **************************************************************/
 901
 902        for(i = 0; i < 10; i++)
 903        {
 904                udelay(10);
 905
 906                command = IXGB_READ_REG(hw, MSCA);
 907
 908                if ((command & IXGB_MSCA_MDI_COMMAND) == 0)
 909                        break;
 910        }
 911
 912        ASSERT((command & IXGB_MSCA_MDI_COMMAND) == 0);
 913
 914        /* Operation is complete, return. */
 915}
 916
 917/******************************************************************************
 918 * Checks to see if the link status of the hardware has changed.
 919 *
 920 * hw - Struct containing variables accessed by hw code
 921 *
 922 * Called by any function that needs to check the link status of the adapter.
 923 *****************************************************************************/
 924void
 925ixgb_check_for_link(struct ixgb_hw *hw)
 926{
 927        uint32_t status_reg;
 928        uint32_t xpcss_reg;
 929
 930        DEBUGFUNC("ixgb_check_for_link");
 931
 932        xpcss_reg = IXGB_READ_REG(hw, XPCSS);
 933        status_reg = IXGB_READ_REG(hw, STATUS);
 934
 935        if ((xpcss_reg & IXGB_XPCSS_ALIGN_STATUS) &&
 936            (status_reg & IXGB_STATUS_LU)) {
 937                hw->link_up = TRUE;
 938        } else if (!(xpcss_reg & IXGB_XPCSS_ALIGN_STATUS) &&
 939                   (status_reg & IXGB_STATUS_LU)) {
 940                DEBUGOUT("XPCSS Not Aligned while Status:LU is set.\n");
 941                hw->link_up = ixgb_link_reset(hw);
 942        } else {
 943                /*
 944                 * 82597EX errata.  Since the lane deskew problem may prevent
 945                 * link, reset the link before reporting link down.
 946                 */
 947                hw->link_up = ixgb_link_reset(hw);
 948        }
 949        /*  Anything else for 10 Gig?? */
 950}
 951
 952/******************************************************************************
 953 * Check for a bad link condition that may have occured.
 954 * The indication is that the RFC / LFC registers may be incrementing
 955 * continually.  A full adapter reset is required to recover.
 956 *
 957 * hw - Struct containing variables accessed by hw code
 958 *
 959 * Called by any function that needs to check the link status of the adapter.
 960 *****************************************************************************/
 961boolean_t ixgb_check_for_bad_link(struct ixgb_hw *hw)
 962{
 963        uint32_t newLFC, newRFC;
 964        boolean_t bad_link_returncode = FALSE;
 965
 966        if (hw->phy_type == ixgb_phy_type_txn17401) {
 967                newLFC = IXGB_READ_REG(hw, LFC);
 968                newRFC = IXGB_READ_REG(hw, RFC);
 969                if ((hw->lastLFC + 250 < newLFC)
 970                    || (hw->lastRFC + 250 < newRFC)) {
 971                        DEBUGOUT
 972                            ("BAD LINK! too many LFC/RFC since last check\n");
 973                        bad_link_returncode = TRUE;
 974                }
 975                hw->lastLFC = newLFC;
 976                hw->lastRFC = newRFC;
 977        }
 978
 979        return bad_link_returncode;
 980}
 981
 982/******************************************************************************
 983 * Clears all hardware statistics counters.
 984 *
 985 * hw - Struct containing variables accessed by shared code
 986 *****************************************************************************/
 987static void
 988ixgb_clear_hw_cntrs(struct ixgb_hw *hw)
 989{
 990        volatile uint32_t temp_reg;
 991
 992        DEBUGFUNC("ixgb_clear_hw_cntrs");
 993
 994        /* if we are stopped or resetting exit gracefully */
 995        if(hw->adapter_stopped) {
 996                DEBUGOUT("Exiting because the adapter is stopped!!!\n");
 997                return;
 998        }
 999
1000        temp_reg = IXGB_READ_REG(hw, TPRL);
1001        temp_reg = IXGB_READ_REG(hw, TPRH);
1002        temp_reg = IXGB_READ_REG(hw, GPRCL);
1003        temp_reg = IXGB_READ_REG(hw, GPRCH);
1004        temp_reg = IXGB_READ_REG(hw, BPRCL);
1005        temp_reg = IXGB_READ_REG(hw, BPRCH);
1006        temp_reg = IXGB_READ_REG(hw, MPRCL);
1007        temp_reg = IXGB_READ_REG(hw, MPRCH);
1008        temp_reg = IXGB_READ_REG(hw, UPRCL);
1009        temp_reg = IXGB_READ_REG(hw, UPRCH);
1010        temp_reg = IXGB_READ_REG(hw, VPRCL);
1011        temp_reg = IXGB_READ_REG(hw, VPRCH);
1012        temp_reg = IXGB_READ_REG(hw, JPRCL);
1013        temp_reg = IXGB_READ_REG(hw, JPRCH);
1014        temp_reg = IXGB_READ_REG(hw, GORCL);
1015        temp_reg = IXGB_READ_REG(hw, GORCH);
1016        temp_reg = IXGB_READ_REG(hw, TORL);
1017        temp_reg = IXGB_READ_REG(hw, TORH);
1018        temp_reg = IXGB_READ_REG(hw, RNBC);
1019        temp_reg = IXGB_READ_REG(hw, RUC);
1020        temp_reg = IXGB_READ_REG(hw, ROC);
1021        temp_reg = IXGB_READ_REG(hw, RLEC);
1022        temp_reg = IXGB_READ_REG(hw, CRCERRS);
1023        temp_reg = IXGB_READ_REG(hw, ICBC);
1024        temp_reg = IXGB_READ_REG(hw, ECBC);
1025        temp_reg = IXGB_READ_REG(hw, MPC);
1026        temp_reg = IXGB_READ_REG(hw, TPTL);
1027        temp_reg = IXGB_READ_REG(hw, TPTH);
1028        temp_reg = IXGB_READ_REG(hw, GPTCL);
1029        temp_reg = IXGB_READ_REG(hw, GPTCH);
1030        temp_reg = IXGB_READ_REG(hw, BPTCL);
1031        temp_reg = IXGB_READ_REG(hw, BPTCH);
1032        temp_reg = IXGB_READ_REG(hw, MPTCL);
1033        temp_reg = IXGB_READ_REG(hw, MPTCH);
1034        temp_reg = IXGB_READ_REG(hw, UPTCL);
1035        temp_reg = IXGB_READ_REG(hw, UPTCH);
1036        temp_reg = IXGB_READ_REG(hw, VPTCL);
1037        temp_reg = IXGB_READ_REG(hw, VPTCH);
1038        temp_reg = IXGB_READ_REG(hw, JPTCL);
1039        temp_reg = IXGB_READ_REG(hw, JPTCH);
1040        temp_reg = IXGB_READ_REG(hw, GOTCL);
1041        temp_reg = IXGB_READ_REG(hw, GOTCH);
1042        temp_reg = IXGB_READ_REG(hw, TOTL);
1043        temp_reg = IXGB_READ_REG(hw, TOTH);
1044        temp_reg = IXGB_READ_REG(hw, DC);
1045        temp_reg = IXGB_READ_REG(hw, PLT64C);
1046        temp_reg = IXGB_READ_REG(hw, TSCTC);
1047        temp_reg = IXGB_READ_REG(hw, TSCTFC);
1048        temp_reg = IXGB_READ_REG(hw, IBIC);
1049        temp_reg = IXGB_READ_REG(hw, RFC);
1050        temp_reg = IXGB_READ_REG(hw, LFC);
1051        temp_reg = IXGB_READ_REG(hw, PFRC);
1052        temp_reg = IXGB_READ_REG(hw, PFTC);
1053        temp_reg = IXGB_READ_REG(hw, MCFRC);
1054        temp_reg = IXGB_READ_REG(hw, MCFTC);
1055        temp_reg = IXGB_READ_REG(hw, XONRXC);
1056        temp_reg = IXGB_READ_REG(hw, XONTXC);
1057        temp_reg = IXGB_READ_REG(hw, XOFFRXC);
1058        temp_reg = IXGB_READ_REG(hw, XOFFTXC);
1059        temp_reg = IXGB_READ_REG(hw, RJC);
1060        return;
1061}
1062
1063/******************************************************************************
1064 * Turns on the software controllable LED
1065 *
1066 * hw - Struct containing variables accessed by shared code
1067 *****************************************************************************/
1068void
1069ixgb_led_on(struct ixgb_hw *hw)
1070{
1071        uint32_t ctrl0_reg = IXGB_READ_REG(hw, CTRL0);
1072
1073        /* To turn on the LED, clear software-definable pin 0 (SDP0). */
1074        ctrl0_reg &= ~IXGB_CTRL0_SDP0;
1075        IXGB_WRITE_REG(hw, CTRL0, ctrl0_reg);
1076        return;
1077}
1078
1079/******************************************************************************
1080 * Turns off the software controllable LED
1081 *
1082 * hw - Struct containing variables accessed by shared code
1083 *****************************************************************************/
1084void
1085ixgb_led_off(struct ixgb_hw *hw)
1086{
1087        uint32_t ctrl0_reg = IXGB_READ_REG(hw, CTRL0);
1088
1089        /* To turn off the LED, set software-definable pin 0 (SDP0). */
1090        ctrl0_reg |= IXGB_CTRL0_SDP0;
1091        IXGB_WRITE_REG(hw, CTRL0, ctrl0_reg);
1092        return;
1093}
1094
1095/******************************************************************************
1096 * Gets the current PCI bus type, speed, and width of the hardware
1097 *
1098 * hw - Struct containing variables accessed by shared code
1099 *****************************************************************************/
1100static void
1101ixgb_get_bus_info(struct ixgb_hw *hw)
1102{
1103        uint32_t status_reg;
1104
1105        status_reg = IXGB_READ_REG(hw, STATUS);
1106
1107        hw->bus.type = (status_reg & IXGB_STATUS_PCIX_MODE) ?
1108                ixgb_bus_type_pcix : ixgb_bus_type_pci;
1109
1110        if (hw->bus.type == ixgb_bus_type_pci) {
1111                hw->bus.speed = (status_reg & IXGB_STATUS_PCI_SPD) ?
1112                        ixgb_bus_speed_66 : ixgb_bus_speed_33;
1113        } else {
1114                switch (status_reg & IXGB_STATUS_PCIX_SPD_MASK) {
1115                case IXGB_STATUS_PCIX_SPD_66:
1116                        hw->bus.speed = ixgb_bus_speed_66;
1117                        break;
1118                case IXGB_STATUS_PCIX_SPD_100:
1119                        hw->bus.speed = ixgb_bus_speed_100;
1120                        break;
1121                case IXGB_STATUS_PCIX_SPD_133:
1122                        hw->bus.speed = ixgb_bus_speed_133;
1123                        break;
1124                default:
1125                        hw->bus.speed = ixgb_bus_speed_reserved;
1126                        break;
1127                }
1128        }
1129
1130        hw->bus.width = (status_reg & IXGB_STATUS_BUS64) ?
1131                ixgb_bus_width_64 : ixgb_bus_width_32;
1132
1133        return;
1134}
1135
1136/******************************************************************************
1137 * Tests a MAC address to ensure it is a valid Individual Address
1138 *
1139 * mac_addr - pointer to MAC address.
1140 *
1141 *****************************************************************************/
1142static boolean_t
1143mac_addr_valid(uint8_t *mac_addr)
1144{
1145        boolean_t is_valid = TRUE;
1146        DEBUGFUNC("mac_addr_valid");
1147
1148        /* Make sure it is not a multicast address */
1149        if (IS_MULTICAST(mac_addr)) {
1150                DEBUGOUT("MAC address is multicast\n");
1151                is_valid = FALSE;
1152        }
1153        /* Not a broadcast address */
1154        else if (IS_BROADCAST(mac_addr)) {
1155                DEBUGOUT("MAC address is broadcast\n");
1156                is_valid = FALSE;
1157        }
1158        /* Reject the zero address */
1159        else if (mac_addr[0] == 0 &&
1160                         mac_addr[1] == 0 &&
1161                         mac_addr[2] == 0 &&
1162                         mac_addr[3] == 0 &&
1163                         mac_addr[4] == 0 &&
1164                         mac_addr[5] == 0) {
1165                DEBUGOUT("MAC address is all zeros\n");
1166                is_valid = FALSE;
1167        }
1168        return (is_valid);
1169}
1170
1171/******************************************************************************
1172 * Resets the 10GbE link.  Waits the settle time and returns the state of
1173 * the link.
1174 *
1175 * hw - Struct containing variables accessed by shared code
1176 *****************************************************************************/
1177static boolean_t
1178ixgb_link_reset(struct ixgb_hw *hw)
1179{
1180        boolean_t link_status = FALSE;
1181        uint8_t wait_retries = MAX_RESET_ITERATIONS;
1182        uint8_t lrst_retries = MAX_RESET_ITERATIONS;
1183
1184        do {
1185                /* Reset the link */
1186                IXGB_WRITE_REG(hw, CTRL0,
1187                               IXGB_READ_REG(hw, CTRL0) | IXGB_CTRL0_LRST);
1188
1189                /* Wait for link-up and lane re-alignment */
1190                do {
1191                        udelay(IXGB_DELAY_USECS_AFTER_LINK_RESET);
1192                        link_status =
1193                            ((IXGB_READ_REG(hw, STATUS) & IXGB_STATUS_LU)
1194                             && (IXGB_READ_REG(hw, XPCSS) &
1195                                 IXGB_XPCSS_ALIGN_STATUS)) ? TRUE : FALSE;
1196                } while (!link_status && --wait_retries);
1197
1198        } while (!link_status && --lrst_retries);
1199
1200        return link_status;
1201}
1202
1203/******************************************************************************
1204 * Resets the 10GbE optics module.
1205 *
1206 * hw - Struct containing variables accessed by shared code
1207 *****************************************************************************/
1208static void
1209ixgb_optics_reset(struct ixgb_hw *hw)
1210{
1211        if (hw->phy_type == ixgb_phy_type_txn17401) {
1212                uint16_t mdio_reg;
1213
1214                ixgb_write_phy_reg(hw,
1215                                        MDIO_PMA_PMD_CR1,
1216                                        IXGB_PHY_ADDRESS,
1217                                        MDIO_PMA_PMD_DID,
1218                                        MDIO_PMA_PMD_CR1_RESET);
1219
1220                mdio_reg = ixgb_read_phy_reg( hw,
1221                                                MDIO_PMA_PMD_CR1,
1222                                                IXGB_PHY_ADDRESS,
1223                                                MDIO_PMA_PMD_DID);
1224        }
1225
1226        return;
1227}
1228