1 /*******************************************************************************
 
   3   Intel PRO/1000 Linux driver
 
   4   Copyright(c) 1999 - 2008 Intel Corporation.
 
   6   This program is free software; you can redistribute it and/or modify it
 
   7   under the terms and conditions of the GNU General Public License,
 
   8   version 2, as published by the Free Software Foundation.
 
  10   This program is distributed in the hope it will be useful, but WITHOUT
 
  11   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 
  12   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 
  15   You should have received a copy of the GNU General Public License along with
 
  16   this program; if not, write to the Free Software Foundation, Inc.,
 
  17   51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
 
  19   The full GNU General Public License is included in this distribution in
 
  20   the file called "COPYING".
 
  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
 
  27 *******************************************************************************/
 
  30  * 82571EB Gigabit Ethernet Controller
 
  31  * 82571EB Gigabit Ethernet Controller (Fiber)
 
  32  * 82571EB Dual Port Gigabit Mezzanine Adapter
 
  33  * 82571EB Quad Port Gigabit Mezzanine Adapter
 
  34  * 82571PT Gigabit PT Quad Port Server ExpressModule
 
  35  * 82572EI Gigabit Ethernet Controller (Copper)
 
  36  * 82572EI Gigabit Ethernet Controller (Fiber)
 
  37  * 82572EI Gigabit Ethernet Controller
 
  38  * 82573V Gigabit Ethernet Controller (Copper)
 
  39  * 82573E Gigabit Ethernet Controller (Copper)
 
  40  * 82573L Gigabit Ethernet Controller
 
  41  * 82574L Gigabit Network Connection
 
  44 #include <linux/netdevice.h>
 
  45 #include <linux/delay.h>
 
  46 #include <linux/pci.h>
 
  50 #define ID_LED_RESERVED_F746 0xF746
 
  51 #define ID_LED_DEFAULT_82573 ((ID_LED_DEF1_DEF2 << 12) | \
 
  52                               (ID_LED_OFF1_ON2  <<  8) | \
 
  53                               (ID_LED_DEF1_DEF2 <<  4) | \
 
  56 #define E1000_GCR_L1_ACT_WITHOUT_L0S_RX 0x08000000
 
  58 #define E1000_NVM_INIT_CTRL2_MNGM 0x6000 /* Manageability Operation Mode mask */
 
  60 static s32 e1000_get_phy_id_82571(struct e1000_hw *hw);
 
  61 static s32 e1000_setup_copper_link_82571(struct e1000_hw *hw);
 
  62 static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw);
 
  63 static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
 
  64                                       u16 words, u16 *data);
 
  65 static s32 e1000_fix_nvm_checksum_82571(struct e1000_hw *hw);
 
  66 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw);
 
  67 static s32 e1000_setup_link_82571(struct e1000_hw *hw);
 
  68 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw);
 
  69 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw);
 
  70 static s32 e1000_led_on_82574(struct e1000_hw *hw);
 
  73  *  e1000_init_phy_params_82571 - Init PHY func ptrs.
 
  74  *  @hw: pointer to the HW structure
 
  76  *  This is a function pointer entry point called by the api module.
 
  78 static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
 
  80         struct e1000_phy_info *phy = &hw->phy;
 
  83         if (hw->phy.media_type != e1000_media_type_copper) {
 
  84                 phy->type = e1000_phy_none;
 
  89         phy->autoneg_mask                = AUTONEG_ADVERTISE_SPEED_DEFAULT;
 
  90         phy->reset_delay_us              = 100;
 
  92         switch (hw->mac.type) {
 
  95                 phy->type                = e1000_phy_igp_2;
 
  98                 phy->type                = e1000_phy_m88;
 
 101                 phy->type                = e1000_phy_bm;
 
 104                 return -E1000_ERR_PHY;
 
 108         /* This can only be done after all function pointers are setup. */
 
 109         ret_val = e1000_get_phy_id_82571(hw);
 
 112         switch (hw->mac.type) {
 
 115                 if (phy->id != IGP01E1000_I_PHY_ID)
 
 116                         return -E1000_ERR_PHY;
 
 119                 if (phy->id != M88E1111_I_PHY_ID)
 
 120                         return -E1000_ERR_PHY;
 
 123                 if (phy->id != BME1000_E_PHY_ID_R2)
 
 124                         return -E1000_ERR_PHY;
 
 127                 return -E1000_ERR_PHY;
 
 135  *  e1000_init_nvm_params_82571 - Init NVM func ptrs.
 
 136  *  @hw: pointer to the HW structure
 
 138  *  This is a function pointer entry point called by the api module.
 
 140 static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw)
 
 142         struct e1000_nvm_info *nvm = &hw->nvm;
 
 143         u32 eecd = er32(EECD);
 
 146         nvm->opcode_bits = 8;
 
 148         switch (nvm->override) {
 
 149         case e1000_nvm_override_spi_large:
 
 151                 nvm->address_bits = 16;
 
 153         case e1000_nvm_override_spi_small:
 
 155                 nvm->address_bits = 8;
 
 158                 nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
 
 159                 nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ? 16 : 8;
 
 163         switch (hw->mac.type) {
 
 166                 if (((eecd >> 15) & 0x3) == 0x3) {
 
 167                         nvm->type = e1000_nvm_flash_hw;
 
 168                         nvm->word_size = 2048;
 
 170                          * Autonomous Flash update bit must be cleared due
 
 171                          * to Flash update issue.
 
 173                         eecd &= ~E1000_EECD_AUPDEN;
 
 179                 nvm->type = e1000_nvm_eeprom_spi;
 
 180                 size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
 
 181                                   E1000_EECD_SIZE_EX_SHIFT);
 
 183                  * Added to a constant, "size" becomes the left-shift value
 
 184                  * for setting word_size.
 
 186                 size += NVM_WORD_SIZE_BASE_SHIFT;
 
 188                 /* EEPROM access above 16k is unsupported */
 
 191                 nvm->word_size  = 1 << size;
 
 199  *  e1000_init_mac_params_82571 - Init MAC func ptrs.
 
 200  *  @hw: pointer to the HW structure
 
 202  *  This is a function pointer entry point called by the api module.
 
 204 static s32 e1000_init_mac_params_82571(struct e1000_adapter *adapter)
 
 206         struct e1000_hw *hw = &adapter->hw;
 
 207         struct e1000_mac_info *mac = &hw->mac;
 
 208         struct e1000_mac_operations *func = &mac->ops;
 
 211         switch (adapter->pdev->device) {
 
 212         case E1000_DEV_ID_82571EB_FIBER:
 
 213         case E1000_DEV_ID_82572EI_FIBER:
 
 214         case E1000_DEV_ID_82571EB_QUAD_FIBER:
 
 215                 hw->phy.media_type = e1000_media_type_fiber;
 
 217         case E1000_DEV_ID_82571EB_SERDES:
 
 218         case E1000_DEV_ID_82572EI_SERDES:
 
 219         case E1000_DEV_ID_82571EB_SERDES_DUAL:
 
 220         case E1000_DEV_ID_82571EB_SERDES_QUAD:
 
 221                 hw->phy.media_type = e1000_media_type_internal_serdes;
 
 224                 hw->phy.media_type = e1000_media_type_copper;
 
 228         /* Set mta register count */
 
 229         mac->mta_reg_count = 128;
 
 230         /* Set rar entry count */
 
 231         mac->rar_entry_count = E1000_RAR_ENTRIES;
 
 232         /* Set if manageability features are enabled. */
 
 233         mac->arc_subsystem_valid = (er32(FWSM) & E1000_FWSM_MODE_MASK) ? 1 : 0;
 
 236         switch (hw->phy.media_type) {
 
 237         case e1000_media_type_copper:
 
 238                 func->setup_physical_interface = e1000_setup_copper_link_82571;
 
 239                 func->check_for_link = e1000e_check_for_copper_link;
 
 240                 func->get_link_up_info = e1000e_get_speed_and_duplex_copper;
 
 242         case e1000_media_type_fiber:
 
 243                 func->setup_physical_interface =
 
 244                         e1000_setup_fiber_serdes_link_82571;
 
 245                 func->check_for_link = e1000e_check_for_fiber_link;
 
 246                 func->get_link_up_info =
 
 247                         e1000e_get_speed_and_duplex_fiber_serdes;
 
 249         case e1000_media_type_internal_serdes:
 
 250                 func->setup_physical_interface =
 
 251                         e1000_setup_fiber_serdes_link_82571;
 
 252                 func->check_for_link = e1000e_check_for_serdes_link;
 
 253                 func->get_link_up_info =
 
 254                         e1000e_get_speed_and_duplex_fiber_serdes;
 
 257                 return -E1000_ERR_CONFIG;
 
 261         switch (hw->mac.type) {
 
 263                 func->check_mng_mode = e1000_check_mng_mode_82574;
 
 264                 func->led_on = e1000_led_on_82574;
 
 267                 func->check_mng_mode = e1000e_check_mng_mode_generic;
 
 268                 func->led_on = e1000e_led_on_generic;
 
 275 static s32 e1000_get_variants_82571(struct e1000_adapter *adapter)
 
 277         struct e1000_hw *hw = &adapter->hw;
 
 278         static int global_quad_port_a; /* global port a indication */
 
 279         struct pci_dev *pdev = adapter->pdev;
 
 281         int is_port_b = er32(STATUS) & E1000_STATUS_FUNC_1;
 
 284         rc = e1000_init_mac_params_82571(adapter);
 
 288         rc = e1000_init_nvm_params_82571(hw);
 
 292         rc = e1000_init_phy_params_82571(hw);
 
 296         /* tag quad port adapters first, it's used below */
 
 297         switch (pdev->device) {
 
 298         case E1000_DEV_ID_82571EB_QUAD_COPPER:
 
 299         case E1000_DEV_ID_82571EB_QUAD_FIBER:
 
 300         case E1000_DEV_ID_82571EB_QUAD_COPPER_LP:
 
 301         case E1000_DEV_ID_82571PT_QUAD_COPPER:
 
 302                 adapter->flags |= FLAG_IS_QUAD_PORT;
 
 303                 /* mark the first port */
 
 304                 if (global_quad_port_a == 0)
 
 305                         adapter->flags |= FLAG_IS_QUAD_PORT_A;
 
 306                 /* Reset for multiple quad port adapters */
 
 307                 global_quad_port_a++;
 
 308                 if (global_quad_port_a == 4)
 
 309                         global_quad_port_a = 0;
 
 315         switch (adapter->hw.mac.type) {
 
 317                 /* these dual ports don't have WoL on port B at all */
 
 318                 if (((pdev->device == E1000_DEV_ID_82571EB_FIBER) ||
 
 319                      (pdev->device == E1000_DEV_ID_82571EB_SERDES) ||
 
 320                      (pdev->device == E1000_DEV_ID_82571EB_COPPER)) &&
 
 322                         adapter->flags &= ~FLAG_HAS_WOL;
 
 323                 /* quad ports only support WoL on port A */
 
 324                 if (adapter->flags & FLAG_IS_QUAD_PORT &&
 
 325                     (!(adapter->flags & FLAG_IS_QUAD_PORT_A)))
 
 326                         adapter->flags &= ~FLAG_HAS_WOL;
 
 327                 /* Does not support WoL on any port */
 
 328                 if (pdev->device == E1000_DEV_ID_82571EB_SERDES_QUAD)
 
 329                         adapter->flags &= ~FLAG_HAS_WOL;
 
 333                 if (pdev->device == E1000_DEV_ID_82573L) {
 
 334                         e1000_read_nvm(&adapter->hw, NVM_INIT_3GIO_3, 1,
 
 336                         if (eeprom_data & NVM_WORD1A_ASPM_MASK)
 
 337                                 adapter->flags &= ~FLAG_HAS_JUMBO_FRAMES;
 
 348  *  e1000_get_phy_id_82571 - Retrieve the PHY ID and revision
 
 349  *  @hw: pointer to the HW structure
 
 351  *  Reads the PHY registers and stores the PHY ID and possibly the PHY
 
 352  *  revision in the hardware structure.
 
 354 static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
 
 356         struct e1000_phy_info *phy = &hw->phy;
 
 360         switch (hw->mac.type) {
 
 364                  * The 82571 firmware may still be configuring the PHY.
 
 365                  * In this case, we cannot access the PHY until the
 
 366                  * configuration is done.  So we explicitly set the
 
 369                 phy->id = IGP01E1000_I_PHY_ID;
 
 372                 return e1000e_get_phy_id(hw);
 
 375                 ret_val = e1e_rphy(hw, PHY_ID1, &phy_id);
 
 379                 phy->id = (u32)(phy_id << 16);
 
 381                 ret_val = e1e_rphy(hw, PHY_ID2, &phy_id);
 
 385                 phy->id |= (u32)(phy_id);
 
 386                 phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
 
 389                 return -E1000_ERR_PHY;
 
 397  *  e1000_get_hw_semaphore_82571 - Acquire hardware semaphore
 
 398  *  @hw: pointer to the HW structure
 
 400  *  Acquire the HW semaphore to access the PHY or NVM
 
 402 static s32 e1000_get_hw_semaphore_82571(struct e1000_hw *hw)
 
 405         s32 timeout = hw->nvm.word_size + 1;
 
 408         /* Get the FW semaphore. */
 
 409         for (i = 0; i < timeout; i++) {
 
 411                 ew32(SWSM, swsm | E1000_SWSM_SWESMBI);
 
 413                 /* Semaphore acquired if bit latched */
 
 414                 if (er32(SWSM) & E1000_SWSM_SWESMBI)
 
 421                 /* Release semaphores */
 
 422                 e1000e_put_hw_semaphore(hw);
 
 423                 hw_dbg(hw, "Driver can't access the NVM\n");
 
 424                 return -E1000_ERR_NVM;
 
 431  *  e1000_put_hw_semaphore_82571 - Release hardware semaphore
 
 432  *  @hw: pointer to the HW structure
 
 434  *  Release hardware semaphore used to access the PHY or NVM
 
 436 static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw)
 
 442         swsm &= ~E1000_SWSM_SWESMBI;
 
 448  *  e1000_acquire_nvm_82571 - Request for access to the EEPROM
 
 449  *  @hw: pointer to the HW structure
 
 451  *  To gain access to the EEPROM, first we must obtain a hardware semaphore.
 
 452  *  Then for non-82573 hardware, set the EEPROM access request bit and wait
 
 453  *  for EEPROM access grant bit.  If the access grant bit is not set, release
 
 454  *  hardware semaphore.
 
 456 static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
 
 460         ret_val = e1000_get_hw_semaphore_82571(hw);
 
 464         if (hw->mac.type != e1000_82573 && hw->mac.type != e1000_82574)
 
 465                 ret_val = e1000e_acquire_nvm(hw);
 
 468                 e1000_put_hw_semaphore_82571(hw);
 
 474  *  e1000_release_nvm_82571 - Release exclusive access to EEPROM
 
 475  *  @hw: pointer to the HW structure
 
 477  *  Stop any current commands to the EEPROM and clear the EEPROM request bit.
 
 479 static void e1000_release_nvm_82571(struct e1000_hw *hw)
 
 481         e1000e_release_nvm(hw);
 
 482         e1000_put_hw_semaphore_82571(hw);
 
 486  *  e1000_write_nvm_82571 - Write to EEPROM using appropriate interface
 
 487  *  @hw: pointer to the HW structure
 
 488  *  @offset: offset within the EEPROM to be written to
 
 489  *  @words: number of words to write
 
 490  *  @data: 16 bit word(s) to be written to the EEPROM
 
 492  *  For non-82573 silicon, write data to EEPROM at offset using SPI interface.
 
 494  *  If e1000e_update_nvm_checksum is not called after this function, the
 
 495  *  EEPROM will most likely contain an invalid checksum.
 
 497 static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 words,
 
 502         switch (hw->mac.type) {
 
 505                 ret_val = e1000_write_nvm_eewr_82571(hw, offset, words, data);
 
 509                 ret_val = e1000e_write_nvm_spi(hw, offset, words, data);
 
 512                 ret_val = -E1000_ERR_NVM;
 
 520  *  e1000_update_nvm_checksum_82571 - Update EEPROM checksum
 
 521  *  @hw: pointer to the HW structure
 
 523  *  Updates the EEPROM checksum by reading/adding each word of the EEPROM
 
 524  *  up to the checksum.  Then calculates the EEPROM checksum and writes the
 
 525  *  value to the EEPROM.
 
 527 static s32 e1000_update_nvm_checksum_82571(struct e1000_hw *hw)
 
 533         ret_val = e1000e_update_nvm_checksum_generic(hw);
 
 538          * If our nvm is an EEPROM, then we're done
 
 539          * otherwise, commit the checksum to the flash NVM.
 
 541         if (hw->nvm.type != e1000_nvm_flash_hw)
 
 544         /* Check for pending operations. */
 
 545         for (i = 0; i < E1000_FLASH_UPDATES; i++) {
 
 547                 if ((er32(EECD) & E1000_EECD_FLUPD) == 0)
 
 551         if (i == E1000_FLASH_UPDATES)
 
 552                 return -E1000_ERR_NVM;
 
 554         /* Reset the firmware if using STM opcode. */
 
 555         if ((er32(FLOP) & 0xFF00) == E1000_STM_OPCODE) {
 
 557                  * The enabling of and the actual reset must be done
 
 558                  * in two write cycles.
 
 560                 ew32(HICR, E1000_HICR_FW_RESET_ENABLE);
 
 562                 ew32(HICR, E1000_HICR_FW_RESET);
 
 565         /* Commit the write to flash */
 
 566         eecd = er32(EECD) | E1000_EECD_FLUPD;
 
 569         for (i = 0; i < E1000_FLASH_UPDATES; i++) {
 
 571                 if ((er32(EECD) & E1000_EECD_FLUPD) == 0)
 
 575         if (i == E1000_FLASH_UPDATES)
 
 576                 return -E1000_ERR_NVM;
 
 582  *  e1000_validate_nvm_checksum_82571 - Validate EEPROM checksum
 
 583  *  @hw: pointer to the HW structure
 
 585  *  Calculates the EEPROM checksum by reading/adding each word of the EEPROM
 
 586  *  and then verifies that the sum of the EEPROM is equal to 0xBABA.
 
 588 static s32 e1000_validate_nvm_checksum_82571(struct e1000_hw *hw)
 
 590         if (hw->nvm.type == e1000_nvm_flash_hw)
 
 591                 e1000_fix_nvm_checksum_82571(hw);
 
 593         return e1000e_validate_nvm_checksum_generic(hw);
 
 597  *  e1000_write_nvm_eewr_82571 - Write to EEPROM for 82573 silicon
 
 598  *  @hw: pointer to the HW structure
 
 599  *  @offset: offset within the EEPROM to be written to
 
 600  *  @words: number of words to write
 
 601  *  @data: 16 bit word(s) to be written to the EEPROM
 
 603  *  After checking for invalid values, poll the EEPROM to ensure the previous
 
 604  *  command has completed before trying to write the next word.  After write
 
 605  *  poll for completion.
 
 607  *  If e1000e_update_nvm_checksum is not called after this function, the
 
 608  *  EEPROM will most likely contain an invalid checksum.
 
 610 static s32 e1000_write_nvm_eewr_82571(struct e1000_hw *hw, u16 offset,
 
 611                                       u16 words, u16 *data)
 
 613         struct e1000_nvm_info *nvm = &hw->nvm;
 
 619          * A check for invalid values:  offset too large, too many words,
 
 620          * and not enough words.
 
 622         if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) ||
 
 624                 hw_dbg(hw, "nvm parameter(s) out of bounds\n");
 
 625                 return -E1000_ERR_NVM;
 
 628         for (i = 0; i < words; i++) {
 
 629                 eewr = (data[i] << E1000_NVM_RW_REG_DATA) |
 
 630                        ((offset+i) << E1000_NVM_RW_ADDR_SHIFT) |
 
 631                        E1000_NVM_RW_REG_START;
 
 633                 ret_val = e1000e_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
 
 639                 ret_val = e1000e_poll_eerd_eewr_done(hw, E1000_NVM_POLL_WRITE);
 
 648  *  e1000_get_cfg_done_82571 - Poll for configuration done
 
 649  *  @hw: pointer to the HW structure
 
 651  *  Reads the management control register for the config done bit to be set.
 
 653 static s32 e1000_get_cfg_done_82571(struct e1000_hw *hw)
 
 655         s32 timeout = PHY_CFG_TIMEOUT;
 
 659                     E1000_NVM_CFG_DONE_PORT_0)
 
 665                 hw_dbg(hw, "MNG configuration cycle has not completed.\n");
 
 666                 return -E1000_ERR_RESET;
 
 673  *  e1000_set_d0_lplu_state_82571 - Set Low Power Linkup D0 state
 
 674  *  @hw: pointer to the HW structure
 
 675  *  @active: TRUE to enable LPLU, FALSE to disable
 
 677  *  Sets the LPLU D0 state according to the active flag.  When activating LPLU
 
 678  *  this function also disables smart speed and vice versa.  LPLU will not be
 
 679  *  activated unless the device autonegotiation advertisement meets standards
 
 680  *  of either 10 or 10/100 or 10/100/1000 at all duplexes.  This is a function
 
 681  *  pointer entry point only called by PHY setup routines.
 
 683 static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active)
 
 685         struct e1000_phy_info *phy = &hw->phy;
 
 689         ret_val = e1e_rphy(hw, IGP02E1000_PHY_POWER_MGMT, &data);
 
 694                 data |= IGP02E1000_PM_D0_LPLU;
 
 695                 ret_val = e1e_wphy(hw, IGP02E1000_PHY_POWER_MGMT, data);
 
 699                 /* When LPLU is enabled, we should disable SmartSpeed */
 
 700                 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG, &data);
 
 701                 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
 
 702                 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG, data);
 
 706                 data &= ~IGP02E1000_PM_D0_LPLU;
 
 707                 ret_val = e1e_wphy(hw, IGP02E1000_PHY_POWER_MGMT, data);
 
 709                  * LPLU and SmartSpeed are mutually exclusive.  LPLU is used
 
 710                  * during Dx states where the power conservation is most
 
 711                  * important.  During driver activity we should enable
 
 712                  * SmartSpeed, so performance is maintained.
 
 714                 if (phy->smart_speed == e1000_smart_speed_on) {
 
 715                         ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG,
 
 720                         data |= IGP01E1000_PSCFR_SMART_SPEED;
 
 721                         ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG,
 
 725                 } else if (phy->smart_speed == e1000_smart_speed_off) {
 
 726                         ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG,
 
 731                         data &= ~IGP01E1000_PSCFR_SMART_SPEED;
 
 732                         ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG,
 
 743  *  e1000_reset_hw_82571 - Reset hardware
 
 744  *  @hw: pointer to the HW structure
 
 746  *  This resets the hardware into a known state.  This is a
 
 747  *  function pointer entry point called by the api module.
 
 749 static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
 
 759          * Prevent the PCI-E bus from sticking if there is no TLP connection
 
 760          * on the last TLP read/write transaction when MAC is reset.
 
 762         ret_val = e1000e_disable_pcie_master(hw);
 
 764                 hw_dbg(hw, "PCI-E Master disable polling has failed.\n");
 
 766         hw_dbg(hw, "Masking off all interrupts\n");
 
 767         ew32(IMC, 0xffffffff);
 
 770         ew32(TCTL, E1000_TCTL_PSP);
 
 776          * Must acquire the MDIO ownership before MAC reset.
 
 777          * Ownership defaults to firmware after a reset.
 
 779         if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) {
 
 780                 extcnf_ctrl = er32(EXTCNF_CTRL);
 
 781                 extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
 
 784                         ew32(EXTCNF_CTRL, extcnf_ctrl);
 
 785                         extcnf_ctrl = er32(EXTCNF_CTRL);
 
 787                         if (extcnf_ctrl & E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP)
 
 790                         extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
 
 794                 } while (i < MDIO_OWNERSHIP_TIMEOUT);
 
 799         hw_dbg(hw, "Issuing a global reset to MAC\n");
 
 800         ew32(CTRL, ctrl | E1000_CTRL_RST);
 
 802         if (hw->nvm.type == e1000_nvm_flash_hw) {
 
 804                 ctrl_ext = er32(CTRL_EXT);
 
 805                 ctrl_ext |= E1000_CTRL_EXT_EE_RST;
 
 806                 ew32(CTRL_EXT, ctrl_ext);
 
 810         ret_val = e1000e_get_auto_rd_done(hw);
 
 812                 /* We don't want to continue accessing MAC registers. */
 
 816          * Phy configuration from NVM just starts after EECD_AUTO_RD is set.
 
 817          * Need to wait for Phy configuration completion before accessing
 
 820         if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574)
 
 823         /* Clear any pending interrupt events. */
 
 824         ew32(IMC, 0xffffffff);
 
 827         if (hw->mac.type == e1000_82571 &&
 
 828                 hw->dev_spec.e82571.alt_mac_addr_is_present)
 
 829                         e1000e_set_laa_state_82571(hw, true);
 
 835  *  e1000_init_hw_82571 - Initialize hardware
 
 836  *  @hw: pointer to the HW structure
 
 838  *  This inits the hardware readying it for operation.
 
 840 static s32 e1000_init_hw_82571(struct e1000_hw *hw)
 
 842         struct e1000_mac_info *mac = &hw->mac;
 
 846         u16 rar_count = mac->rar_entry_count;
 
 848         e1000_initialize_hw_bits_82571(hw);
 
 850         /* Initialize identification LED */
 
 851         ret_val = e1000e_id_led_init(hw);
 
 853                 hw_dbg(hw, "Error initializing identification LED\n");
 
 857         /* Disabling VLAN filtering */
 
 858         hw_dbg(hw, "Initializing the IEEE VLAN\n");
 
 859         e1000e_clear_vfta(hw);
 
 861         /* Setup the receive address. */
 
 863          * If, however, a locally administered address was assigned to the
 
 864          * 82571, we must reserve a RAR for it to work around an issue where
 
 865          * resetting one port will reload the MAC on the other port.
 
 867         if (e1000e_get_laa_state_82571(hw))
 
 869         e1000e_init_rx_addrs(hw, rar_count);
 
 871         /* Zero out the Multicast HASH table */
 
 872         hw_dbg(hw, "Zeroing the MTA\n");
 
 873         for (i = 0; i < mac->mta_reg_count; i++)
 
 874                 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
 
 876         /* Setup link and flow control */
 
 877         ret_val = e1000_setup_link_82571(hw);
 
 879         /* Set the transmit descriptor write-back policy */
 
 880         reg_data = er32(TXDCTL(0));
 
 881         reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
 
 882                    E1000_TXDCTL_FULL_TX_DESC_WB |
 
 883                    E1000_TXDCTL_COUNT_DESC;
 
 884         ew32(TXDCTL(0), reg_data);
 
 886         /* ...for both queues. */
 
 887         if (mac->type != e1000_82573 && mac->type != e1000_82574) {
 
 888                 reg_data = er32(TXDCTL(1));
 
 889                 reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
 
 890                            E1000_TXDCTL_FULL_TX_DESC_WB |
 
 891                            E1000_TXDCTL_COUNT_DESC;
 
 892                 ew32(TXDCTL(1), reg_data);
 
 894                 e1000e_enable_tx_pkt_filtering(hw);
 
 895                 reg_data = er32(GCR);
 
 896                 reg_data |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
 
 901          * Clear all of the statistics registers (clear on read).  It is
 
 902          * important that we do this after we have tried to establish link
 
 903          * because the symbol error count will increment wildly if there
 
 906         e1000_clear_hw_cntrs_82571(hw);
 
 912  *  e1000_initialize_hw_bits_82571 - Initialize hardware-dependent bits
 
 913  *  @hw: pointer to the HW structure
 
 915  *  Initializes required hardware-dependent bits needed for normal operation.
 
 917 static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
 
 921         /* Transmit Descriptor Control 0 */
 
 922         reg = er32(TXDCTL(0));
 
 924         ew32(TXDCTL(0), reg);
 
 926         /* Transmit Descriptor Control 1 */
 
 927         reg = er32(TXDCTL(1));
 
 929         ew32(TXDCTL(1), reg);
 
 931         /* Transmit Arbitration Control 0 */
 
 933         reg &= ~(0xF << 27); /* 30:27 */
 
 934         switch (hw->mac.type) {
 
 937                 reg |= (1 << 23) | (1 << 24) | (1 << 25) | (1 << 26);
 
 944         /* Transmit Arbitration Control 1 */
 
 946         switch (hw->mac.type) {
 
 949                 reg &= ~((1 << 29) | (1 << 30));
 
 950                 reg |= (1 << 22) | (1 << 24) | (1 << 25) | (1 << 26);
 
 951                 if (er32(TCTL) & E1000_TCTL_MULR)
 
 962         if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) {
 
 968         /* Extended Device Control */
 
 969         if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) {
 
 970                 reg = er32(CTRL_EXT);
 
 976         /* PCI-Ex Control Register */
 
 977         if (hw->mac.type == e1000_82574) {
 
 987  *  e1000e_clear_vfta - Clear VLAN filter table
 
 988  *  @hw: pointer to the HW structure
 
 990  *  Clears the register array which contains the VLAN filter table by
 
 991  *  setting all the values to 0.
 
 993 void e1000e_clear_vfta(struct e1000_hw *hw)
 
 998         u32 vfta_bit_in_reg = 0;
 
1000         if (hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) {
 
1001                 if (hw->mng_cookie.vlan_id != 0) {
 
1003                          * The VFTA is a 4096b bit-field, each identifying
 
1004                          * a single VLAN ID.  The following operations
 
1005                          * determine which 32b entry (i.e. offset) into the
 
1006                          * array we want to set the VLAN ID (i.e. bit) of
 
1007                          * the manageability unit.
 
1009                         vfta_offset = (hw->mng_cookie.vlan_id >>
 
1010                                        E1000_VFTA_ENTRY_SHIFT) &
 
1011                                       E1000_VFTA_ENTRY_MASK;
 
1012                         vfta_bit_in_reg = 1 << (hw->mng_cookie.vlan_id &
 
1013                                                E1000_VFTA_ENTRY_BIT_SHIFT_MASK);
 
1016         for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
 
1018                  * If the offset we want to clear is the same offset of the
 
1019                  * manageability VLAN ID, then clear all bits except that of
 
1020                  * the manageability unit.
 
1022                 vfta_value = (offset == vfta_offset) ? vfta_bit_in_reg : 0;
 
1023                 E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, vfta_value);
 
1029  *  e1000_check_mng_mode_82574 - Check manageability is enabled
 
1030  *  @hw: pointer to the HW structure
 
1032  *  Reads the NVM Initialization Control Word 2 and returns true
 
1033  *  (>0) if any manageability is enabled, else false (0).
 
1035 static bool e1000_check_mng_mode_82574(struct e1000_hw *hw)
 
1039         e1000_read_nvm(hw, NVM_INIT_CONTROL2_REG, 1, &data);
 
1040         return (data & E1000_NVM_INIT_CTRL2_MNGM) != 0;
 
1044  *  e1000_led_on_82574 - Turn LED on
 
1045  *  @hw: pointer to the HW structure
 
1049 static s32 e1000_led_on_82574(struct e1000_hw *hw)
 
1054         ctrl = hw->mac.ledctl_mode2;
 
1055         if (!(E1000_STATUS_LU & er32(STATUS))) {
 
1057                  * If no link, then turn LED on by setting the invert bit
 
1058                  * for each LED that's "on" (0x0E) in ledctl_mode2.
 
1060                 for (i = 0; i < 4; i++)
 
1061                         if (((hw->mac.ledctl_mode2 >> (i * 8)) & 0xFF) ==
 
1062                             E1000_LEDCTL_MODE_LED_ON)
 
1063                                 ctrl |= (E1000_LEDCTL_LED0_IVRT << (i * 8));
 
1071  *  e1000_update_mc_addr_list_82571 - Update Multicast addresses
 
1072  *  @hw: pointer to the HW structure
 
1073  *  @mc_addr_list: array of multicast addresses to program
 
1074  *  @mc_addr_count: number of multicast addresses to program
 
1075  *  @rar_used_count: the first RAR register free to program
 
1076  *  @rar_count: total number of supported Receive Address Registers
 
1078  *  Updates the Receive Address Registers and Multicast Table Array.
 
1079  *  The caller must have a packed mc_addr_list of multicast addresses.
 
1080  *  The parameter rar_count will usually be hw->mac.rar_entry_count
 
1081  *  unless there are workarounds that change this.
 
1083 static void e1000_update_mc_addr_list_82571(struct e1000_hw *hw,
 
1089         if (e1000e_get_laa_state_82571(hw))
 
1092         e1000e_update_mc_addr_list_generic(hw, mc_addr_list, mc_addr_count,
 
1093                                            rar_used_count, rar_count);
 
1097  *  e1000_setup_link_82571 - Setup flow control and link settings
 
1098  *  @hw: pointer to the HW structure
 
1100  *  Determines which flow control settings to use, then configures flow
 
1101  *  control.  Calls the appropriate media-specific link configuration
 
1102  *  function.  Assuming the adapter has a valid link partner, a valid link
 
1103  *  should be established.  Assumes the hardware has previously been reset
 
1104  *  and the transmitter and receiver are not enabled.
 
1106 static s32 e1000_setup_link_82571(struct e1000_hw *hw)
 
1109          * 82573 does not have a word in the NVM to determine
 
1110          * the default flow control setting, so we explicitly
 
1113         if ((hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) &&
 
1114             hw->fc.type == e1000_fc_default)
 
1115                 hw->fc.type = e1000_fc_full;
 
1117         return e1000e_setup_link(hw);
 
1121  *  e1000_setup_copper_link_82571 - Configure copper link settings
 
1122  *  @hw: pointer to the HW structure
 
1124  *  Configures the link for auto-neg or forced speed and duplex.  Then we check
 
1125  *  for link, once link is established calls to configure collision distance
 
1126  *  and flow control are called.
 
1128 static s32 e1000_setup_copper_link_82571(struct e1000_hw *hw)
 
1135         ctrl |= E1000_CTRL_SLU;
 
1136         ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
 
1139         switch (hw->phy.type) {
 
1142                 ret_val = e1000e_copper_link_setup_m88(hw);
 
1144         case e1000_phy_igp_2:
 
1145                 ret_val = e1000e_copper_link_setup_igp(hw);
 
1146                 /* Setup activity LED */
 
1147                 led_ctrl = er32(LEDCTL);
 
1148                 led_ctrl &= IGP_ACTIVITY_LED_MASK;
 
1149                 led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
 
1150                 ew32(LEDCTL, led_ctrl);
 
1153                 return -E1000_ERR_PHY;
 
1160         ret_val = e1000e_setup_copper_link(hw);
 
1166  *  e1000_setup_fiber_serdes_link_82571 - Setup link for fiber/serdes
 
1167  *  @hw: pointer to the HW structure
 
1169  *  Configures collision distance and flow control for fiber and serdes links.
 
1170  *  Upon successful setup, poll for link.
 
1172 static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw)
 
1174         switch (hw->mac.type) {
 
1178                  * If SerDes loopback mode is entered, there is no form
 
1179                  * of reset to take the adapter out of that mode.  So we
 
1180                  * have to explicitly take the adapter out of loopback
 
1181                  * mode.  This prevents drivers from twiddling their thumbs
 
1182                  * if another tool failed to take it out of loopback mode.
 
1184                 ew32(SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
 
1190         return e1000e_setup_fiber_serdes_link(hw);
 
1194  *  e1000_valid_led_default_82571 - Verify a valid default LED config
 
1195  *  @hw: pointer to the HW structure
 
1196  *  @data: pointer to the NVM (EEPROM)
 
1198  *  Read the EEPROM for the current default LED configuration.  If the
 
1199  *  LED configuration is not valid, set to a valid LED configuration.
 
1201 static s32 e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data)
 
1205         ret_val = e1000_read_nvm(hw, NVM_ID_LED_SETTINGS, 1, data);
 
1207                 hw_dbg(hw, "NVM Read Error\n");
 
1211         if ((hw->mac.type == e1000_82573 || hw->mac.type == e1000_82574) &&
 
1212             *data == ID_LED_RESERVED_F746)
 
1213                 *data = ID_LED_DEFAULT_82573;
 
1214         else if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF)
 
1215                 *data = ID_LED_DEFAULT;
 
1221  *  e1000e_get_laa_state_82571 - Get locally administered address state
 
1222  *  @hw: pointer to the HW structure
 
1224  *  Retrieve and return the current locally administered address state.
 
1226 bool e1000e_get_laa_state_82571(struct e1000_hw *hw)
 
1228         if (hw->mac.type != e1000_82571)
 
1231         return hw->dev_spec.e82571.laa_is_present;
 
1235  *  e1000e_set_laa_state_82571 - Set locally administered address state
 
1236  *  @hw: pointer to the HW structure
 
1237  *  @state: enable/disable locally administered address
 
1239  *  Enable/Disable the current locally administers address state.
 
1241 void e1000e_set_laa_state_82571(struct e1000_hw *hw, bool state)
 
1243         if (hw->mac.type != e1000_82571)
 
1246         hw->dev_spec.e82571.laa_is_present = state;
 
1248         /* If workaround is activated... */
 
1251                  * Hold a copy of the LAA in RAR[14] This is done so that
 
1252                  * between the time RAR[0] gets clobbered and the time it
 
1253                  * gets fixed, the actual LAA is in one of the RARs and no
 
1254                  * incoming packets directed to this port are dropped.
 
1255                  * Eventually the LAA will be in RAR[0] and RAR[14].
 
1257                 e1000e_rar_set(hw, hw->mac.addr, hw->mac.rar_entry_count - 1);
 
1261  *  e1000_fix_nvm_checksum_82571 - Fix EEPROM checksum
 
1262  *  @hw: pointer to the HW structure
 
1264  *  Verifies that the EEPROM has completed the update.  After updating the
 
1265  *  EEPROM, we need to check bit 15 in work 0x23 for the checksum fix.  If
 
1266  *  the checksum fix is not implemented, we need to set the bit and update
 
1267  *  the checksum.  Otherwise, if bit 15 is set and the checksum is incorrect,
 
1268  *  we need to return bad checksum.
 
1270 static s32 e1000_fix_nvm_checksum_82571(struct e1000_hw *hw)
 
1272         struct e1000_nvm_info *nvm = &hw->nvm;
 
1276         if (nvm->type != e1000_nvm_flash_hw)
 
1280          * Check bit 4 of word 10h.  If it is 0, firmware is done updating
 
1281          * 10h-12h.  Checksum may need to be fixed.
 
1283         ret_val = e1000_read_nvm(hw, 0x10, 1, &data);
 
1287         if (!(data & 0x10)) {
 
1289                  * Read 0x23 and check bit 15.  This bit is a 1
 
1290                  * when the checksum has already been fixed.  If
 
1291                  * the checksum is still wrong and this bit is a
 
1292                  * 1, we need to return bad checksum.  Otherwise,
 
1293                  * we need to set this bit to a 1 and update the
 
1296                 ret_val = e1000_read_nvm(hw, 0x23, 1, &data);
 
1300                 if (!(data & 0x8000)) {
 
1302                         ret_val = e1000_write_nvm(hw, 0x23, 1, &data);
 
1305                         ret_val = e1000e_update_nvm_checksum(hw);
 
1313  *  e1000_clear_hw_cntrs_82571 - Clear device specific hardware counters
 
1314  *  @hw: pointer to the HW structure
 
1316  *  Clears the hardware counters by reading the counter registers.
 
1318 static void e1000_clear_hw_cntrs_82571(struct e1000_hw *hw)
 
1322         e1000e_clear_hw_cntrs_base(hw);
 
1325         temp = er32(PRC127);
 
1326         temp = er32(PRC255);
 
1327         temp = er32(PRC511);
 
1328         temp = er32(PRC1023);
 
1329         temp = er32(PRC1522);
 
1331         temp = er32(PTC127);
 
1332         temp = er32(PTC255);
 
1333         temp = er32(PTC511);
 
1334         temp = er32(PTC1023);
 
1335         temp = er32(PTC1522);
 
1337         temp = er32(ALGNERRC);
 
1338         temp = er32(RXERRC);
 
1340         temp = er32(CEXTERR);
 
1342         temp = er32(TSCTFC);
 
1344         temp = er32(MGTPRC);
 
1345         temp = er32(MGTPDC);
 
1346         temp = er32(MGTPTC);
 
1349         temp = er32(ICRXOC);
 
1351         temp = er32(ICRXPTC);
 
1352         temp = er32(ICRXATC);
 
1353         temp = er32(ICTXPTC);
 
1354         temp = er32(ICTXATC);
 
1355         temp = er32(ICTXQEC);
 
1356         temp = er32(ICTXQMTC);
 
1357         temp = er32(ICRXDMTC);
 
1360 static struct e1000_mac_operations e82571_mac_ops = {
 
1361         /* .check_mng_mode: mac type dependent */
 
1362         /* .check_for_link: media type dependent */
 
1363         .cleanup_led            = e1000e_cleanup_led_generic,
 
1364         .clear_hw_cntrs         = e1000_clear_hw_cntrs_82571,
 
1365         .get_bus_info           = e1000e_get_bus_info_pcie,
 
1366         /* .get_link_up_info: media type dependent */
 
1367         /* .led_on: mac type dependent */
 
1368         .led_off                = e1000e_led_off_generic,
 
1369         .update_mc_addr_list    = e1000_update_mc_addr_list_82571,
 
1370         .reset_hw               = e1000_reset_hw_82571,
 
1371         .init_hw                = e1000_init_hw_82571,
 
1372         .setup_link             = e1000_setup_link_82571,
 
1373         /* .setup_physical_interface: media type dependent */
 
1376 static struct e1000_phy_operations e82_phy_ops_igp = {
 
1377         .acquire_phy            = e1000_get_hw_semaphore_82571,
 
1378         .check_reset_block      = e1000e_check_reset_block_generic,
 
1380         .force_speed_duplex     = e1000e_phy_force_speed_duplex_igp,
 
1381         .get_cfg_done           = e1000_get_cfg_done_82571,
 
1382         .get_cable_length       = e1000e_get_cable_length_igp_2,
 
1383         .get_phy_info           = e1000e_get_phy_info_igp,
 
1384         .read_phy_reg           = e1000e_read_phy_reg_igp,
 
1385         .release_phy            = e1000_put_hw_semaphore_82571,
 
1386         .reset_phy              = e1000e_phy_hw_reset_generic,
 
1387         .set_d0_lplu_state      = e1000_set_d0_lplu_state_82571,
 
1388         .set_d3_lplu_state      = e1000e_set_d3_lplu_state,
 
1389         .write_phy_reg          = e1000e_write_phy_reg_igp,
 
1392 static struct e1000_phy_operations e82_phy_ops_m88 = {
 
1393         .acquire_phy            = e1000_get_hw_semaphore_82571,
 
1394         .check_reset_block      = e1000e_check_reset_block_generic,
 
1395         .commit_phy             = e1000e_phy_sw_reset,
 
1396         .force_speed_duplex     = e1000e_phy_force_speed_duplex_m88,
 
1397         .get_cfg_done           = e1000e_get_cfg_done,
 
1398         .get_cable_length       = e1000e_get_cable_length_m88,
 
1399         .get_phy_info           = e1000e_get_phy_info_m88,
 
1400         .read_phy_reg           = e1000e_read_phy_reg_m88,
 
1401         .release_phy            = e1000_put_hw_semaphore_82571,
 
1402         .reset_phy              = e1000e_phy_hw_reset_generic,
 
1403         .set_d0_lplu_state      = e1000_set_d0_lplu_state_82571,
 
1404         .set_d3_lplu_state      = e1000e_set_d3_lplu_state,
 
1405         .write_phy_reg          = e1000e_write_phy_reg_m88,
 
1408 static struct e1000_phy_operations e82_phy_ops_bm = {
 
1409         .acquire_phy            = e1000_get_hw_semaphore_82571,
 
1410         .check_reset_block      = e1000e_check_reset_block_generic,
 
1411         .commit_phy             = e1000e_phy_sw_reset,
 
1412         .force_speed_duplex     = e1000e_phy_force_speed_duplex_m88,
 
1413         .get_cfg_done           = e1000e_get_cfg_done,
 
1414         .get_cable_length       = e1000e_get_cable_length_m88,
 
1415         .get_phy_info           = e1000e_get_phy_info_m88,
 
1416         .read_phy_reg           = e1000e_read_phy_reg_bm2,
 
1417         .release_phy            = e1000_put_hw_semaphore_82571,
 
1418         .reset_phy              = e1000e_phy_hw_reset_generic,
 
1419         .set_d0_lplu_state      = e1000_set_d0_lplu_state_82571,
 
1420         .set_d3_lplu_state      = e1000e_set_d3_lplu_state,
 
1421         .write_phy_reg          = e1000e_write_phy_reg_bm2,
 
1424 static struct e1000_nvm_operations e82571_nvm_ops = {
 
1425         .acquire_nvm            = e1000_acquire_nvm_82571,
 
1426         .read_nvm               = e1000e_read_nvm_eerd,
 
1427         .release_nvm            = e1000_release_nvm_82571,
 
1428         .update_nvm             = e1000_update_nvm_checksum_82571,
 
1429         .valid_led_default      = e1000_valid_led_default_82571,
 
1430         .validate_nvm           = e1000_validate_nvm_checksum_82571,
 
1431         .write_nvm              = e1000_write_nvm_82571,
 
1434 struct e1000_info e1000_82571_info = {
 
1436         .flags                  = FLAG_HAS_HW_VLAN_FILTER
 
1437                                   | FLAG_HAS_JUMBO_FRAMES
 
1439                                   | FLAG_APME_IN_CTRL3
 
1440                                   | FLAG_RX_CSUM_ENABLED
 
1441                                   | FLAG_HAS_CTRLEXT_ON_LOAD
 
1442                                   | FLAG_HAS_SMART_POWER_DOWN
 
1443                                   | FLAG_RESET_OVERWRITES_LAA /* errata */
 
1444                                   | FLAG_TARC_SPEED_MODE_BIT /* errata */
 
1445                                   | FLAG_APME_CHECK_PORT_B,
 
1447         .get_variants           = e1000_get_variants_82571,
 
1448         .mac_ops                = &e82571_mac_ops,
 
1449         .phy_ops                = &e82_phy_ops_igp,
 
1450         .nvm_ops                = &e82571_nvm_ops,
 
1453 struct e1000_info e1000_82572_info = {
 
1455         .flags                  = FLAG_HAS_HW_VLAN_FILTER
 
1456                                   | FLAG_HAS_JUMBO_FRAMES
 
1458                                   | FLAG_APME_IN_CTRL3
 
1459                                   | FLAG_RX_CSUM_ENABLED
 
1460                                   | FLAG_HAS_CTRLEXT_ON_LOAD
 
1461                                   | FLAG_TARC_SPEED_MODE_BIT, /* errata */
 
1463         .get_variants           = e1000_get_variants_82571,
 
1464         .mac_ops                = &e82571_mac_ops,
 
1465         .phy_ops                = &e82_phy_ops_igp,
 
1466         .nvm_ops                = &e82571_nvm_ops,
 
1469 struct e1000_info e1000_82573_info = {
 
1471         .flags                  = FLAG_HAS_HW_VLAN_FILTER
 
1472                                   | FLAG_HAS_JUMBO_FRAMES
 
1474                                   | FLAG_APME_IN_CTRL3
 
1475                                   | FLAG_RX_CSUM_ENABLED
 
1476                                   | FLAG_HAS_SMART_POWER_DOWN
 
1479                                   | FLAG_HAS_SWSM_ON_LOAD,
 
1481         .get_variants           = e1000_get_variants_82571,
 
1482         .mac_ops                = &e82571_mac_ops,
 
1483         .phy_ops                = &e82_phy_ops_m88,
 
1484         .nvm_ops                = &e82571_nvm_ops,
 
1487 struct e1000_info e1000_82574_info = {
 
1489         .flags                  = FLAG_HAS_HW_VLAN_FILTER
 
1491                                   | FLAG_HAS_JUMBO_FRAMES
 
1493                                   | FLAG_APME_IN_CTRL3
 
1494                                   | FLAG_RX_CSUM_ENABLED
 
1495                                   | FLAG_HAS_SMART_POWER_DOWN
 
1497                                   | FLAG_HAS_CTRLEXT_ON_LOAD,
 
1499         .get_variants           = e1000_get_variants_82571,
 
1500         .mac_ops                = &e82571_mac_ops,
 
1501         .phy_ops                = &e82_phy_ops_bm,
 
1502         .nvm_ops                = &e82571_nvm_ops,