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