devices/e1000/e1000_hw-2.6.13-ethercat.c
branchstable-1.3
changeset 1744 7bc131b92039
equal deleted inserted replaced
1743:1a7067207637 1744:7bc131b92039
       
     1 /*******************************************************************************
       
     2 
       
     3   
       
     4   Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved.
       
     5   
       
     6   This program is free software; you can redistribute it and/or modify it 
       
     7   under the terms of the GNU General Public License as published by the Free 
       
     8   Software Foundation; either version 2 of the License, or (at your option) 
       
     9   any later version.
       
    10   
       
    11   This program is distributed in the hope that it will be useful, but WITHOUT 
       
    12   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
       
    13   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
       
    14   more details.
       
    15   
       
    16   You should have received a copy of the GNU General Public License along with
       
    17   this program; if not, write to the Free Software Foundation, Inc., 59 
       
    18   Temple Place - Suite 330, Boston, MA  02111-1307, USA.
       
    19   
       
    20   The full GNU General Public License is included in this distribution in the
       
    21   file called LICENSE.
       
    22   
       
    23   Contact Information:
       
    24   Linux NICS <linux.nics@intel.com>
       
    25   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
       
    26 
       
    27 *******************************************************************************/
       
    28 
       
    29 /* e1000_hw.c
       
    30  * Shared functions for accessing and configuring the MAC
       
    31  */
       
    32 
       
    33 #include "e1000_hw-2.6.13-ethercat.h"
       
    34 
       
    35 static int32_t e1000_set_phy_type(struct e1000_hw *hw);
       
    36 static void e1000_phy_init_script(struct e1000_hw *hw);
       
    37 static int32_t e1000_setup_copper_link(struct e1000_hw *hw);
       
    38 static int32_t e1000_setup_fiber_serdes_link(struct e1000_hw *hw);
       
    39 static int32_t e1000_adjust_serdes_amplitude(struct e1000_hw *hw);
       
    40 static int32_t e1000_phy_force_speed_duplex(struct e1000_hw *hw);
       
    41 static int32_t e1000_config_mac_to_phy(struct e1000_hw *hw);
       
    42 static void e1000_raise_mdi_clk(struct e1000_hw *hw, uint32_t *ctrl);
       
    43 static void e1000_lower_mdi_clk(struct e1000_hw *hw, uint32_t *ctrl);
       
    44 static void e1000_shift_out_mdi_bits(struct e1000_hw *hw, uint32_t data,
       
    45                                      uint16_t count);
       
    46 static uint16_t e1000_shift_in_mdi_bits(struct e1000_hw *hw);
       
    47 static int32_t e1000_phy_reset_dsp(struct e1000_hw *hw);
       
    48 static int32_t e1000_write_eeprom_spi(struct e1000_hw *hw, uint16_t offset,
       
    49                                       uint16_t words, uint16_t *data);
       
    50 static int32_t e1000_write_eeprom_microwire(struct e1000_hw *hw,
       
    51                                             uint16_t offset, uint16_t words,
       
    52                                             uint16_t *data);
       
    53 static int32_t e1000_spi_eeprom_ready(struct e1000_hw *hw);
       
    54 static void e1000_raise_ee_clk(struct e1000_hw *hw, uint32_t *eecd);
       
    55 static void e1000_lower_ee_clk(struct e1000_hw *hw, uint32_t *eecd);
       
    56 static void e1000_shift_out_ee_bits(struct e1000_hw *hw, uint16_t data,
       
    57                                     uint16_t count);
       
    58 static int32_t e1000_write_phy_reg_ex(struct e1000_hw *hw, uint32_t reg_addr,
       
    59                                       uint16_t phy_data);
       
    60 static int32_t e1000_read_phy_reg_ex(struct e1000_hw *hw,uint32_t reg_addr,
       
    61                                      uint16_t *phy_data);
       
    62 static uint16_t e1000_shift_in_ee_bits(struct e1000_hw *hw, uint16_t count);
       
    63 static int32_t e1000_acquire_eeprom(struct e1000_hw *hw);
       
    64 static void e1000_release_eeprom(struct e1000_hw *hw);
       
    65 static void e1000_standby_eeprom(struct e1000_hw *hw);
       
    66 static int32_t e1000_set_vco_speed(struct e1000_hw *hw);
       
    67 static int32_t e1000_polarity_reversal_workaround(struct e1000_hw *hw);
       
    68 static int32_t e1000_set_phy_mode(struct e1000_hw *hw);
       
    69 static int32_t e1000_host_if_read_cookie(struct e1000_hw *hw, uint8_t *buffer);
       
    70 static uint8_t e1000_calculate_mng_checksum(char *buffer, uint32_t length);
       
    71 
       
    72 /* IGP cable length table */
       
    73 static const
       
    74 uint16_t e1000_igp_cable_length_table[IGP01E1000_AGC_LENGTH_TABLE_SIZE] =
       
    75     { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
       
    76       5, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 25, 25, 25,
       
    77       25, 25, 25, 25, 30, 30, 30, 30, 40, 40, 40, 40, 40, 40, 40, 40,
       
    78       40, 50, 50, 50, 50, 50, 50, 50, 60, 60, 60, 60, 60, 60, 60, 60,
       
    79       60, 70, 70, 70, 70, 70, 70, 80, 80, 80, 80, 80, 80, 90, 90, 90,
       
    80       90, 90, 90, 90, 90, 90, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
       
    81       100, 100, 100, 100, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
       
    82       110, 110, 110, 110, 110, 110, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120};
       
    83 
       
    84 static const
       
    85 uint16_t e1000_igp_2_cable_length_table[IGP02E1000_AGC_LENGTH_TABLE_SIZE] =
       
    86     { 8, 13, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43,
       
    87       22, 24, 27, 30, 32, 35, 37, 40, 42, 44, 47, 49, 51, 54, 56, 58,
       
    88       32, 35, 38, 41, 44, 47, 50, 53, 55, 58, 61, 63, 66, 69, 71, 74,
       
    89       43, 47, 51, 54, 58, 61, 64, 67, 71, 74, 77, 80, 82, 85, 88, 90,
       
    90       57, 62, 66, 70, 74, 77, 81, 85, 88, 91, 94, 97, 100, 103, 106, 108,
       
    91       73, 78, 82, 87, 91, 95, 98, 102, 105, 109, 112, 114, 117, 119, 122, 124,
       
    92       91, 96, 101, 105, 109, 113, 116, 119, 122, 125, 127, 128, 128, 128, 128, 128,
       
    93       108, 113, 117, 121, 124, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128};
       
    94 
       
    95 
       
    96 /******************************************************************************
       
    97  * Set the phy type member in the hw struct.
       
    98  *
       
    99  * hw - Struct containing variables accessed by shared code
       
   100  *****************************************************************************/
       
   101 int32_t
       
   102 e1000_set_phy_type(struct e1000_hw *hw)
       
   103 {
       
   104     DEBUGFUNC("e1000_set_phy_type");
       
   105 
       
   106     if(hw->mac_type == e1000_undefined)
       
   107         return -E1000_ERR_PHY_TYPE;
       
   108 
       
   109     switch(hw->phy_id) {
       
   110     case M88E1000_E_PHY_ID:
       
   111     case M88E1000_I_PHY_ID:
       
   112     case M88E1011_I_PHY_ID:
       
   113     case M88E1111_I_PHY_ID:
       
   114         hw->phy_type = e1000_phy_m88;
       
   115         break;
       
   116     case IGP01E1000_I_PHY_ID:
       
   117         if(hw->mac_type == e1000_82541 ||
       
   118            hw->mac_type == e1000_82541_rev_2 ||
       
   119            hw->mac_type == e1000_82547 ||
       
   120            hw->mac_type == e1000_82547_rev_2) {
       
   121             hw->phy_type = e1000_phy_igp;
       
   122             break;
       
   123         }
       
   124         /* Fall Through */
       
   125     default:
       
   126         /* Should never have loaded on this device */
       
   127         hw->phy_type = e1000_phy_undefined;
       
   128         return -E1000_ERR_PHY_TYPE;
       
   129     }
       
   130 
       
   131     return E1000_SUCCESS;
       
   132 }
       
   133 
       
   134 /******************************************************************************
       
   135  * IGP phy init script - initializes the GbE PHY
       
   136  *
       
   137  * hw - Struct containing variables accessed by shared code
       
   138  *****************************************************************************/
       
   139 static void
       
   140 e1000_phy_init_script(struct e1000_hw *hw)
       
   141 {
       
   142     uint32_t ret_val;
       
   143     uint16_t phy_saved_data;
       
   144 
       
   145     DEBUGFUNC("e1000_phy_init_script");
       
   146 
       
   147     if(hw->phy_init_script) {
       
   148         msec_delay(20);
       
   149 
       
   150         /* Save off the current value of register 0x2F5B to be restored at
       
   151          * the end of this routine. */
       
   152         ret_val = e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
       
   153 
       
   154         /* Disabled the PHY transmitter */
       
   155         e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
       
   156 
       
   157         msec_delay(20);
       
   158 
       
   159         e1000_write_phy_reg(hw,0x0000,0x0140);
       
   160 
       
   161         msec_delay(5);
       
   162 
       
   163         switch(hw->mac_type) {
       
   164         case e1000_82541:
       
   165         case e1000_82547:
       
   166             e1000_write_phy_reg(hw, 0x1F95, 0x0001);
       
   167 
       
   168             e1000_write_phy_reg(hw, 0x1F71, 0xBD21);
       
   169 
       
   170             e1000_write_phy_reg(hw, 0x1F79, 0x0018);
       
   171 
       
   172             e1000_write_phy_reg(hw, 0x1F30, 0x1600);
       
   173 
       
   174             e1000_write_phy_reg(hw, 0x1F31, 0x0014);
       
   175 
       
   176             e1000_write_phy_reg(hw, 0x1F32, 0x161C);
       
   177 
       
   178             e1000_write_phy_reg(hw, 0x1F94, 0x0003);
       
   179 
       
   180             e1000_write_phy_reg(hw, 0x1F96, 0x003F);
       
   181 
       
   182             e1000_write_phy_reg(hw, 0x2010, 0x0008);
       
   183             break;
       
   184 
       
   185         case e1000_82541_rev_2:
       
   186         case e1000_82547_rev_2:
       
   187             e1000_write_phy_reg(hw, 0x1F73, 0x0099);
       
   188             break;
       
   189         default:
       
   190             break;
       
   191         }
       
   192 
       
   193         e1000_write_phy_reg(hw, 0x0000, 0x3300);
       
   194 
       
   195         msec_delay(20);
       
   196 
       
   197         /* Now enable the transmitter */
       
   198         e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
       
   199 
       
   200         if(hw->mac_type == e1000_82547) {
       
   201             uint16_t fused, fine, coarse;
       
   202 
       
   203             /* Move to analog registers page */
       
   204             e1000_read_phy_reg(hw, IGP01E1000_ANALOG_SPARE_FUSE_STATUS, &fused);
       
   205 
       
   206             if(!(fused & IGP01E1000_ANALOG_SPARE_FUSE_ENABLED)) {
       
   207                 e1000_read_phy_reg(hw, IGP01E1000_ANALOG_FUSE_STATUS, &fused);
       
   208 
       
   209                 fine = fused & IGP01E1000_ANALOG_FUSE_FINE_MASK;
       
   210                 coarse = fused & IGP01E1000_ANALOG_FUSE_COARSE_MASK;
       
   211 
       
   212                 if(coarse > IGP01E1000_ANALOG_FUSE_COARSE_THRESH) {
       
   213                     coarse -= IGP01E1000_ANALOG_FUSE_COARSE_10;
       
   214                     fine -= IGP01E1000_ANALOG_FUSE_FINE_1;
       
   215                 } else if(coarse == IGP01E1000_ANALOG_FUSE_COARSE_THRESH)
       
   216                     fine -= IGP01E1000_ANALOG_FUSE_FINE_10;
       
   217 
       
   218                 fused = (fused & IGP01E1000_ANALOG_FUSE_POLY_MASK) |
       
   219                         (fine & IGP01E1000_ANALOG_FUSE_FINE_MASK) |
       
   220                         (coarse & IGP01E1000_ANALOG_FUSE_COARSE_MASK);
       
   221 
       
   222                 e1000_write_phy_reg(hw, IGP01E1000_ANALOG_FUSE_CONTROL, fused);
       
   223                 e1000_write_phy_reg(hw, IGP01E1000_ANALOG_FUSE_BYPASS,
       
   224                                     IGP01E1000_ANALOG_FUSE_ENABLE_SW_CONTROL);
       
   225             }
       
   226         }
       
   227     }
       
   228 }
       
   229 
       
   230 /******************************************************************************
       
   231  * Set the mac type member in the hw struct.
       
   232  *
       
   233  * hw - Struct containing variables accessed by shared code
       
   234  *****************************************************************************/
       
   235 int32_t
       
   236 e1000_set_mac_type(struct e1000_hw *hw)
       
   237 {
       
   238     DEBUGFUNC("e1000_set_mac_type");
       
   239 
       
   240     switch (hw->device_id) {
       
   241     case E1000_DEV_ID_82542:
       
   242         switch (hw->revision_id) {
       
   243         case E1000_82542_2_0_REV_ID:
       
   244             hw->mac_type = e1000_82542_rev2_0;
       
   245             break;
       
   246         case E1000_82542_2_1_REV_ID:
       
   247             hw->mac_type = e1000_82542_rev2_1;
       
   248             break;
       
   249         default:
       
   250             /* Invalid 82542 revision ID */
       
   251             return -E1000_ERR_MAC_TYPE;
       
   252         }
       
   253         break;
       
   254     case E1000_DEV_ID_82543GC_FIBER:
       
   255     case E1000_DEV_ID_82543GC_COPPER:
       
   256         hw->mac_type = e1000_82543;
       
   257         break;
       
   258     case E1000_DEV_ID_82544EI_COPPER:
       
   259     case E1000_DEV_ID_82544EI_FIBER:
       
   260     case E1000_DEV_ID_82544GC_COPPER:
       
   261     case E1000_DEV_ID_82544GC_LOM:
       
   262         hw->mac_type = e1000_82544;
       
   263         break;
       
   264     case E1000_DEV_ID_82540EM:
       
   265     case E1000_DEV_ID_82540EM_LOM:
       
   266     case E1000_DEV_ID_82540EP:
       
   267     case E1000_DEV_ID_82540EP_LOM:
       
   268     case E1000_DEV_ID_82540EP_LP:
       
   269         hw->mac_type = e1000_82540;
       
   270         break;
       
   271     case E1000_DEV_ID_82545EM_COPPER:
       
   272     case E1000_DEV_ID_82545EM_FIBER:
       
   273         hw->mac_type = e1000_82545;
       
   274         break;
       
   275     case E1000_DEV_ID_82545GM_COPPER:
       
   276     case E1000_DEV_ID_82545GM_FIBER:
       
   277     case E1000_DEV_ID_82545GM_SERDES:
       
   278         hw->mac_type = e1000_82545_rev_3;
       
   279         break;
       
   280     case E1000_DEV_ID_82546EB_COPPER:
       
   281     case E1000_DEV_ID_82546EB_FIBER:
       
   282     case E1000_DEV_ID_82546EB_QUAD_COPPER:
       
   283         hw->mac_type = e1000_82546;
       
   284         break;
       
   285     case E1000_DEV_ID_82546GB_COPPER:
       
   286     case E1000_DEV_ID_82546GB_FIBER:
       
   287     case E1000_DEV_ID_82546GB_SERDES:
       
   288     case E1000_DEV_ID_82546GB_PCIE:
       
   289     case E1000_DEV_ID_82546GB_QUAD_COPPER:
       
   290         hw->mac_type = e1000_82546_rev_3;
       
   291         break;
       
   292     case E1000_DEV_ID_82541EI:
       
   293     case E1000_DEV_ID_82541EI_MOBILE:
       
   294         hw->mac_type = e1000_82541;
       
   295         break;
       
   296     case E1000_DEV_ID_82541ER:
       
   297     case E1000_DEV_ID_82541GI:
       
   298     case E1000_DEV_ID_82541GI_LF:
       
   299     case E1000_DEV_ID_82541GI_MOBILE:
       
   300         hw->mac_type = e1000_82541_rev_2;
       
   301         break;
       
   302     case E1000_DEV_ID_82547EI:
       
   303         hw->mac_type = e1000_82547;
       
   304         break;
       
   305     case E1000_DEV_ID_82547GI:
       
   306         hw->mac_type = e1000_82547_rev_2;
       
   307         break;
       
   308     case E1000_DEV_ID_82573E:
       
   309     case E1000_DEV_ID_82573E_IAMT:
       
   310         hw->mac_type = e1000_82573;
       
   311         break;
       
   312     default:
       
   313         /* Should never have loaded on this device */
       
   314         return -E1000_ERR_MAC_TYPE;
       
   315     }
       
   316 
       
   317     switch(hw->mac_type) {
       
   318     case e1000_82573:
       
   319         hw->eeprom_semaphore_present = TRUE;
       
   320         /* fall through */
       
   321     case e1000_82541:
       
   322     case e1000_82547:
       
   323     case e1000_82541_rev_2:
       
   324     case e1000_82547_rev_2:
       
   325         hw->asf_firmware_present = TRUE;
       
   326         break;
       
   327     default:
       
   328         break;
       
   329     }
       
   330 
       
   331     return E1000_SUCCESS;
       
   332 }
       
   333 
       
   334 /*****************************************************************************
       
   335  * Set media type and TBI compatibility.
       
   336  *
       
   337  * hw - Struct containing variables accessed by shared code
       
   338  * **************************************************************************/
       
   339 void
       
   340 e1000_set_media_type(struct e1000_hw *hw)
       
   341 {
       
   342     uint32_t status;
       
   343 
       
   344     DEBUGFUNC("e1000_set_media_type");
       
   345 
       
   346     if(hw->mac_type != e1000_82543) {
       
   347         /* tbi_compatibility is only valid on 82543 */
       
   348         hw->tbi_compatibility_en = FALSE;
       
   349     }
       
   350 
       
   351     switch (hw->device_id) {
       
   352     case E1000_DEV_ID_82545GM_SERDES:
       
   353     case E1000_DEV_ID_82546GB_SERDES:
       
   354         hw->media_type = e1000_media_type_internal_serdes;
       
   355         break;
       
   356     default:
       
   357         switch (hw->mac_type) {
       
   358         case e1000_82542_rev2_0:
       
   359         case e1000_82542_rev2_1:
       
   360             hw->media_type = e1000_media_type_fiber;
       
   361             break;
       
   362         case e1000_82573:
       
   363             /* The STATUS_TBIMODE bit is reserved or reused for the this
       
   364              * device.
       
   365              */
       
   366             hw->media_type = e1000_media_type_copper;
       
   367             break;
       
   368         default:
       
   369             status = E1000_READ_REG(hw, STATUS);
       
   370             if (status & E1000_STATUS_TBIMODE) {
       
   371                 hw->media_type = e1000_media_type_fiber;
       
   372                 /* tbi_compatibility not valid on fiber */
       
   373                 hw->tbi_compatibility_en = FALSE;
       
   374             } else {
       
   375                 hw->media_type = e1000_media_type_copper;
       
   376             }
       
   377             break;
       
   378         }
       
   379     }
       
   380 }
       
   381 
       
   382 /******************************************************************************
       
   383  * Reset the transmit and receive units; mask and clear all interrupts.
       
   384  *
       
   385  * hw - Struct containing variables accessed by shared code
       
   386  *****************************************************************************/
       
   387 int32_t
       
   388 e1000_reset_hw(struct e1000_hw *hw)
       
   389 {
       
   390     uint32_t ctrl;
       
   391     uint32_t ctrl_ext;
       
   392     uint32_t icr;
       
   393     uint32_t manc;
       
   394     uint32_t led_ctrl;
       
   395     uint32_t timeout;
       
   396     uint32_t extcnf_ctrl;
       
   397     int32_t ret_val;
       
   398 
       
   399     DEBUGFUNC("e1000_reset_hw");
       
   400 
       
   401     /* For 82542 (rev 2.0), disable MWI before issuing a device reset */
       
   402     if(hw->mac_type == e1000_82542_rev2_0) {
       
   403         DEBUGOUT("Disabling MWI on 82542 rev 2.0\n");
       
   404         e1000_pci_clear_mwi(hw);
       
   405     }
       
   406 
       
   407     if(hw->bus_type == e1000_bus_type_pci_express) {
       
   408         /* Prevent the PCI-E bus from sticking if there is no TLP connection
       
   409          * on the last TLP read/write transaction when MAC is reset.
       
   410          */
       
   411         if(e1000_disable_pciex_master(hw) != E1000_SUCCESS) {
       
   412             DEBUGOUT("PCI-E Master disable polling has failed.\n");
       
   413         }
       
   414     }
       
   415 
       
   416     /* Clear interrupt mask to stop board from generating interrupts */
       
   417     DEBUGOUT("Masking off all interrupts\n");
       
   418     E1000_WRITE_REG(hw, IMC, 0xffffffff);
       
   419 
       
   420     /* Disable the Transmit and Receive units.  Then delay to allow
       
   421      * any pending transactions to complete before we hit the MAC with
       
   422      * the global reset.
       
   423      */
       
   424     E1000_WRITE_REG(hw, RCTL, 0);
       
   425     E1000_WRITE_REG(hw, TCTL, E1000_TCTL_PSP);
       
   426     E1000_WRITE_FLUSH(hw);
       
   427 
       
   428     /* The tbi_compatibility_on Flag must be cleared when Rctl is cleared. */
       
   429     hw->tbi_compatibility_on = FALSE;
       
   430 
       
   431     /* Delay to allow any outstanding PCI transactions to complete before
       
   432      * resetting the device
       
   433      */
       
   434     msec_delay(10);
       
   435 
       
   436     ctrl = E1000_READ_REG(hw, CTRL);
       
   437 
       
   438     /* Must reset the PHY before resetting the MAC */
       
   439     if((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
       
   440         E1000_WRITE_REG(hw, CTRL, (ctrl | E1000_CTRL_PHY_RST));
       
   441         msec_delay(5);
       
   442     }
       
   443 
       
   444     /* Must acquire the MDIO ownership before MAC reset.
       
   445      * Ownership defaults to firmware after a reset. */
       
   446     if(hw->mac_type == e1000_82573) {
       
   447         timeout = 10;
       
   448 
       
   449         extcnf_ctrl = E1000_READ_REG(hw, EXTCNF_CTRL);
       
   450         extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
       
   451 
       
   452         do {
       
   453             E1000_WRITE_REG(hw, EXTCNF_CTRL, extcnf_ctrl);
       
   454             extcnf_ctrl = E1000_READ_REG(hw, EXTCNF_CTRL);
       
   455 
       
   456             if(extcnf_ctrl & E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP)
       
   457                 break;
       
   458             else
       
   459                 extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
       
   460 
       
   461             msec_delay(2);
       
   462             timeout--;
       
   463         } while(timeout);
       
   464     }
       
   465 
       
   466     /* Issue a global reset to the MAC.  This will reset the chip's
       
   467      * transmit, receive, DMA, and link units.  It will not effect
       
   468      * the current PCI configuration.  The global reset bit is self-
       
   469      * clearing, and should clear within a microsecond.
       
   470      */
       
   471     DEBUGOUT("Issuing a global reset to MAC\n");
       
   472 
       
   473     switch(hw->mac_type) {
       
   474         case e1000_82544:
       
   475         case e1000_82540:
       
   476         case e1000_82545:
       
   477         case e1000_82546:
       
   478         case e1000_82541:
       
   479         case e1000_82541_rev_2:
       
   480             /* These controllers can't ack the 64-bit write when issuing the
       
   481              * reset, so use IO-mapping as a workaround to issue the reset */
       
   482             E1000_WRITE_REG_IO(hw, CTRL, (ctrl | E1000_CTRL_RST));
       
   483             break;
       
   484         case e1000_82545_rev_3:
       
   485         case e1000_82546_rev_3:
       
   486             /* Reset is performed on a shadow of the control register */
       
   487             E1000_WRITE_REG(hw, CTRL_DUP, (ctrl | E1000_CTRL_RST));
       
   488             break;
       
   489         default:
       
   490             E1000_WRITE_REG(hw, CTRL, (ctrl | E1000_CTRL_RST));
       
   491             break;
       
   492     }
       
   493 
       
   494     /* After MAC reset, force reload of EEPROM to restore power-on settings to
       
   495      * device.  Later controllers reload the EEPROM automatically, so just wait
       
   496      * for reload to complete.
       
   497      */
       
   498     switch(hw->mac_type) {
       
   499         case e1000_82542_rev2_0:
       
   500         case e1000_82542_rev2_1:
       
   501         case e1000_82543:
       
   502         case e1000_82544:
       
   503             /* Wait for reset to complete */
       
   504             udelay(10);
       
   505             ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
       
   506             ctrl_ext |= E1000_CTRL_EXT_EE_RST;
       
   507             E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
       
   508             E1000_WRITE_FLUSH(hw);
       
   509             /* Wait for EEPROM reload */
       
   510             msec_delay(2);
       
   511             break;
       
   512         case e1000_82541:
       
   513         case e1000_82541_rev_2:
       
   514         case e1000_82547:
       
   515         case e1000_82547_rev_2:
       
   516             /* Wait for EEPROM reload */
       
   517             msec_delay(20);
       
   518             break;
       
   519         case e1000_82573:
       
   520             udelay(10);
       
   521             ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
       
   522             ctrl_ext |= E1000_CTRL_EXT_EE_RST;
       
   523             E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
       
   524             E1000_WRITE_FLUSH(hw);
       
   525             /* fall through */
       
   526             ret_val = e1000_get_auto_rd_done(hw);
       
   527             if(ret_val)
       
   528                 /* We don't want to continue accessing MAC registers. */
       
   529                 return ret_val;
       
   530             break;
       
   531         default:
       
   532             /* Wait for EEPROM reload (it happens automatically) */
       
   533             msec_delay(5);
       
   534             break;
       
   535     }
       
   536 
       
   537     /* Disable HW ARPs on ASF enabled adapters */
       
   538     if(hw->mac_type >= e1000_82540 && hw->mac_type <= e1000_82547_rev_2) {
       
   539         manc = E1000_READ_REG(hw, MANC);
       
   540         manc &= ~(E1000_MANC_ARP_EN);
       
   541         E1000_WRITE_REG(hw, MANC, manc);
       
   542     }
       
   543 
       
   544     if((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
       
   545         e1000_phy_init_script(hw);
       
   546 
       
   547         /* Configure activity LED after PHY reset */
       
   548         led_ctrl = E1000_READ_REG(hw, LEDCTL);
       
   549         led_ctrl &= IGP_ACTIVITY_LED_MASK;
       
   550         led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
       
   551         E1000_WRITE_REG(hw, LEDCTL, led_ctrl);
       
   552     }
       
   553 
       
   554     /* Clear interrupt mask to stop board from generating interrupts */
       
   555     DEBUGOUT("Masking off all interrupts\n");
       
   556     E1000_WRITE_REG(hw, IMC, 0xffffffff);
       
   557 
       
   558     /* Clear any pending interrupt events. */
       
   559     icr = E1000_READ_REG(hw, ICR);
       
   560 
       
   561     /* If MWI was previously enabled, reenable it. */
       
   562     if(hw->mac_type == e1000_82542_rev2_0) {
       
   563         if(hw->pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
       
   564             e1000_pci_set_mwi(hw);
       
   565     }
       
   566 
       
   567     return E1000_SUCCESS;
       
   568 }
       
   569 
       
   570 /******************************************************************************
       
   571  * Performs basic configuration of the adapter.
       
   572  *
       
   573  * hw - Struct containing variables accessed by shared code
       
   574  *
       
   575  * Assumes that the controller has previously been reset and is in a
       
   576  * post-reset uninitialized state. Initializes the receive address registers,
       
   577  * multicast table, and VLAN filter table. Calls routines to setup link
       
   578  * configuration and flow control settings. Clears all on-chip counters. Leaves
       
   579  * the transmit and receive units disabled and uninitialized.
       
   580  *****************************************************************************/
       
   581 int32_t
       
   582 e1000_init_hw(struct e1000_hw *hw)
       
   583 {
       
   584     uint32_t ctrl;
       
   585     uint32_t i;
       
   586     int32_t ret_val;
       
   587     uint16_t pcix_cmd_word;
       
   588     uint16_t pcix_stat_hi_word;
       
   589     uint16_t cmd_mmrbc;
       
   590     uint16_t stat_mmrbc;
       
   591     uint32_t mta_size;
       
   592 
       
   593     DEBUGFUNC("e1000_init_hw");
       
   594 
       
   595     /* Initialize Identification LED */
       
   596     ret_val = e1000_id_led_init(hw);
       
   597     if(ret_val) {
       
   598         DEBUGOUT("Error Initializing Identification LED\n");
       
   599         return ret_val;
       
   600     }
       
   601 
       
   602     /* Set the media type and TBI compatibility */
       
   603     e1000_set_media_type(hw);
       
   604 
       
   605     /* Disabling VLAN filtering. */
       
   606     DEBUGOUT("Initializing the IEEE VLAN\n");
       
   607     if (hw->mac_type < e1000_82545_rev_3)
       
   608         E1000_WRITE_REG(hw, VET, 0);
       
   609     e1000_clear_vfta(hw);
       
   610 
       
   611     /* For 82542 (rev 2.0), disable MWI and put the receiver into reset */
       
   612     if(hw->mac_type == e1000_82542_rev2_0) {
       
   613         DEBUGOUT("Disabling MWI on 82542 rev 2.0\n");
       
   614         e1000_pci_clear_mwi(hw);
       
   615         E1000_WRITE_REG(hw, RCTL, E1000_RCTL_RST);
       
   616         E1000_WRITE_FLUSH(hw);
       
   617         msec_delay(5);
       
   618     }
       
   619 
       
   620     /* Setup the receive address. This involves initializing all of the Receive
       
   621      * Address Registers (RARs 0 - 15).
       
   622      */
       
   623     e1000_init_rx_addrs(hw);
       
   624 
       
   625     /* For 82542 (rev 2.0), take the receiver out of reset and enable MWI */
       
   626     if(hw->mac_type == e1000_82542_rev2_0) {
       
   627         E1000_WRITE_REG(hw, RCTL, 0);
       
   628         E1000_WRITE_FLUSH(hw);
       
   629         msec_delay(1);
       
   630         if(hw->pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
       
   631             e1000_pci_set_mwi(hw);
       
   632     }
       
   633 
       
   634     /* Zero out the Multicast HASH table */
       
   635     DEBUGOUT("Zeroing the MTA\n");
       
   636     mta_size = E1000_MC_TBL_SIZE;
       
   637     for(i = 0; i < mta_size; i++)
       
   638         E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
       
   639 
       
   640     /* Set the PCI priority bit correctly in the CTRL register.  This
       
   641      * determines if the adapter gives priority to receives, or if it
       
   642      * gives equal priority to transmits and receives.  Valid only on
       
   643      * 82542 and 82543 silicon.
       
   644      */
       
   645     if(hw->dma_fairness && hw->mac_type <= e1000_82543) {
       
   646         ctrl = E1000_READ_REG(hw, CTRL);
       
   647         E1000_WRITE_REG(hw, CTRL, ctrl | E1000_CTRL_PRIOR);
       
   648     }
       
   649 
       
   650     switch(hw->mac_type) {
       
   651     case e1000_82545_rev_3:
       
   652     case e1000_82546_rev_3:
       
   653         break;
       
   654     default:
       
   655         /* Workaround for PCI-X problem when BIOS sets MMRBC incorrectly. */
       
   656         if(hw->bus_type == e1000_bus_type_pcix) {
       
   657             e1000_read_pci_cfg(hw, PCIX_COMMAND_REGISTER, &pcix_cmd_word);
       
   658             e1000_read_pci_cfg(hw, PCIX_STATUS_REGISTER_HI,
       
   659                 &pcix_stat_hi_word);
       
   660             cmd_mmrbc = (pcix_cmd_word & PCIX_COMMAND_MMRBC_MASK) >>
       
   661                 PCIX_COMMAND_MMRBC_SHIFT;
       
   662             stat_mmrbc = (pcix_stat_hi_word & PCIX_STATUS_HI_MMRBC_MASK) >>
       
   663                 PCIX_STATUS_HI_MMRBC_SHIFT;
       
   664             if(stat_mmrbc == PCIX_STATUS_HI_MMRBC_4K)
       
   665                 stat_mmrbc = PCIX_STATUS_HI_MMRBC_2K;
       
   666             if(cmd_mmrbc > stat_mmrbc) {
       
   667                 pcix_cmd_word &= ~PCIX_COMMAND_MMRBC_MASK;
       
   668                 pcix_cmd_word |= stat_mmrbc << PCIX_COMMAND_MMRBC_SHIFT;
       
   669                 e1000_write_pci_cfg(hw, PCIX_COMMAND_REGISTER,
       
   670                     &pcix_cmd_word);
       
   671             }
       
   672         }
       
   673         break;
       
   674     }
       
   675 
       
   676     /* Call a subroutine to configure the link and setup flow control. */
       
   677     ret_val = e1000_setup_link(hw);
       
   678 
       
   679     /* Set the transmit descriptor write-back policy */
       
   680     if(hw->mac_type > e1000_82544) {
       
   681         ctrl = E1000_READ_REG(hw, TXDCTL);
       
   682         ctrl = (ctrl & ~E1000_TXDCTL_WTHRESH) | E1000_TXDCTL_FULL_TX_DESC_WB;
       
   683         switch (hw->mac_type) {
       
   684         default:
       
   685             break;
       
   686         case e1000_82573:
       
   687             ctrl |= E1000_TXDCTL_COUNT_DESC;
       
   688             break;
       
   689         }
       
   690         E1000_WRITE_REG(hw, TXDCTL, ctrl);
       
   691     }
       
   692 
       
   693     if (hw->mac_type == e1000_82573) {
       
   694         e1000_enable_tx_pkt_filtering(hw); 
       
   695     }
       
   696 
       
   697 
       
   698     /* Clear all of the statistics registers (clear on read).  It is
       
   699      * important that we do this after we have tried to establish link
       
   700      * because the symbol error count will increment wildly if there
       
   701      * is no link.
       
   702      */
       
   703     e1000_clear_hw_cntrs(hw);
       
   704 
       
   705     return ret_val;
       
   706 }
       
   707 
       
   708 /******************************************************************************
       
   709  * Adjust SERDES output amplitude based on EEPROM setting.
       
   710  *
       
   711  * hw - Struct containing variables accessed by shared code.
       
   712  *****************************************************************************/
       
   713 static int32_t
       
   714 e1000_adjust_serdes_amplitude(struct e1000_hw *hw)
       
   715 {
       
   716     uint16_t eeprom_data;
       
   717     int32_t  ret_val;
       
   718 
       
   719     DEBUGFUNC("e1000_adjust_serdes_amplitude");
       
   720 
       
   721     if(hw->media_type != e1000_media_type_internal_serdes)
       
   722         return E1000_SUCCESS;
       
   723 
       
   724     switch(hw->mac_type) {
       
   725     case e1000_82545_rev_3:
       
   726     case e1000_82546_rev_3:
       
   727         break;
       
   728     default:
       
   729         return E1000_SUCCESS;
       
   730     }
       
   731 
       
   732     ret_val = e1000_read_eeprom(hw, EEPROM_SERDES_AMPLITUDE, 1, &eeprom_data);
       
   733     if (ret_val) {
       
   734         return ret_val;
       
   735     }
       
   736 
       
   737     if(eeprom_data != EEPROM_RESERVED_WORD) {
       
   738         /* Adjust SERDES output amplitude only. */
       
   739         eeprom_data &= EEPROM_SERDES_AMPLITUDE_MASK; 
       
   740         ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_EXT_CTRL, eeprom_data);
       
   741         if(ret_val)
       
   742             return ret_val;
       
   743     }
       
   744 
       
   745     return E1000_SUCCESS;
       
   746 }
       
   747 
       
   748 /******************************************************************************
       
   749  * Configures flow control and link settings.
       
   750  *
       
   751  * hw - Struct containing variables accessed by shared code
       
   752  *
       
   753  * Determines which flow control settings to use. Calls the apropriate media-
       
   754  * specific link configuration function. Configures the flow control settings.
       
   755  * Assuming the adapter has a valid link partner, a valid link should be
       
   756  * established. Assumes the hardware has previously been reset and the
       
   757  * transmitter and receiver are not enabled.
       
   758  *****************************************************************************/
       
   759 int32_t
       
   760 e1000_setup_link(struct e1000_hw *hw)
       
   761 {
       
   762     uint32_t ctrl_ext;
       
   763     int32_t ret_val;
       
   764     uint16_t eeprom_data;
       
   765 
       
   766     DEBUGFUNC("e1000_setup_link");
       
   767 
       
   768     /* Read and store word 0x0F of the EEPROM. This word contains bits
       
   769      * that determine the hardware's default PAUSE (flow control) mode,
       
   770      * a bit that determines whether the HW defaults to enabling or
       
   771      * disabling auto-negotiation, and the direction of the
       
   772      * SW defined pins. If there is no SW over-ride of the flow
       
   773      * control setting, then the variable hw->fc will
       
   774      * be initialized based on a value in the EEPROM.
       
   775      */
       
   776     if(e1000_read_eeprom(hw, EEPROM_INIT_CONTROL2_REG, 1, &eeprom_data)) {
       
   777         DEBUGOUT("EEPROM Read Error\n");
       
   778         return -E1000_ERR_EEPROM;
       
   779     }
       
   780 
       
   781     if(hw->fc == e1000_fc_default) {
       
   782         if((eeprom_data & EEPROM_WORD0F_PAUSE_MASK) == 0)
       
   783             hw->fc = e1000_fc_none;
       
   784         else if((eeprom_data & EEPROM_WORD0F_PAUSE_MASK) ==
       
   785                 EEPROM_WORD0F_ASM_DIR)
       
   786             hw->fc = e1000_fc_tx_pause;
       
   787         else
       
   788             hw->fc = e1000_fc_full;
       
   789     }
       
   790 
       
   791     /* We want to save off the original Flow Control configuration just
       
   792      * in case we get disconnected and then reconnected into a different
       
   793      * hub or switch with different Flow Control capabilities.
       
   794      */
       
   795     if(hw->mac_type == e1000_82542_rev2_0)
       
   796         hw->fc &= (~e1000_fc_tx_pause);
       
   797 
       
   798     if((hw->mac_type < e1000_82543) && (hw->report_tx_early == 1))
       
   799         hw->fc &= (~e1000_fc_rx_pause);
       
   800 
       
   801     hw->original_fc = hw->fc;
       
   802 
       
   803     DEBUGOUT1("After fix-ups FlowControl is now = %x\n", hw->fc);
       
   804 
       
   805     /* Take the 4 bits from EEPROM word 0x0F that determine the initial
       
   806      * polarity value for the SW controlled pins, and setup the
       
   807      * Extended Device Control reg with that info.
       
   808      * This is needed because one of the SW controlled pins is used for
       
   809      * signal detection.  So this should be done before e1000_setup_pcs_link()
       
   810      * or e1000_phy_setup() is called.
       
   811      */
       
   812     if(hw->mac_type == e1000_82543) {
       
   813         ctrl_ext = ((eeprom_data & EEPROM_WORD0F_SWPDIO_EXT) <<
       
   814                     SWDPIO__EXT_SHIFT);
       
   815         E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
       
   816     }
       
   817 
       
   818     /* Call the necessary subroutine to configure the link. */
       
   819     ret_val = (hw->media_type == e1000_media_type_copper) ?
       
   820               e1000_setup_copper_link(hw) :
       
   821               e1000_setup_fiber_serdes_link(hw);
       
   822 
       
   823     /* Initialize the flow control address, type, and PAUSE timer
       
   824      * registers to their default values.  This is done even if flow
       
   825      * control is disabled, because it does not hurt anything to
       
   826      * initialize these registers.
       
   827      */
       
   828     DEBUGOUT("Initializing the Flow Control address, type and timer regs\n");
       
   829 
       
   830     E1000_WRITE_REG(hw, FCAL, FLOW_CONTROL_ADDRESS_LOW);
       
   831     E1000_WRITE_REG(hw, FCAH, FLOW_CONTROL_ADDRESS_HIGH);
       
   832     E1000_WRITE_REG(hw, FCT, FLOW_CONTROL_TYPE);
       
   833 
       
   834     E1000_WRITE_REG(hw, FCTTV, hw->fc_pause_time);
       
   835 
       
   836     /* Set the flow control receive threshold registers.  Normally,
       
   837      * these registers will be set to a default threshold that may be
       
   838      * adjusted later by the driver's runtime code.  However, if the
       
   839      * ability to transmit pause frames in not enabled, then these
       
   840      * registers will be set to 0.
       
   841      */
       
   842     if(!(hw->fc & e1000_fc_tx_pause)) {
       
   843         E1000_WRITE_REG(hw, FCRTL, 0);
       
   844         E1000_WRITE_REG(hw, FCRTH, 0);
       
   845     } else {
       
   846         /* We need to set up the Receive Threshold high and low water marks
       
   847          * as well as (optionally) enabling the transmission of XON frames.
       
   848          */
       
   849         if(hw->fc_send_xon) {
       
   850             E1000_WRITE_REG(hw, FCRTL, (hw->fc_low_water | E1000_FCRTL_XONE));
       
   851             E1000_WRITE_REG(hw, FCRTH, hw->fc_high_water);
       
   852         } else {
       
   853             E1000_WRITE_REG(hw, FCRTL, hw->fc_low_water);
       
   854             E1000_WRITE_REG(hw, FCRTH, hw->fc_high_water);
       
   855         }
       
   856     }
       
   857     return ret_val;
       
   858 }
       
   859 
       
   860 /******************************************************************************
       
   861  * Sets up link for a fiber based or serdes based adapter
       
   862  *
       
   863  * hw - Struct containing variables accessed by shared code
       
   864  *
       
   865  * Manipulates Physical Coding Sublayer functions in order to configure
       
   866  * link. Assumes the hardware has been previously reset and the transmitter
       
   867  * and receiver are not enabled.
       
   868  *****************************************************************************/
       
   869 static int32_t
       
   870 e1000_setup_fiber_serdes_link(struct e1000_hw *hw)
       
   871 {
       
   872     uint32_t ctrl;
       
   873     uint32_t status;
       
   874     uint32_t txcw = 0;
       
   875     uint32_t i;
       
   876     uint32_t signal = 0;
       
   877     int32_t ret_val;
       
   878 
       
   879     DEBUGFUNC("e1000_setup_fiber_serdes_link");
       
   880 
       
   881     /* On adapters with a MAC newer than 82544, SW Defineable pin 1 will be
       
   882      * set when the optics detect a signal. On older adapters, it will be
       
   883      * cleared when there is a signal.  This applies to fiber media only.
       
   884      * If we're on serdes media, adjust the output amplitude to value set in
       
   885      * the EEPROM.
       
   886      */
       
   887     ctrl = E1000_READ_REG(hw, CTRL);
       
   888     if(hw->media_type == e1000_media_type_fiber)
       
   889         signal = (hw->mac_type > e1000_82544) ? E1000_CTRL_SWDPIN1 : 0;
       
   890 
       
   891     ret_val = e1000_adjust_serdes_amplitude(hw);
       
   892     if(ret_val)
       
   893         return ret_val;
       
   894 
       
   895     /* Take the link out of reset */
       
   896     ctrl &= ~(E1000_CTRL_LRST);
       
   897 
       
   898     /* Adjust VCO speed to improve BER performance */
       
   899     ret_val = e1000_set_vco_speed(hw);
       
   900     if(ret_val)
       
   901         return ret_val;
       
   902 
       
   903     e1000_config_collision_dist(hw);
       
   904 
       
   905     /* Check for a software override of the flow control settings, and setup
       
   906      * the device accordingly.  If auto-negotiation is enabled, then software
       
   907      * will have to set the "PAUSE" bits to the correct value in the Tranmsit
       
   908      * Config Word Register (TXCW) and re-start auto-negotiation.  However, if
       
   909      * auto-negotiation is disabled, then software will have to manually
       
   910      * configure the two flow control enable bits in the CTRL register.
       
   911      *
       
   912      * The possible values of the "fc" parameter are:
       
   913      *      0:  Flow control is completely disabled
       
   914      *      1:  Rx flow control is enabled (we can receive pause frames, but
       
   915      *          not send pause frames).
       
   916      *      2:  Tx flow control is enabled (we can send pause frames but we do
       
   917      *          not support receiving pause frames).
       
   918      *      3:  Both Rx and TX flow control (symmetric) are enabled.
       
   919      */
       
   920     switch (hw->fc) {
       
   921     case e1000_fc_none:
       
   922         /* Flow control is completely disabled by a software over-ride. */
       
   923         txcw = (E1000_TXCW_ANE | E1000_TXCW_FD);
       
   924         break;
       
   925     case e1000_fc_rx_pause:
       
   926         /* RX Flow control is enabled and TX Flow control is disabled by a
       
   927          * software over-ride. Since there really isn't a way to advertise
       
   928          * that we are capable of RX Pause ONLY, we will advertise that we
       
   929          * support both symmetric and asymmetric RX PAUSE. Later, we will
       
   930          *  disable the adapter's ability to send PAUSE frames.
       
   931          */
       
   932         txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK);
       
   933         break;
       
   934     case e1000_fc_tx_pause:
       
   935         /* TX Flow control is enabled, and RX Flow control is disabled, by a
       
   936          * software over-ride.
       
   937          */
       
   938         txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_ASM_DIR);
       
   939         break;
       
   940     case e1000_fc_full:
       
   941         /* Flow control (both RX and TX) is enabled by a software over-ride. */
       
   942         txcw = (E1000_TXCW_ANE | E1000_TXCW_FD | E1000_TXCW_PAUSE_MASK);
       
   943         break;
       
   944     default:
       
   945         DEBUGOUT("Flow control param set incorrectly\n");
       
   946         return -E1000_ERR_CONFIG;
       
   947         break;
       
   948     }
       
   949 
       
   950     /* Since auto-negotiation is enabled, take the link out of reset (the link
       
   951      * will be in reset, because we previously reset the chip). This will
       
   952      * restart auto-negotiation.  If auto-neogtiation is successful then the
       
   953      * link-up status bit will be set and the flow control enable bits (RFCE
       
   954      * and TFCE) will be set according to their negotiated value.
       
   955      */
       
   956     DEBUGOUT("Auto-negotiation enabled\n");
       
   957 
       
   958     E1000_WRITE_REG(hw, TXCW, txcw);
       
   959     E1000_WRITE_REG(hw, CTRL, ctrl);
       
   960     E1000_WRITE_FLUSH(hw);
       
   961 
       
   962     hw->txcw = txcw;
       
   963     msec_delay(1);
       
   964 
       
   965     /* If we have a signal (the cable is plugged in) then poll for a "Link-Up"
       
   966      * indication in the Device Status Register.  Time-out if a link isn't
       
   967      * seen in 500 milliseconds seconds (Auto-negotiation should complete in
       
   968      * less than 500 milliseconds even if the other end is doing it in SW).
       
   969      * For internal serdes, we just assume a signal is present, then poll.
       
   970      */
       
   971     if(hw->media_type == e1000_media_type_internal_serdes ||
       
   972        (E1000_READ_REG(hw, CTRL) & E1000_CTRL_SWDPIN1) == signal) {
       
   973         DEBUGOUT("Looking for Link\n");
       
   974         for(i = 0; i < (LINK_UP_TIMEOUT / 10); i++) {
       
   975             msec_delay(10);
       
   976             status = E1000_READ_REG(hw, STATUS);
       
   977             if(status & E1000_STATUS_LU) break;
       
   978         }
       
   979         if(i == (LINK_UP_TIMEOUT / 10)) {
       
   980             DEBUGOUT("Never got a valid link from auto-neg!!!\n");
       
   981             hw->autoneg_failed = 1;
       
   982             /* AutoNeg failed to achieve a link, so we'll call
       
   983              * e1000_check_for_link. This routine will force the link up if
       
   984              * we detect a signal. This will allow us to communicate with
       
   985              * non-autonegotiating link partners.
       
   986              */
       
   987             ret_val = e1000_check_for_link(hw);
       
   988             if(ret_val) {
       
   989                 DEBUGOUT("Error while checking for link\n");
       
   990                 return ret_val;
       
   991             }
       
   992             hw->autoneg_failed = 0;
       
   993         } else {
       
   994             hw->autoneg_failed = 0;
       
   995             DEBUGOUT("Valid Link Found\n");
       
   996         }
       
   997     } else {
       
   998         DEBUGOUT("No Signal Detected\n");
       
   999     }
       
  1000     return E1000_SUCCESS;
       
  1001 }
       
  1002 
       
  1003 /******************************************************************************
       
  1004 * Make sure we have a valid PHY and change PHY mode before link setup.
       
  1005 *
       
  1006 * hw - Struct containing variables accessed by shared code
       
  1007 ******************************************************************************/
       
  1008 static int32_t
       
  1009 e1000_copper_link_preconfig(struct e1000_hw *hw)
       
  1010 {
       
  1011     uint32_t ctrl;
       
  1012     int32_t ret_val;
       
  1013     uint16_t phy_data;
       
  1014 
       
  1015     DEBUGFUNC("e1000_copper_link_preconfig");
       
  1016 
       
  1017     ctrl = E1000_READ_REG(hw, CTRL);
       
  1018     /* With 82543, we need to force speed and duplex on the MAC equal to what
       
  1019      * the PHY speed and duplex configuration is. In addition, we need to
       
  1020      * perform a hardware reset on the PHY to take it out of reset.
       
  1021      */
       
  1022     if(hw->mac_type > e1000_82543) {
       
  1023         ctrl |= E1000_CTRL_SLU;
       
  1024         ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
       
  1025         E1000_WRITE_REG(hw, CTRL, ctrl);
       
  1026     } else {
       
  1027         ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX | E1000_CTRL_SLU);
       
  1028         E1000_WRITE_REG(hw, CTRL, ctrl);
       
  1029         ret_val = e1000_phy_hw_reset(hw);
       
  1030         if(ret_val)
       
  1031             return ret_val;
       
  1032     }
       
  1033 
       
  1034     /* Make sure we have a valid PHY */
       
  1035     ret_val = e1000_detect_gig_phy(hw);
       
  1036     if(ret_val) {
       
  1037         DEBUGOUT("Error, did not detect valid phy.\n");
       
  1038         return ret_val;
       
  1039     }
       
  1040     DEBUGOUT1("Phy ID = %x \n", hw->phy_id);
       
  1041 
       
  1042     /* Set PHY to class A mode (if necessary) */
       
  1043     ret_val = e1000_set_phy_mode(hw);
       
  1044     if(ret_val)
       
  1045         return ret_val;
       
  1046 
       
  1047     if((hw->mac_type == e1000_82545_rev_3) ||
       
  1048        (hw->mac_type == e1000_82546_rev_3)) {
       
  1049         ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
       
  1050         phy_data |= 0x00000008;
       
  1051         ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
       
  1052     }
       
  1053 
       
  1054     if(hw->mac_type <= e1000_82543 ||
       
  1055        hw->mac_type == e1000_82541 || hw->mac_type == e1000_82547 ||
       
  1056        hw->mac_type == e1000_82541_rev_2 || hw->mac_type == e1000_82547_rev_2)
       
  1057         hw->phy_reset_disable = FALSE;
       
  1058 
       
  1059    return E1000_SUCCESS;
       
  1060 }
       
  1061 
       
  1062 
       
  1063 /********************************************************************
       
  1064 * Copper link setup for e1000_phy_igp series.
       
  1065 *
       
  1066 * hw - Struct containing variables accessed by shared code
       
  1067 *********************************************************************/
       
  1068 static int32_t
       
  1069 e1000_copper_link_igp_setup(struct e1000_hw *hw)
       
  1070 {
       
  1071     uint32_t led_ctrl;
       
  1072     int32_t ret_val;
       
  1073     uint16_t phy_data;
       
  1074 
       
  1075     DEBUGFUNC("e1000_copper_link_igp_setup");
       
  1076 
       
  1077     if (hw->phy_reset_disable)
       
  1078         return E1000_SUCCESS;
       
  1079     
       
  1080     ret_val = e1000_phy_reset(hw);
       
  1081     if (ret_val) {
       
  1082         DEBUGOUT("Error Resetting the PHY\n");
       
  1083         return ret_val;
       
  1084     }
       
  1085 
       
  1086     /* Wait 10ms for MAC to configure PHY from eeprom settings */
       
  1087     msec_delay(15);
       
  1088 
       
  1089     /* Configure activity LED after PHY reset */
       
  1090     led_ctrl = E1000_READ_REG(hw, LEDCTL);
       
  1091     led_ctrl &= IGP_ACTIVITY_LED_MASK;
       
  1092     led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
       
  1093     E1000_WRITE_REG(hw, LEDCTL, led_ctrl);
       
  1094 
       
  1095     /* disable lplu d3 during driver init */
       
  1096     ret_val = e1000_set_d3_lplu_state(hw, FALSE);
       
  1097     if (ret_val) {
       
  1098         DEBUGOUT("Error Disabling LPLU D3\n");
       
  1099         return ret_val;
       
  1100     }
       
  1101 
       
  1102     /* disable lplu d0 during driver init */
       
  1103     ret_val = e1000_set_d0_lplu_state(hw, FALSE);
       
  1104     if (ret_val) {
       
  1105         DEBUGOUT("Error Disabling LPLU D0\n");
       
  1106         return ret_val;
       
  1107     }
       
  1108     /* Configure mdi-mdix settings */
       
  1109     ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
       
  1110     if (ret_val)
       
  1111         return ret_val;
       
  1112 
       
  1113     if ((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
       
  1114         hw->dsp_config_state = e1000_dsp_config_disabled;
       
  1115         /* Force MDI for earlier revs of the IGP PHY */
       
  1116         phy_data &= ~(IGP01E1000_PSCR_AUTO_MDIX | IGP01E1000_PSCR_FORCE_MDI_MDIX);
       
  1117         hw->mdix = 1;
       
  1118 
       
  1119     } else {
       
  1120         hw->dsp_config_state = e1000_dsp_config_enabled;
       
  1121         phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
       
  1122 
       
  1123         switch (hw->mdix) {
       
  1124         case 1:
       
  1125             phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
       
  1126             break;
       
  1127         case 2:
       
  1128             phy_data |= IGP01E1000_PSCR_FORCE_MDI_MDIX;
       
  1129             break;
       
  1130         case 0:
       
  1131         default:
       
  1132             phy_data |= IGP01E1000_PSCR_AUTO_MDIX;
       
  1133             break;
       
  1134         }
       
  1135     }
       
  1136     ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
       
  1137     if(ret_val)
       
  1138         return ret_val;
       
  1139 
       
  1140     /* set auto-master slave resolution settings */
       
  1141     if(hw->autoneg) {
       
  1142         e1000_ms_type phy_ms_setting = hw->master_slave;
       
  1143 
       
  1144         if(hw->ffe_config_state == e1000_ffe_config_active)
       
  1145             hw->ffe_config_state = e1000_ffe_config_enabled;
       
  1146 
       
  1147         if(hw->dsp_config_state == e1000_dsp_config_activated)
       
  1148             hw->dsp_config_state = e1000_dsp_config_enabled;
       
  1149 
       
  1150         /* when autonegotiation advertisment is only 1000Mbps then we
       
  1151           * should disable SmartSpeed and enable Auto MasterSlave
       
  1152           * resolution as hardware default. */
       
  1153         if(hw->autoneg_advertised == ADVERTISE_1000_FULL) {
       
  1154             /* Disable SmartSpeed */
       
  1155             ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, &phy_data);
       
  1156             if(ret_val)
       
  1157                 return ret_val;
       
  1158             phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
       
  1159             ret_val = e1000_write_phy_reg(hw,
       
  1160                                                   IGP01E1000_PHY_PORT_CONFIG,
       
  1161                                                   phy_data);
       
  1162             if(ret_val)
       
  1163                 return ret_val;
       
  1164             /* Set auto Master/Slave resolution process */
       
  1165             ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &phy_data);
       
  1166             if(ret_val)
       
  1167                 return ret_val;
       
  1168             phy_data &= ~CR_1000T_MS_ENABLE;
       
  1169             ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, phy_data);
       
  1170             if(ret_val)
       
  1171                 return ret_val;
       
  1172         }
       
  1173 
       
  1174         ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &phy_data);
       
  1175         if(ret_val)
       
  1176             return ret_val;
       
  1177 
       
  1178         /* load defaults for future use */
       
  1179         hw->original_master_slave = (phy_data & CR_1000T_MS_ENABLE) ?
       
  1180                                         ((phy_data & CR_1000T_MS_VALUE) ?
       
  1181                                          e1000_ms_force_master :
       
  1182                                          e1000_ms_force_slave) :
       
  1183                                          e1000_ms_auto;
       
  1184 
       
  1185         switch (phy_ms_setting) {
       
  1186         case e1000_ms_force_master:
       
  1187             phy_data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
       
  1188             break;
       
  1189         case e1000_ms_force_slave:
       
  1190             phy_data |= CR_1000T_MS_ENABLE;
       
  1191             phy_data &= ~(CR_1000T_MS_VALUE);
       
  1192             break;
       
  1193         case e1000_ms_auto:
       
  1194             phy_data &= ~CR_1000T_MS_ENABLE;
       
  1195             default:
       
  1196             break;
       
  1197         }
       
  1198         ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, phy_data);
       
  1199         if(ret_val)
       
  1200             return ret_val;
       
  1201     }
       
  1202 
       
  1203     return E1000_SUCCESS;
       
  1204 }
       
  1205 
       
  1206 
       
  1207 /********************************************************************
       
  1208 * Copper link setup for e1000_phy_m88 series.
       
  1209 *
       
  1210 * hw - Struct containing variables accessed by shared code
       
  1211 *********************************************************************/
       
  1212 static int32_t
       
  1213 e1000_copper_link_mgp_setup(struct e1000_hw *hw)
       
  1214 {
       
  1215     int32_t ret_val;
       
  1216     uint16_t phy_data;
       
  1217 
       
  1218     DEBUGFUNC("e1000_copper_link_mgp_setup");
       
  1219 
       
  1220     if(hw->phy_reset_disable)
       
  1221         return E1000_SUCCESS;
       
  1222     
       
  1223     /* Enable CRS on TX. This must be set for half-duplex operation. */
       
  1224     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
       
  1225     if(ret_val)
       
  1226         return ret_val;
       
  1227 
       
  1228     phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
       
  1229 
       
  1230     /* Options:
       
  1231      *   MDI/MDI-X = 0 (default)
       
  1232      *   0 - Auto for all speeds
       
  1233      *   1 - MDI mode
       
  1234      *   2 - MDI-X mode
       
  1235      *   3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
       
  1236      */
       
  1237     phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
       
  1238 
       
  1239     switch (hw->mdix) {
       
  1240     case 1:
       
  1241         phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
       
  1242         break;
       
  1243     case 2:
       
  1244         phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
       
  1245         break;
       
  1246     case 3:
       
  1247         phy_data |= M88E1000_PSCR_AUTO_X_1000T;
       
  1248         break;
       
  1249     case 0:
       
  1250     default:
       
  1251         phy_data |= M88E1000_PSCR_AUTO_X_MODE;
       
  1252         break;
       
  1253     }
       
  1254 
       
  1255     /* Options:
       
  1256      *   disable_polarity_correction = 0 (default)
       
  1257      *       Automatic Correction for Reversed Cable Polarity
       
  1258      *   0 - Disabled
       
  1259      *   1 - Enabled
       
  1260      */
       
  1261     phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
       
  1262     if(hw->disable_polarity_correction == 1)
       
  1263         phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
       
  1264         ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
       
  1265         if(ret_val)
       
  1266             return ret_val;
       
  1267 
       
  1268     /* Force TX_CLK in the Extended PHY Specific Control Register
       
  1269      * to 25MHz clock.
       
  1270      */
       
  1271     ret_val = e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
       
  1272     if(ret_val)
       
  1273         return ret_val;
       
  1274 
       
  1275     phy_data |= M88E1000_EPSCR_TX_CLK_25;
       
  1276 
       
  1277     if (hw->phy_revision < M88E1011_I_REV_4) {
       
  1278         /* Configure Master and Slave downshift values */
       
  1279         phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK |
       
  1280                               M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK);
       
  1281         phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X |
       
  1282                              M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X);
       
  1283         ret_val = e1000_write_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
       
  1284         if(ret_val)
       
  1285             return ret_val;
       
  1286     }
       
  1287 
       
  1288     /* SW Reset the PHY so all changes take effect */
       
  1289     ret_val = e1000_phy_reset(hw);
       
  1290     if(ret_val) {
       
  1291         DEBUGOUT("Error Resetting the PHY\n");
       
  1292         return ret_val;
       
  1293     }
       
  1294 
       
  1295    return E1000_SUCCESS;
       
  1296 }
       
  1297 
       
  1298 /********************************************************************
       
  1299 * Setup auto-negotiation and flow control advertisements,
       
  1300 * and then perform auto-negotiation.
       
  1301 *
       
  1302 * hw - Struct containing variables accessed by shared code
       
  1303 *********************************************************************/
       
  1304 static int32_t
       
  1305 e1000_copper_link_autoneg(struct e1000_hw *hw)
       
  1306 {
       
  1307     int32_t ret_val;
       
  1308     uint16_t phy_data;
       
  1309 
       
  1310     DEBUGFUNC("e1000_copper_link_autoneg");
       
  1311 
       
  1312     /* Perform some bounds checking on the hw->autoneg_advertised
       
  1313      * parameter.  If this variable is zero, then set it to the default.
       
  1314      */
       
  1315     hw->autoneg_advertised &= AUTONEG_ADVERTISE_SPEED_DEFAULT;
       
  1316 
       
  1317     /* If autoneg_advertised is zero, we assume it was not defaulted
       
  1318      * by the calling code so we set to advertise full capability.
       
  1319      */
       
  1320     if(hw->autoneg_advertised == 0)
       
  1321         hw->autoneg_advertised = AUTONEG_ADVERTISE_SPEED_DEFAULT;
       
  1322 
       
  1323     DEBUGOUT("Reconfiguring auto-neg advertisement params\n");
       
  1324     ret_val = e1000_phy_setup_autoneg(hw);
       
  1325     if(ret_val) {
       
  1326         DEBUGOUT("Error Setting up Auto-Negotiation\n");
       
  1327         return ret_val;
       
  1328     }
       
  1329     DEBUGOUT("Restarting Auto-Neg\n");
       
  1330 
       
  1331     /* Restart auto-negotiation by setting the Auto Neg Enable bit and
       
  1332      * the Auto Neg Restart bit in the PHY control register.
       
  1333      */
       
  1334     ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data);
       
  1335     if(ret_val)
       
  1336         return ret_val;
       
  1337 
       
  1338     phy_data |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
       
  1339     ret_val = e1000_write_phy_reg(hw, PHY_CTRL, phy_data);
       
  1340     if(ret_val)
       
  1341         return ret_val;
       
  1342 
       
  1343     /* Does the user want to wait for Auto-Neg to complete here, or
       
  1344      * check at a later time (for example, callback routine).
       
  1345      */
       
  1346     if(hw->wait_autoneg_complete) {
       
  1347         ret_val = e1000_wait_autoneg(hw);
       
  1348         if(ret_val) {
       
  1349             DEBUGOUT("Error while waiting for autoneg to complete\n");
       
  1350             return ret_val;
       
  1351         }
       
  1352     }
       
  1353 
       
  1354     hw->get_link_status = TRUE;
       
  1355 
       
  1356     return E1000_SUCCESS;
       
  1357 }
       
  1358 
       
  1359 
       
  1360 /******************************************************************************
       
  1361 * Config the MAC and the PHY after link is up.
       
  1362 *   1) Set up the MAC to the current PHY speed/duplex
       
  1363 *      if we are on 82543.  If we
       
  1364 *      are on newer silicon, we only need to configure
       
  1365 *      collision distance in the Transmit Control Register.
       
  1366 *   2) Set up flow control on the MAC to that established with
       
  1367 *      the link partner.
       
  1368 *   3) Config DSP to improve Gigabit link quality for some PHY revisions.    
       
  1369 *
       
  1370 * hw - Struct containing variables accessed by shared code
       
  1371 ******************************************************************************/
       
  1372 static int32_t
       
  1373 e1000_copper_link_postconfig(struct e1000_hw *hw)
       
  1374 {
       
  1375     int32_t ret_val;
       
  1376     DEBUGFUNC("e1000_copper_link_postconfig");
       
  1377     
       
  1378     if(hw->mac_type >= e1000_82544) {
       
  1379         e1000_config_collision_dist(hw);
       
  1380     } else {
       
  1381         ret_val = e1000_config_mac_to_phy(hw);
       
  1382         if(ret_val) {
       
  1383             DEBUGOUT("Error configuring MAC to PHY settings\n");
       
  1384             return ret_val;
       
  1385         }
       
  1386     }
       
  1387     ret_val = e1000_config_fc_after_link_up(hw);
       
  1388     if(ret_val) {
       
  1389         DEBUGOUT("Error Configuring Flow Control\n");
       
  1390         return ret_val;
       
  1391     }
       
  1392 
       
  1393     /* Config DSP to improve Giga link quality */
       
  1394     if(hw->phy_type == e1000_phy_igp) {
       
  1395         ret_val = e1000_config_dsp_after_link_change(hw, TRUE);
       
  1396         if(ret_val) {
       
  1397             DEBUGOUT("Error Configuring DSP after link up\n");
       
  1398             return ret_val;
       
  1399         }
       
  1400     }
       
  1401                 
       
  1402     return E1000_SUCCESS;
       
  1403 }
       
  1404 
       
  1405 /******************************************************************************
       
  1406 * Detects which PHY is present and setup the speed and duplex
       
  1407 *
       
  1408 * hw - Struct containing variables accessed by shared code
       
  1409 ******************************************************************************/
       
  1410 static int32_t
       
  1411 e1000_setup_copper_link(struct e1000_hw *hw)
       
  1412 {
       
  1413     int32_t ret_val;
       
  1414     uint16_t i;
       
  1415     uint16_t phy_data;
       
  1416 
       
  1417     DEBUGFUNC("e1000_setup_copper_link");
       
  1418 
       
  1419     /* Check if it is a valid PHY and set PHY mode if necessary. */
       
  1420     ret_val = e1000_copper_link_preconfig(hw);
       
  1421     if(ret_val)
       
  1422         return ret_val;
       
  1423 
       
  1424     if (hw->phy_type == e1000_phy_igp ||
       
  1425         hw->phy_type == e1000_phy_igp_2) {
       
  1426         ret_val = e1000_copper_link_igp_setup(hw);
       
  1427         if(ret_val)
       
  1428             return ret_val;
       
  1429     } else if (hw->phy_type == e1000_phy_m88) {
       
  1430         ret_val = e1000_copper_link_mgp_setup(hw);
       
  1431         if(ret_val)
       
  1432             return ret_val;
       
  1433     }
       
  1434 
       
  1435     if(hw->autoneg) {
       
  1436         /* Setup autoneg and flow control advertisement 
       
  1437           * and perform autonegotiation */   
       
  1438         ret_val = e1000_copper_link_autoneg(hw);
       
  1439         if(ret_val)
       
  1440             return ret_val;           
       
  1441     } else {
       
  1442         /* PHY will be set to 10H, 10F, 100H,or 100F
       
  1443           * depending on value from forced_speed_duplex. */
       
  1444         DEBUGOUT("Forcing speed and duplex\n");
       
  1445         ret_val = e1000_phy_force_speed_duplex(hw);
       
  1446         if(ret_val) {
       
  1447             DEBUGOUT("Error Forcing Speed and Duplex\n");
       
  1448             return ret_val;
       
  1449         }
       
  1450     }
       
  1451 
       
  1452     /* Check link status. Wait up to 100 microseconds for link to become
       
  1453      * valid.
       
  1454      */
       
  1455     for(i = 0; i < 10; i++) {
       
  1456         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
       
  1457         if(ret_val)
       
  1458             return ret_val;
       
  1459         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
       
  1460         if(ret_val)
       
  1461             return ret_val;
       
  1462 
       
  1463         if(phy_data & MII_SR_LINK_STATUS) {
       
  1464             /* Config the MAC and PHY after link is up */
       
  1465             ret_val = e1000_copper_link_postconfig(hw);
       
  1466             if(ret_val)
       
  1467                 return ret_val;
       
  1468             
       
  1469             DEBUGOUT("Valid link established!!!\n");
       
  1470             return E1000_SUCCESS;
       
  1471         }
       
  1472         udelay(10);
       
  1473     }
       
  1474 
       
  1475     DEBUGOUT("Unable to establish link!!!\n");
       
  1476     return E1000_SUCCESS;
       
  1477 }
       
  1478 
       
  1479 /******************************************************************************
       
  1480 * Configures PHY autoneg and flow control advertisement settings
       
  1481 *
       
  1482 * hw - Struct containing variables accessed by shared code
       
  1483 ******************************************************************************/
       
  1484 int32_t
       
  1485 e1000_phy_setup_autoneg(struct e1000_hw *hw)
       
  1486 {
       
  1487     int32_t ret_val;
       
  1488     uint16_t mii_autoneg_adv_reg;
       
  1489     uint16_t mii_1000t_ctrl_reg;
       
  1490 
       
  1491     DEBUGFUNC("e1000_phy_setup_autoneg");
       
  1492 
       
  1493     /* Read the MII Auto-Neg Advertisement Register (Address 4). */
       
  1494     ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg);
       
  1495     if(ret_val)
       
  1496         return ret_val;
       
  1497 
       
  1498         /* Read the MII 1000Base-T Control Register (Address 9). */
       
  1499         ret_val = e1000_read_phy_reg(hw, PHY_1000T_CTRL, &mii_1000t_ctrl_reg);
       
  1500         if(ret_val)
       
  1501             return ret_val;
       
  1502 
       
  1503     /* Need to parse both autoneg_advertised and fc and set up
       
  1504      * the appropriate PHY registers.  First we will parse for
       
  1505      * autoneg_advertised software override.  Since we can advertise
       
  1506      * a plethora of combinations, we need to check each bit
       
  1507      * individually.
       
  1508      */
       
  1509 
       
  1510     /* First we clear all the 10/100 mb speed bits in the Auto-Neg
       
  1511      * Advertisement Register (Address 4) and the 1000 mb speed bits in
       
  1512      * the  1000Base-T Control Register (Address 9).
       
  1513      */
       
  1514     mii_autoneg_adv_reg &= ~REG4_SPEED_MASK;
       
  1515     mii_1000t_ctrl_reg &= ~REG9_SPEED_MASK;
       
  1516 
       
  1517     DEBUGOUT1("autoneg_advertised %x\n", hw->autoneg_advertised);
       
  1518 
       
  1519     /* Do we want to advertise 10 Mb Half Duplex? */
       
  1520     if(hw->autoneg_advertised & ADVERTISE_10_HALF) {
       
  1521         DEBUGOUT("Advertise 10mb Half duplex\n");
       
  1522         mii_autoneg_adv_reg |= NWAY_AR_10T_HD_CAPS;
       
  1523     }
       
  1524 
       
  1525     /* Do we want to advertise 10 Mb Full Duplex? */
       
  1526     if(hw->autoneg_advertised & ADVERTISE_10_FULL) {
       
  1527         DEBUGOUT("Advertise 10mb Full duplex\n");
       
  1528         mii_autoneg_adv_reg |= NWAY_AR_10T_FD_CAPS;
       
  1529     }
       
  1530 
       
  1531     /* Do we want to advertise 100 Mb Half Duplex? */
       
  1532     if(hw->autoneg_advertised & ADVERTISE_100_HALF) {
       
  1533         DEBUGOUT("Advertise 100mb Half duplex\n");
       
  1534         mii_autoneg_adv_reg |= NWAY_AR_100TX_HD_CAPS;
       
  1535     }
       
  1536 
       
  1537     /* Do we want to advertise 100 Mb Full Duplex? */
       
  1538     if(hw->autoneg_advertised & ADVERTISE_100_FULL) {
       
  1539         DEBUGOUT("Advertise 100mb Full duplex\n");
       
  1540         mii_autoneg_adv_reg |= NWAY_AR_100TX_FD_CAPS;
       
  1541     }
       
  1542 
       
  1543     /* We do not allow the Phy to advertise 1000 Mb Half Duplex */
       
  1544     if(hw->autoneg_advertised & ADVERTISE_1000_HALF) {
       
  1545         DEBUGOUT("Advertise 1000mb Half duplex requested, request denied!\n");
       
  1546     }
       
  1547 
       
  1548     /* Do we want to advertise 1000 Mb Full Duplex? */
       
  1549     if(hw->autoneg_advertised & ADVERTISE_1000_FULL) {
       
  1550         DEBUGOUT("Advertise 1000mb Full duplex\n");
       
  1551         mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
       
  1552     }
       
  1553 
       
  1554     /* Check for a software override of the flow control settings, and
       
  1555      * setup the PHY advertisement registers accordingly.  If
       
  1556      * auto-negotiation is enabled, then software will have to set the
       
  1557      * "PAUSE" bits to the correct value in the Auto-Negotiation
       
  1558      * Advertisement Register (PHY_AUTONEG_ADV) and re-start auto-negotiation.
       
  1559      *
       
  1560      * The possible values of the "fc" parameter are:
       
  1561      *      0:  Flow control is completely disabled
       
  1562      *      1:  Rx flow control is enabled (we can receive pause frames
       
  1563      *          but not send pause frames).
       
  1564      *      2:  Tx flow control is enabled (we can send pause frames
       
  1565      *          but we do not support receiving pause frames).
       
  1566      *      3:  Both Rx and TX flow control (symmetric) are enabled.
       
  1567      *  other:  No software override.  The flow control configuration
       
  1568      *          in the EEPROM is used.
       
  1569      */
       
  1570     switch (hw->fc) {
       
  1571     case e1000_fc_none: /* 0 */
       
  1572         /* Flow control (RX & TX) is completely disabled by a
       
  1573          * software over-ride.
       
  1574          */
       
  1575         mii_autoneg_adv_reg &= ~(NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
       
  1576         break;
       
  1577     case e1000_fc_rx_pause: /* 1 */
       
  1578         /* RX Flow control is enabled, and TX Flow control is
       
  1579          * disabled, by a software over-ride.
       
  1580          */
       
  1581         /* Since there really isn't a way to advertise that we are
       
  1582          * capable of RX Pause ONLY, we will advertise that we
       
  1583          * support both symmetric and asymmetric RX PAUSE.  Later
       
  1584          * (in e1000_config_fc_after_link_up) we will disable the
       
  1585          *hw's ability to send PAUSE frames.
       
  1586          */
       
  1587         mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
       
  1588         break;
       
  1589     case e1000_fc_tx_pause: /* 2 */
       
  1590         /* TX Flow control is enabled, and RX Flow control is
       
  1591          * disabled, by a software over-ride.
       
  1592          */
       
  1593         mii_autoneg_adv_reg |= NWAY_AR_ASM_DIR;
       
  1594         mii_autoneg_adv_reg &= ~NWAY_AR_PAUSE;
       
  1595         break;
       
  1596     case e1000_fc_full: /* 3 */
       
  1597         /* Flow control (both RX and TX) is enabled by a software
       
  1598          * over-ride.
       
  1599          */
       
  1600         mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
       
  1601         break;
       
  1602     default:
       
  1603         DEBUGOUT("Flow control param set incorrectly\n");
       
  1604         return -E1000_ERR_CONFIG;
       
  1605     }
       
  1606 
       
  1607     ret_val = e1000_write_phy_reg(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg);
       
  1608     if(ret_val)
       
  1609         return ret_val;
       
  1610 
       
  1611     DEBUGOUT1("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg);
       
  1612 
       
  1613     ret_val = e1000_write_phy_reg(hw, PHY_1000T_CTRL, mii_1000t_ctrl_reg);    
       
  1614     if(ret_val)
       
  1615         return ret_val;
       
  1616 
       
  1617     return E1000_SUCCESS;
       
  1618 }
       
  1619 
       
  1620 /******************************************************************************
       
  1621 * Force PHY speed and duplex settings to hw->forced_speed_duplex
       
  1622 *
       
  1623 * hw - Struct containing variables accessed by shared code
       
  1624 ******************************************************************************/
       
  1625 static int32_t
       
  1626 e1000_phy_force_speed_duplex(struct e1000_hw *hw)
       
  1627 {
       
  1628     uint32_t ctrl;
       
  1629     int32_t ret_val;
       
  1630     uint16_t mii_ctrl_reg;
       
  1631     uint16_t mii_status_reg;
       
  1632     uint16_t phy_data;
       
  1633     uint16_t i;
       
  1634 
       
  1635     DEBUGFUNC("e1000_phy_force_speed_duplex");
       
  1636 
       
  1637     /* Turn off Flow control if we are forcing speed and duplex. */
       
  1638     hw->fc = e1000_fc_none;
       
  1639 
       
  1640     DEBUGOUT1("hw->fc = %d\n", hw->fc);
       
  1641 
       
  1642     /* Read the Device Control Register. */
       
  1643     ctrl = E1000_READ_REG(hw, CTRL);
       
  1644 
       
  1645     /* Set the bits to Force Speed and Duplex in the Device Ctrl Reg. */
       
  1646     ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
       
  1647     ctrl &= ~(DEVICE_SPEED_MASK);
       
  1648 
       
  1649     /* Clear the Auto Speed Detect Enable bit. */
       
  1650     ctrl &= ~E1000_CTRL_ASDE;
       
  1651 
       
  1652     /* Read the MII Control Register. */
       
  1653     ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &mii_ctrl_reg);
       
  1654     if(ret_val)
       
  1655         return ret_val;
       
  1656 
       
  1657     /* We need to disable autoneg in order to force link and duplex. */
       
  1658 
       
  1659     mii_ctrl_reg &= ~MII_CR_AUTO_NEG_EN;
       
  1660 
       
  1661     /* Are we forcing Full or Half Duplex? */
       
  1662     if(hw->forced_speed_duplex == e1000_100_full ||
       
  1663        hw->forced_speed_duplex == e1000_10_full) {
       
  1664         /* We want to force full duplex so we SET the full duplex bits in the
       
  1665          * Device and MII Control Registers.
       
  1666          */
       
  1667         ctrl |= E1000_CTRL_FD;
       
  1668         mii_ctrl_reg |= MII_CR_FULL_DUPLEX;
       
  1669         DEBUGOUT("Full Duplex\n");
       
  1670     } else {
       
  1671         /* We want to force half duplex so we CLEAR the full duplex bits in
       
  1672          * the Device and MII Control Registers.
       
  1673          */
       
  1674         ctrl &= ~E1000_CTRL_FD;
       
  1675         mii_ctrl_reg &= ~MII_CR_FULL_DUPLEX;
       
  1676         DEBUGOUT("Half Duplex\n");
       
  1677     }
       
  1678 
       
  1679     /* Are we forcing 100Mbps??? */
       
  1680     if(hw->forced_speed_duplex == e1000_100_full ||
       
  1681        hw->forced_speed_duplex == e1000_100_half) {
       
  1682         /* Set the 100Mb bit and turn off the 1000Mb and 10Mb bits. */
       
  1683         ctrl |= E1000_CTRL_SPD_100;
       
  1684         mii_ctrl_reg |= MII_CR_SPEED_100;
       
  1685         mii_ctrl_reg &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_10);
       
  1686         DEBUGOUT("Forcing 100mb ");
       
  1687     } else {
       
  1688         /* Set the 10Mb bit and turn off the 1000Mb and 100Mb bits. */
       
  1689         ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
       
  1690         mii_ctrl_reg |= MII_CR_SPEED_10;
       
  1691         mii_ctrl_reg &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_100);
       
  1692         DEBUGOUT("Forcing 10mb ");
       
  1693     }
       
  1694 
       
  1695     e1000_config_collision_dist(hw);
       
  1696 
       
  1697     /* Write the configured values back to the Device Control Reg. */
       
  1698     E1000_WRITE_REG(hw, CTRL, ctrl);
       
  1699 
       
  1700     if (hw->phy_type == e1000_phy_m88) {
       
  1701         ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
       
  1702         if(ret_val)
       
  1703             return ret_val;
       
  1704 
       
  1705         /* Clear Auto-Crossover to force MDI manually. M88E1000 requires MDI
       
  1706          * forced whenever speed are duplex are forced.
       
  1707          */
       
  1708         phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
       
  1709         ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
       
  1710         if(ret_val)
       
  1711             return ret_val;
       
  1712 
       
  1713         DEBUGOUT1("M88E1000 PSCR: %x \n", phy_data);
       
  1714 
       
  1715         /* Need to reset the PHY or these changes will be ignored */
       
  1716         mii_ctrl_reg |= MII_CR_RESET;
       
  1717     } else {
       
  1718         /* Clear Auto-Crossover to force MDI manually.  IGP requires MDI
       
  1719          * forced whenever speed or duplex are forced.
       
  1720          */
       
  1721         ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
       
  1722         if(ret_val)
       
  1723             return ret_val;
       
  1724 
       
  1725         phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
       
  1726         phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
       
  1727 
       
  1728         ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
       
  1729         if(ret_val)
       
  1730             return ret_val;
       
  1731     }
       
  1732 
       
  1733     /* Write back the modified PHY MII control register. */
       
  1734     ret_val = e1000_write_phy_reg(hw, PHY_CTRL, mii_ctrl_reg);
       
  1735     if(ret_val)
       
  1736         return ret_val;
       
  1737 
       
  1738     udelay(1);
       
  1739 
       
  1740     /* The wait_autoneg_complete flag may be a little misleading here.
       
  1741      * Since we are forcing speed and duplex, Auto-Neg is not enabled.
       
  1742      * But we do want to delay for a period while forcing only so we
       
  1743      * don't generate false No Link messages.  So we will wait here
       
  1744      * only if the user has set wait_autoneg_complete to 1, which is
       
  1745      * the default.
       
  1746      */
       
  1747     if(hw->wait_autoneg_complete) {
       
  1748         /* We will wait for autoneg to complete. */
       
  1749         DEBUGOUT("Waiting for forced speed/duplex link.\n");
       
  1750         mii_status_reg = 0;
       
  1751 
       
  1752         /* We will wait for autoneg to complete or 4.5 seconds to expire. */
       
  1753         for(i = PHY_FORCE_TIME; i > 0; i--) {
       
  1754             /* Read the MII Status Register and wait for Auto-Neg Complete bit
       
  1755              * to be set.
       
  1756              */
       
  1757             ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
       
  1758             if(ret_val)
       
  1759                 return ret_val;
       
  1760 
       
  1761             ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
       
  1762             if(ret_val)
       
  1763                 return ret_val;
       
  1764 
       
  1765             if(mii_status_reg & MII_SR_LINK_STATUS) break;
       
  1766             msec_delay(100);
       
  1767         }
       
  1768         if((i == 0) &&
       
  1769            (hw->phy_type == e1000_phy_m88)) {
       
  1770             /* We didn't get link.  Reset the DSP and wait again for link. */
       
  1771             ret_val = e1000_phy_reset_dsp(hw);
       
  1772             if(ret_val) {
       
  1773                 DEBUGOUT("Error Resetting PHY DSP\n");
       
  1774                 return ret_val;
       
  1775             }
       
  1776         }
       
  1777         /* This loop will early-out if the link condition has been met.  */
       
  1778         for(i = PHY_FORCE_TIME; i > 0; i--) {
       
  1779             if(mii_status_reg & MII_SR_LINK_STATUS) break;
       
  1780             msec_delay(100);
       
  1781             /* Read the MII Status Register and wait for Auto-Neg Complete bit
       
  1782              * to be set.
       
  1783              */
       
  1784             ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
       
  1785             if(ret_val)
       
  1786                 return ret_val;
       
  1787 
       
  1788             ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
       
  1789             if(ret_val)
       
  1790                 return ret_val;
       
  1791         }
       
  1792     }
       
  1793 
       
  1794     if (hw->phy_type == e1000_phy_m88) {
       
  1795         /* Because we reset the PHY above, we need to re-force TX_CLK in the
       
  1796          * Extended PHY Specific Control Register to 25MHz clock.  This value
       
  1797          * defaults back to a 2.5MHz clock when the PHY is reset.
       
  1798          */
       
  1799         ret_val = e1000_read_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
       
  1800         if(ret_val)
       
  1801             return ret_val;
       
  1802 
       
  1803         phy_data |= M88E1000_EPSCR_TX_CLK_25;
       
  1804         ret_val = e1000_write_phy_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
       
  1805         if(ret_val)
       
  1806             return ret_val;
       
  1807 
       
  1808         /* In addition, because of the s/w reset above, we need to enable CRS on
       
  1809          * TX.  This must be set for both full and half duplex operation.
       
  1810          */
       
  1811         ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
       
  1812         if(ret_val)
       
  1813             return ret_val;
       
  1814 
       
  1815         phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
       
  1816         ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
       
  1817         if(ret_val)
       
  1818             return ret_val;
       
  1819 
       
  1820         if((hw->mac_type == e1000_82544 || hw->mac_type == e1000_82543) &&
       
  1821            (!hw->autoneg) &&
       
  1822            (hw->forced_speed_duplex == e1000_10_full ||
       
  1823             hw->forced_speed_duplex == e1000_10_half)) {
       
  1824             ret_val = e1000_polarity_reversal_workaround(hw);
       
  1825             if(ret_val)
       
  1826                 return ret_val;
       
  1827         }
       
  1828     }
       
  1829     return E1000_SUCCESS;
       
  1830 }
       
  1831 
       
  1832 /******************************************************************************
       
  1833 * Sets the collision distance in the Transmit Control register
       
  1834 *
       
  1835 * hw - Struct containing variables accessed by shared code
       
  1836 *
       
  1837 * Link should have been established previously. Reads the speed and duplex
       
  1838 * information from the Device Status register.
       
  1839 ******************************************************************************/
       
  1840 void
       
  1841 e1000_config_collision_dist(struct e1000_hw *hw)
       
  1842 {
       
  1843     uint32_t tctl;
       
  1844 
       
  1845     DEBUGFUNC("e1000_config_collision_dist");
       
  1846 
       
  1847     tctl = E1000_READ_REG(hw, TCTL);
       
  1848 
       
  1849     tctl &= ~E1000_TCTL_COLD;
       
  1850     tctl |= E1000_COLLISION_DISTANCE << E1000_COLD_SHIFT;
       
  1851 
       
  1852     E1000_WRITE_REG(hw, TCTL, tctl);
       
  1853     E1000_WRITE_FLUSH(hw);
       
  1854 }
       
  1855 
       
  1856 /******************************************************************************
       
  1857 * Sets MAC speed and duplex settings to reflect the those in the PHY
       
  1858 *
       
  1859 * hw - Struct containing variables accessed by shared code
       
  1860 * mii_reg - data to write to the MII control register
       
  1861 *
       
  1862 * The contents of the PHY register containing the needed information need to
       
  1863 * be passed in.
       
  1864 ******************************************************************************/
       
  1865 static int32_t
       
  1866 e1000_config_mac_to_phy(struct e1000_hw *hw)
       
  1867 {
       
  1868     uint32_t ctrl;
       
  1869     int32_t ret_val;
       
  1870     uint16_t phy_data;
       
  1871 
       
  1872     DEBUGFUNC("e1000_config_mac_to_phy");
       
  1873 
       
  1874     /* 82544 or newer MAC, Auto Speed Detection takes care of 
       
  1875     * MAC speed/duplex configuration.*/
       
  1876     if (hw->mac_type >= e1000_82544)
       
  1877         return E1000_SUCCESS;
       
  1878 
       
  1879     /* Read the Device Control Register and set the bits to Force Speed
       
  1880      * and Duplex.
       
  1881      */
       
  1882     ctrl = E1000_READ_REG(hw, CTRL);
       
  1883     ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
       
  1884     ctrl &= ~(E1000_CTRL_SPD_SEL | E1000_CTRL_ILOS);
       
  1885 
       
  1886     /* Set up duplex in the Device Control and Transmit Control
       
  1887      * registers depending on negotiated values.
       
  1888      */
       
  1889     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
       
  1890     if(ret_val)
       
  1891         return ret_val;
       
  1892 
       
  1893     if(phy_data & M88E1000_PSSR_DPLX) 
       
  1894         ctrl |= E1000_CTRL_FD;
       
  1895     else 
       
  1896         ctrl &= ~E1000_CTRL_FD;
       
  1897 
       
  1898     e1000_config_collision_dist(hw);
       
  1899 
       
  1900     /* Set up speed in the Device Control register depending on
       
  1901      * negotiated values.
       
  1902      */
       
  1903     if((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS)
       
  1904         ctrl |= E1000_CTRL_SPD_1000;
       
  1905     else if((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_100MBS)
       
  1906         ctrl |= E1000_CTRL_SPD_100;
       
  1907 
       
  1908     /* Write the configured values back to the Device Control Reg. */
       
  1909     E1000_WRITE_REG(hw, CTRL, ctrl);
       
  1910     return E1000_SUCCESS;
       
  1911 }
       
  1912 
       
  1913 /******************************************************************************
       
  1914  * Forces the MAC's flow control settings.
       
  1915  *
       
  1916  * hw - Struct containing variables accessed by shared code
       
  1917  *
       
  1918  * Sets the TFCE and RFCE bits in the device control register to reflect
       
  1919  * the adapter settings. TFCE and RFCE need to be explicitly set by
       
  1920  * software when a Copper PHY is used because autonegotiation is managed
       
  1921  * by the PHY rather than the MAC. Software must also configure these
       
  1922  * bits when link is forced on a fiber connection.
       
  1923  *****************************************************************************/
       
  1924 int32_t
       
  1925 e1000_force_mac_fc(struct e1000_hw *hw)
       
  1926 {
       
  1927     uint32_t ctrl;
       
  1928 
       
  1929     DEBUGFUNC("e1000_force_mac_fc");
       
  1930 
       
  1931     /* Get the current configuration of the Device Control Register */
       
  1932     ctrl = E1000_READ_REG(hw, CTRL);
       
  1933 
       
  1934     /* Because we didn't get link via the internal auto-negotiation
       
  1935      * mechanism (we either forced link or we got link via PHY
       
  1936      * auto-neg), we have to manually enable/disable transmit an
       
  1937      * receive flow control.
       
  1938      *
       
  1939      * The "Case" statement below enables/disable flow control
       
  1940      * according to the "hw->fc" parameter.
       
  1941      *
       
  1942      * The possible values of the "fc" parameter are:
       
  1943      *      0:  Flow control is completely disabled
       
  1944      *      1:  Rx flow control is enabled (we can receive pause
       
  1945      *          frames but not send pause frames).
       
  1946      *      2:  Tx flow control is enabled (we can send pause frames
       
  1947      *          frames but we do not receive pause frames).
       
  1948      *      3:  Both Rx and TX flow control (symmetric) is enabled.
       
  1949      *  other:  No other values should be possible at this point.
       
  1950      */
       
  1951 
       
  1952     switch (hw->fc) {
       
  1953     case e1000_fc_none:
       
  1954         ctrl &= (~(E1000_CTRL_TFCE | E1000_CTRL_RFCE));
       
  1955         break;
       
  1956     case e1000_fc_rx_pause:
       
  1957         ctrl &= (~E1000_CTRL_TFCE);
       
  1958         ctrl |= E1000_CTRL_RFCE;
       
  1959         break;
       
  1960     case e1000_fc_tx_pause:
       
  1961         ctrl &= (~E1000_CTRL_RFCE);
       
  1962         ctrl |= E1000_CTRL_TFCE;
       
  1963         break;
       
  1964     case e1000_fc_full:
       
  1965         ctrl |= (E1000_CTRL_TFCE | E1000_CTRL_RFCE);
       
  1966         break;
       
  1967     default:
       
  1968         DEBUGOUT("Flow control param set incorrectly\n");
       
  1969         return -E1000_ERR_CONFIG;
       
  1970     }
       
  1971 
       
  1972     /* Disable TX Flow Control for 82542 (rev 2.0) */
       
  1973     if(hw->mac_type == e1000_82542_rev2_0)
       
  1974         ctrl &= (~E1000_CTRL_TFCE);
       
  1975 
       
  1976     E1000_WRITE_REG(hw, CTRL, ctrl);
       
  1977     return E1000_SUCCESS;
       
  1978 }
       
  1979 
       
  1980 /******************************************************************************
       
  1981  * Configures flow control settings after link is established
       
  1982  *
       
  1983  * hw - Struct containing variables accessed by shared code
       
  1984  *
       
  1985  * Should be called immediately after a valid link has been established.
       
  1986  * Forces MAC flow control settings if link was forced. When in MII/GMII mode
       
  1987  * and autonegotiation is enabled, the MAC flow control settings will be set
       
  1988  * based on the flow control negotiated by the PHY. In TBI mode, the TFCE
       
  1989  * and RFCE bits will be automaticaly set to the negotiated flow control mode.
       
  1990  *****************************************************************************/
       
  1991 int32_t
       
  1992 e1000_config_fc_after_link_up(struct e1000_hw *hw)
       
  1993 {
       
  1994     int32_t ret_val;
       
  1995     uint16_t mii_status_reg;
       
  1996     uint16_t mii_nway_adv_reg;
       
  1997     uint16_t mii_nway_lp_ability_reg;
       
  1998     uint16_t speed;
       
  1999     uint16_t duplex;
       
  2000 
       
  2001     DEBUGFUNC("e1000_config_fc_after_link_up");
       
  2002 
       
  2003     /* Check for the case where we have fiber media and auto-neg failed
       
  2004      * so we had to force link.  In this case, we need to force the
       
  2005      * configuration of the MAC to match the "fc" parameter.
       
  2006      */
       
  2007     if(((hw->media_type == e1000_media_type_fiber) && (hw->autoneg_failed)) ||
       
  2008        ((hw->media_type == e1000_media_type_internal_serdes) && (hw->autoneg_failed)) ||
       
  2009        ((hw->media_type == e1000_media_type_copper) && (!hw->autoneg))) {
       
  2010         ret_val = e1000_force_mac_fc(hw);
       
  2011         if(ret_val) {
       
  2012             DEBUGOUT("Error forcing flow control settings\n");
       
  2013             return ret_val;
       
  2014         }
       
  2015     }
       
  2016 
       
  2017     /* Check for the case where we have copper media and auto-neg is
       
  2018      * enabled.  In this case, we need to check and see if Auto-Neg
       
  2019      * has completed, and if so, how the PHY and link partner has
       
  2020      * flow control configured.
       
  2021      */
       
  2022     if((hw->media_type == e1000_media_type_copper) && hw->autoneg) {
       
  2023         /* Read the MII Status Register and check to see if AutoNeg
       
  2024          * has completed.  We read this twice because this reg has
       
  2025          * some "sticky" (latched) bits.
       
  2026          */
       
  2027         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
       
  2028         if(ret_val)
       
  2029             return ret_val;
       
  2030         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
       
  2031         if(ret_val)
       
  2032             return ret_val;
       
  2033 
       
  2034         if(mii_status_reg & MII_SR_AUTONEG_COMPLETE) {
       
  2035             /* The AutoNeg process has completed, so we now need to
       
  2036              * read both the Auto Negotiation Advertisement Register
       
  2037              * (Address 4) and the Auto_Negotiation Base Page Ability
       
  2038              * Register (Address 5) to determine how flow control was
       
  2039              * negotiated.
       
  2040              */
       
  2041             ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_ADV,
       
  2042                                          &mii_nway_adv_reg);
       
  2043             if(ret_val)
       
  2044                 return ret_val;
       
  2045             ret_val = e1000_read_phy_reg(hw, PHY_LP_ABILITY,
       
  2046                                          &mii_nway_lp_ability_reg);
       
  2047             if(ret_val)
       
  2048                 return ret_val;
       
  2049 
       
  2050             /* Two bits in the Auto Negotiation Advertisement Register
       
  2051              * (Address 4) and two bits in the Auto Negotiation Base
       
  2052              * Page Ability Register (Address 5) determine flow control
       
  2053              * for both the PHY and the link partner.  The following
       
  2054              * table, taken out of the IEEE 802.3ab/D6.0 dated March 25,
       
  2055              * 1999, describes these PAUSE resolution bits and how flow
       
  2056              * control is determined based upon these settings.
       
  2057              * NOTE:  DC = Don't Care
       
  2058              *
       
  2059              *   LOCAL DEVICE  |   LINK PARTNER
       
  2060              * PAUSE | ASM_DIR | PAUSE | ASM_DIR | NIC Resolution
       
  2061              *-------|---------|-------|---------|--------------------
       
  2062              *   0   |    0    |  DC   |   DC    | e1000_fc_none
       
  2063              *   0   |    1    |   0   |   DC    | e1000_fc_none
       
  2064              *   0   |    1    |   1   |    0    | e1000_fc_none
       
  2065              *   0   |    1    |   1   |    1    | e1000_fc_tx_pause
       
  2066              *   1   |    0    |   0   |   DC    | e1000_fc_none
       
  2067              *   1   |   DC    |   1   |   DC    | e1000_fc_full
       
  2068              *   1   |    1    |   0   |    0    | e1000_fc_none
       
  2069              *   1   |    1    |   0   |    1    | e1000_fc_rx_pause
       
  2070              *
       
  2071              */
       
  2072             /* Are both PAUSE bits set to 1?  If so, this implies
       
  2073              * Symmetric Flow Control is enabled at both ends.  The
       
  2074              * ASM_DIR bits are irrelevant per the spec.
       
  2075              *
       
  2076              * For Symmetric Flow Control:
       
  2077              *
       
  2078              *   LOCAL DEVICE  |   LINK PARTNER
       
  2079              * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
       
  2080              *-------|---------|-------|---------|--------------------
       
  2081              *   1   |   DC    |   1   |   DC    | e1000_fc_full
       
  2082              *
       
  2083              */
       
  2084             if((mii_nway_adv_reg & NWAY_AR_PAUSE) &&
       
  2085                (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE)) {
       
  2086                 /* Now we need to check if the user selected RX ONLY
       
  2087                  * of pause frames.  In this case, we had to advertise
       
  2088                  * FULL flow control because we could not advertise RX
       
  2089                  * ONLY. Hence, we must now check to see if we need to
       
  2090                  * turn OFF  the TRANSMISSION of PAUSE frames.
       
  2091                  */
       
  2092                 if(hw->original_fc == e1000_fc_full) {
       
  2093                     hw->fc = e1000_fc_full;
       
  2094                     DEBUGOUT("Flow Control = FULL.\r\n");
       
  2095                 } else {
       
  2096                     hw->fc = e1000_fc_rx_pause;
       
  2097                     DEBUGOUT("Flow Control = RX PAUSE frames only.\r\n");
       
  2098                 }
       
  2099             }
       
  2100             /* For receiving PAUSE frames ONLY.
       
  2101              *
       
  2102              *   LOCAL DEVICE  |   LINK PARTNER
       
  2103              * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
       
  2104              *-------|---------|-------|---------|--------------------
       
  2105              *   0   |    1    |   1   |    1    | e1000_fc_tx_pause
       
  2106              *
       
  2107              */
       
  2108             else if(!(mii_nway_adv_reg & NWAY_AR_PAUSE) &&
       
  2109                     (mii_nway_adv_reg & NWAY_AR_ASM_DIR) &&
       
  2110                     (mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
       
  2111                     (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) {
       
  2112                 hw->fc = e1000_fc_tx_pause;
       
  2113                 DEBUGOUT("Flow Control = TX PAUSE frames only.\r\n");
       
  2114             }
       
  2115             /* For transmitting PAUSE frames ONLY.
       
  2116              *
       
  2117              *   LOCAL DEVICE  |   LINK PARTNER
       
  2118              * PAUSE | ASM_DIR | PAUSE | ASM_DIR | Result
       
  2119              *-------|---------|-------|---------|--------------------
       
  2120              *   1   |    1    |   0   |    1    | e1000_fc_rx_pause
       
  2121              *
       
  2122              */
       
  2123             else if((mii_nway_adv_reg & NWAY_AR_PAUSE) &&
       
  2124                     (mii_nway_adv_reg & NWAY_AR_ASM_DIR) &&
       
  2125                     !(mii_nway_lp_ability_reg & NWAY_LPAR_PAUSE) &&
       
  2126                     (mii_nway_lp_ability_reg & NWAY_LPAR_ASM_DIR)) {
       
  2127                 hw->fc = e1000_fc_rx_pause;
       
  2128                 DEBUGOUT("Flow Control = RX PAUSE frames only.\r\n");
       
  2129             }
       
  2130             /* Per the IEEE spec, at this point flow control should be
       
  2131              * disabled.  However, we want to consider that we could
       
  2132              * be connected to a legacy switch that doesn't advertise
       
  2133              * desired flow control, but can be forced on the link
       
  2134              * partner.  So if we advertised no flow control, that is
       
  2135              * what we will resolve to.  If we advertised some kind of
       
  2136              * receive capability (Rx Pause Only or Full Flow Control)
       
  2137              * and the link partner advertised none, we will configure
       
  2138              * ourselves to enable Rx Flow Control only.  We can do
       
  2139              * this safely for two reasons:  If the link partner really
       
  2140              * didn't want flow control enabled, and we enable Rx, no
       
  2141              * harm done since we won't be receiving any PAUSE frames
       
  2142              * anyway.  If the intent on the link partner was to have
       
  2143              * flow control enabled, then by us enabling RX only, we
       
  2144              * can at least receive pause frames and process them.
       
  2145              * This is a good idea because in most cases, since we are
       
  2146              * predominantly a server NIC, more times than not we will
       
  2147              * be asked to delay transmission of packets than asking
       
  2148              * our link partner to pause transmission of frames.
       
  2149              */
       
  2150             else if((hw->original_fc == e1000_fc_none ||
       
  2151                      hw->original_fc == e1000_fc_tx_pause) ||
       
  2152                     hw->fc_strict_ieee) {
       
  2153                 hw->fc = e1000_fc_none;
       
  2154                 DEBUGOUT("Flow Control = NONE.\r\n");
       
  2155             } else {
       
  2156                 hw->fc = e1000_fc_rx_pause;
       
  2157                 DEBUGOUT("Flow Control = RX PAUSE frames only.\r\n");
       
  2158             }
       
  2159 
       
  2160             /* Now we need to do one last check...  If we auto-
       
  2161              * negotiated to HALF DUPLEX, flow control should not be
       
  2162              * enabled per IEEE 802.3 spec.
       
  2163              */
       
  2164             ret_val = e1000_get_speed_and_duplex(hw, &speed, &duplex);
       
  2165             if(ret_val) {
       
  2166                 DEBUGOUT("Error getting link speed and duplex\n");
       
  2167                 return ret_val;
       
  2168             }
       
  2169 
       
  2170             if(duplex == HALF_DUPLEX)
       
  2171                 hw->fc = e1000_fc_none;
       
  2172 
       
  2173             /* Now we call a subroutine to actually force the MAC
       
  2174              * controller to use the correct flow control settings.
       
  2175              */
       
  2176             ret_val = e1000_force_mac_fc(hw);
       
  2177             if(ret_val) {
       
  2178                 DEBUGOUT("Error forcing flow control settings\n");
       
  2179                 return ret_val;
       
  2180             }
       
  2181         } else {
       
  2182             DEBUGOUT("Copper PHY and Auto Neg has not completed.\r\n");
       
  2183         }
       
  2184     }
       
  2185     return E1000_SUCCESS;
       
  2186 }
       
  2187 
       
  2188 /******************************************************************************
       
  2189  * Checks to see if the link status of the hardware has changed.
       
  2190  *
       
  2191  * hw - Struct containing variables accessed by shared code
       
  2192  *
       
  2193  * Called by any function that needs to check the link status of the adapter.
       
  2194  *****************************************************************************/
       
  2195 int32_t
       
  2196 e1000_check_for_link(struct e1000_hw *hw)
       
  2197 {
       
  2198     uint32_t rxcw = 0;
       
  2199     uint32_t ctrl;
       
  2200     uint32_t status;
       
  2201     uint32_t rctl;
       
  2202     uint32_t icr;
       
  2203     uint32_t signal = 0;
       
  2204     int32_t ret_val;
       
  2205     uint16_t phy_data;
       
  2206 
       
  2207     DEBUGFUNC("e1000_check_for_link");
       
  2208 
       
  2209     ctrl = E1000_READ_REG(hw, CTRL);
       
  2210     status = E1000_READ_REG(hw, STATUS);
       
  2211 
       
  2212     /* On adapters with a MAC newer than 82544, SW Defineable pin 1 will be
       
  2213      * set when the optics detect a signal. On older adapters, it will be
       
  2214      * cleared when there is a signal.  This applies to fiber media only.
       
  2215      */
       
  2216     if((hw->media_type == e1000_media_type_fiber) ||
       
  2217        (hw->media_type == e1000_media_type_internal_serdes)) {
       
  2218         rxcw = E1000_READ_REG(hw, RXCW);
       
  2219 
       
  2220         if(hw->media_type == e1000_media_type_fiber) {
       
  2221             signal = (hw->mac_type > e1000_82544) ? E1000_CTRL_SWDPIN1 : 0;
       
  2222             if(status & E1000_STATUS_LU)
       
  2223                 hw->get_link_status = FALSE;
       
  2224         }
       
  2225     }
       
  2226 
       
  2227     /* If we have a copper PHY then we only want to go out to the PHY
       
  2228      * registers to see if Auto-Neg has completed and/or if our link
       
  2229      * status has changed.  The get_link_status flag will be set if we
       
  2230      * receive a Link Status Change interrupt or we have Rx Sequence
       
  2231      * Errors.
       
  2232      */
       
  2233     if((hw->media_type == e1000_media_type_copper) && hw->get_link_status) {
       
  2234         /* First we want to see if the MII Status Register reports
       
  2235          * link.  If so, then we want to get the current speed/duplex
       
  2236          * of the PHY.
       
  2237          * Read the register twice since the link bit is sticky.
       
  2238          */
       
  2239         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
       
  2240         if(ret_val)
       
  2241             return ret_val;
       
  2242         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
       
  2243         if(ret_val)
       
  2244             return ret_val;
       
  2245 
       
  2246         if(phy_data & MII_SR_LINK_STATUS) {
       
  2247             hw->get_link_status = FALSE;
       
  2248             /* Check if there was DownShift, must be checked immediately after
       
  2249              * link-up */
       
  2250             e1000_check_downshift(hw);
       
  2251 
       
  2252             /* If we are on 82544 or 82543 silicon and speed/duplex
       
  2253              * are forced to 10H or 10F, then we will implement the polarity
       
  2254              * reversal workaround.  We disable interrupts first, and upon
       
  2255              * returning, place the devices interrupt state to its previous
       
  2256              * value except for the link status change interrupt which will
       
  2257              * happen due to the execution of this workaround.
       
  2258              */
       
  2259 
       
  2260             if((hw->mac_type == e1000_82544 || hw->mac_type == e1000_82543) &&
       
  2261                (!hw->autoneg) &&
       
  2262                (hw->forced_speed_duplex == e1000_10_full ||
       
  2263                 hw->forced_speed_duplex == e1000_10_half)) {
       
  2264                 E1000_WRITE_REG(hw, IMC, 0xffffffff);
       
  2265                 ret_val = e1000_polarity_reversal_workaround(hw);
       
  2266                 icr = E1000_READ_REG(hw, ICR);
       
  2267                 E1000_WRITE_REG(hw, ICS, (icr & ~E1000_ICS_LSC));
       
  2268                 E1000_WRITE_REG(hw, IMS, IMS_ENABLE_MASK);
       
  2269             }
       
  2270 
       
  2271         } else {
       
  2272             /* No link detected */
       
  2273             e1000_config_dsp_after_link_change(hw, FALSE);
       
  2274             return 0;
       
  2275         }
       
  2276 
       
  2277         /* If we are forcing speed/duplex, then we simply return since
       
  2278          * we have already determined whether we have link or not.
       
  2279          */
       
  2280         if(!hw->autoneg) return -E1000_ERR_CONFIG;
       
  2281 
       
  2282         /* optimize the dsp settings for the igp phy */
       
  2283         e1000_config_dsp_after_link_change(hw, TRUE);
       
  2284 
       
  2285         /* We have a M88E1000 PHY and Auto-Neg is enabled.  If we
       
  2286          * have Si on board that is 82544 or newer, Auto
       
  2287          * Speed Detection takes care of MAC speed/duplex
       
  2288          * configuration.  So we only need to configure Collision
       
  2289          * Distance in the MAC.  Otherwise, we need to force
       
  2290          * speed/duplex on the MAC to the current PHY speed/duplex
       
  2291          * settings.
       
  2292          */
       
  2293         if(hw->mac_type >= e1000_82544)
       
  2294             e1000_config_collision_dist(hw);
       
  2295         else {
       
  2296             ret_val = e1000_config_mac_to_phy(hw);
       
  2297             if(ret_val) {
       
  2298                 DEBUGOUT("Error configuring MAC to PHY settings\n");
       
  2299                 return ret_val;
       
  2300             }
       
  2301         }
       
  2302 
       
  2303         /* Configure Flow Control now that Auto-Neg has completed. First, we
       
  2304          * need to restore the desired flow control settings because we may
       
  2305          * have had to re-autoneg with a different link partner.
       
  2306          */
       
  2307         ret_val = e1000_config_fc_after_link_up(hw);
       
  2308         if(ret_val) {
       
  2309             DEBUGOUT("Error configuring flow control\n");
       
  2310             return ret_val;
       
  2311         }
       
  2312 
       
  2313         /* At this point we know that we are on copper and we have
       
  2314          * auto-negotiated link.  These are conditions for checking the link
       
  2315          * partner capability register.  We use the link speed to determine if
       
  2316          * TBI compatibility needs to be turned on or off.  If the link is not
       
  2317          * at gigabit speed, then TBI compatibility is not needed.  If we are
       
  2318          * at gigabit speed, we turn on TBI compatibility.
       
  2319          */
       
  2320         if(hw->tbi_compatibility_en) {
       
  2321             uint16_t speed, duplex;
       
  2322             e1000_get_speed_and_duplex(hw, &speed, &duplex);
       
  2323             if(speed != SPEED_1000) {
       
  2324                 /* If link speed is not set to gigabit speed, we do not need
       
  2325                  * to enable TBI compatibility.
       
  2326                  */
       
  2327                 if(hw->tbi_compatibility_on) {
       
  2328                     /* If we previously were in the mode, turn it off. */
       
  2329                     rctl = E1000_READ_REG(hw, RCTL);
       
  2330                     rctl &= ~E1000_RCTL_SBP;
       
  2331                     E1000_WRITE_REG(hw, RCTL, rctl);
       
  2332                     hw->tbi_compatibility_on = FALSE;
       
  2333                 }
       
  2334             } else {
       
  2335                 /* If TBI compatibility is was previously off, turn it on. For
       
  2336                  * compatibility with a TBI link partner, we will store bad
       
  2337                  * packets. Some frames have an additional byte on the end and
       
  2338                  * will look like CRC errors to to the hardware.
       
  2339                  */
       
  2340                 if(!hw->tbi_compatibility_on) {
       
  2341                     hw->tbi_compatibility_on = TRUE;
       
  2342                     rctl = E1000_READ_REG(hw, RCTL);
       
  2343                     rctl |= E1000_RCTL_SBP;
       
  2344                     E1000_WRITE_REG(hw, RCTL, rctl);
       
  2345                 }
       
  2346             }
       
  2347         }
       
  2348     }
       
  2349     /* If we don't have link (auto-negotiation failed or link partner cannot
       
  2350      * auto-negotiate), the cable is plugged in (we have signal), and our
       
  2351      * link partner is not trying to auto-negotiate with us (we are receiving
       
  2352      * idles or data), we need to force link up. We also need to give
       
  2353      * auto-negotiation time to complete, in case the cable was just plugged
       
  2354      * in. The autoneg_failed flag does this.
       
  2355      */
       
  2356     else if((((hw->media_type == e1000_media_type_fiber) &&
       
  2357               ((ctrl & E1000_CTRL_SWDPIN1) == signal)) ||
       
  2358              (hw->media_type == e1000_media_type_internal_serdes)) &&
       
  2359             (!(status & E1000_STATUS_LU)) &&
       
  2360             (!(rxcw & E1000_RXCW_C))) {
       
  2361         if(hw->autoneg_failed == 0) {
       
  2362             hw->autoneg_failed = 1;
       
  2363             return 0;
       
  2364         }
       
  2365         DEBUGOUT("NOT RXing /C/, disable AutoNeg and force link.\r\n");
       
  2366 
       
  2367         /* Disable auto-negotiation in the TXCW register */
       
  2368         E1000_WRITE_REG(hw, TXCW, (hw->txcw & ~E1000_TXCW_ANE));
       
  2369 
       
  2370         /* Force link-up and also force full-duplex. */
       
  2371         ctrl = E1000_READ_REG(hw, CTRL);
       
  2372         ctrl |= (E1000_CTRL_SLU | E1000_CTRL_FD);
       
  2373         E1000_WRITE_REG(hw, CTRL, ctrl);
       
  2374 
       
  2375         /* Configure Flow Control after forcing link up. */
       
  2376         ret_val = e1000_config_fc_after_link_up(hw);
       
  2377         if(ret_val) {
       
  2378             DEBUGOUT("Error configuring flow control\n");
       
  2379             return ret_val;
       
  2380         }
       
  2381     }
       
  2382     /* If we are forcing link and we are receiving /C/ ordered sets, re-enable
       
  2383      * auto-negotiation in the TXCW register and disable forced link in the
       
  2384      * Device Control register in an attempt to auto-negotiate with our link
       
  2385      * partner.
       
  2386      */
       
  2387     else if(((hw->media_type == e1000_media_type_fiber) ||
       
  2388              (hw->media_type == e1000_media_type_internal_serdes)) &&
       
  2389             (ctrl & E1000_CTRL_SLU) && (rxcw & E1000_RXCW_C)) {
       
  2390         DEBUGOUT("RXing /C/, enable AutoNeg and stop forcing link.\r\n");
       
  2391         E1000_WRITE_REG(hw, TXCW, hw->txcw);
       
  2392         E1000_WRITE_REG(hw, CTRL, (ctrl & ~E1000_CTRL_SLU));
       
  2393 
       
  2394         hw->serdes_link_down = FALSE;
       
  2395     }
       
  2396     /* If we force link for non-auto-negotiation switch, check link status
       
  2397      * based on MAC synchronization for internal serdes media type.
       
  2398      */
       
  2399     else if((hw->media_type == e1000_media_type_internal_serdes) &&
       
  2400             !(E1000_TXCW_ANE & E1000_READ_REG(hw, TXCW))) {
       
  2401         /* SYNCH bit and IV bit are sticky. */
       
  2402         udelay(10);
       
  2403         if(E1000_RXCW_SYNCH & E1000_READ_REG(hw, RXCW)) {
       
  2404             if(!(rxcw & E1000_RXCW_IV)) {
       
  2405                 hw->serdes_link_down = FALSE;
       
  2406                 DEBUGOUT("SERDES: Link is up.\n");
       
  2407             }
       
  2408         } else {
       
  2409             hw->serdes_link_down = TRUE;
       
  2410             DEBUGOUT("SERDES: Link is down.\n");
       
  2411         }
       
  2412     }
       
  2413     if((hw->media_type == e1000_media_type_internal_serdes) &&
       
  2414        (E1000_TXCW_ANE & E1000_READ_REG(hw, TXCW))) {
       
  2415         hw->serdes_link_down = !(E1000_STATUS_LU & E1000_READ_REG(hw, STATUS));
       
  2416     }
       
  2417     return E1000_SUCCESS;
       
  2418 }
       
  2419 
       
  2420 /******************************************************************************
       
  2421  * Detects the current speed and duplex settings of the hardware.
       
  2422  *
       
  2423  * hw - Struct containing variables accessed by shared code
       
  2424  * speed - Speed of the connection
       
  2425  * duplex - Duplex setting of the connection
       
  2426  *****************************************************************************/
       
  2427 int32_t
       
  2428 e1000_get_speed_and_duplex(struct e1000_hw *hw,
       
  2429                            uint16_t *speed,
       
  2430                            uint16_t *duplex)
       
  2431 {
       
  2432     uint32_t status;
       
  2433     int32_t ret_val;
       
  2434     uint16_t phy_data;
       
  2435 
       
  2436     DEBUGFUNC("e1000_get_speed_and_duplex");
       
  2437 
       
  2438     if(hw->mac_type >= e1000_82543) {
       
  2439         status = E1000_READ_REG(hw, STATUS);
       
  2440         if(status & E1000_STATUS_SPEED_1000) {
       
  2441             *speed = SPEED_1000;
       
  2442             DEBUGOUT("1000 Mbs, ");
       
  2443         } else if(status & E1000_STATUS_SPEED_100) {
       
  2444             *speed = SPEED_100;
       
  2445             DEBUGOUT("100 Mbs, ");
       
  2446         } else {
       
  2447             *speed = SPEED_10;
       
  2448             DEBUGOUT("10 Mbs, ");
       
  2449         }
       
  2450 
       
  2451         if(status & E1000_STATUS_FD) {
       
  2452             *duplex = FULL_DUPLEX;
       
  2453             DEBUGOUT("Full Duplex\r\n");
       
  2454         } else {
       
  2455             *duplex = HALF_DUPLEX;
       
  2456             DEBUGOUT(" Half Duplex\r\n");
       
  2457         }
       
  2458     } else {
       
  2459         DEBUGOUT("1000 Mbs, Full Duplex\r\n");
       
  2460         *speed = SPEED_1000;
       
  2461         *duplex = FULL_DUPLEX;
       
  2462     }
       
  2463 
       
  2464     /* IGP01 PHY may advertise full duplex operation after speed downgrade even
       
  2465      * if it is operating at half duplex.  Here we set the duplex settings to
       
  2466      * match the duplex in the link partner's capabilities.
       
  2467      */
       
  2468     if(hw->phy_type == e1000_phy_igp && hw->speed_downgraded) {
       
  2469         ret_val = e1000_read_phy_reg(hw, PHY_AUTONEG_EXP, &phy_data);
       
  2470         if(ret_val)
       
  2471             return ret_val;
       
  2472 
       
  2473         if(!(phy_data & NWAY_ER_LP_NWAY_CAPS))
       
  2474             *duplex = HALF_DUPLEX;
       
  2475         else {
       
  2476             ret_val = e1000_read_phy_reg(hw, PHY_LP_ABILITY, &phy_data);
       
  2477             if(ret_val)
       
  2478                 return ret_val;
       
  2479             if((*speed == SPEED_100 && !(phy_data & NWAY_LPAR_100TX_FD_CAPS)) ||
       
  2480                (*speed == SPEED_10 && !(phy_data & NWAY_LPAR_10T_FD_CAPS)))
       
  2481                 *duplex = HALF_DUPLEX;
       
  2482         }
       
  2483     }
       
  2484 
       
  2485     return E1000_SUCCESS;
       
  2486 }
       
  2487 
       
  2488 /******************************************************************************
       
  2489 * Blocks until autoneg completes or times out (~4.5 seconds)
       
  2490 *
       
  2491 * hw - Struct containing variables accessed by shared code
       
  2492 ******************************************************************************/
       
  2493 int32_t
       
  2494 e1000_wait_autoneg(struct e1000_hw *hw)
       
  2495 {
       
  2496     int32_t ret_val;
       
  2497     uint16_t i;
       
  2498     uint16_t phy_data;
       
  2499 
       
  2500     DEBUGFUNC("e1000_wait_autoneg");
       
  2501     DEBUGOUT("Waiting for Auto-Neg to complete.\n");
       
  2502 
       
  2503     /* We will wait for autoneg to complete or 4.5 seconds to expire. */
       
  2504     for(i = PHY_AUTO_NEG_TIME; i > 0; i--) {
       
  2505         /* Read the MII Status Register and wait for Auto-Neg
       
  2506          * Complete bit to be set.
       
  2507          */
       
  2508         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
       
  2509         if(ret_val)
       
  2510             return ret_val;
       
  2511         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
       
  2512         if(ret_val)
       
  2513             return ret_val;
       
  2514         if(phy_data & MII_SR_AUTONEG_COMPLETE) {
       
  2515             return E1000_SUCCESS;
       
  2516         }
       
  2517         msec_delay(100);
       
  2518     }
       
  2519     return E1000_SUCCESS;
       
  2520 }
       
  2521 
       
  2522 /******************************************************************************
       
  2523 * Raises the Management Data Clock
       
  2524 *
       
  2525 * hw - Struct containing variables accessed by shared code
       
  2526 * ctrl - Device control register's current value
       
  2527 ******************************************************************************/
       
  2528 static void
       
  2529 e1000_raise_mdi_clk(struct e1000_hw *hw,
       
  2530                     uint32_t *ctrl)
       
  2531 {
       
  2532     /* Raise the clock input to the Management Data Clock (by setting the MDC
       
  2533      * bit), and then delay 10 microseconds.
       
  2534      */
       
  2535     E1000_WRITE_REG(hw, CTRL, (*ctrl | E1000_CTRL_MDC));
       
  2536     E1000_WRITE_FLUSH(hw);
       
  2537     udelay(10);
       
  2538 }
       
  2539 
       
  2540 /******************************************************************************
       
  2541 * Lowers the Management Data Clock
       
  2542 *
       
  2543 * hw - Struct containing variables accessed by shared code
       
  2544 * ctrl - Device control register's current value
       
  2545 ******************************************************************************/
       
  2546 static void
       
  2547 e1000_lower_mdi_clk(struct e1000_hw *hw,
       
  2548                     uint32_t *ctrl)
       
  2549 {
       
  2550     /* Lower the clock input to the Management Data Clock (by clearing the MDC
       
  2551      * bit), and then delay 10 microseconds.
       
  2552      */
       
  2553     E1000_WRITE_REG(hw, CTRL, (*ctrl & ~E1000_CTRL_MDC));
       
  2554     E1000_WRITE_FLUSH(hw);
       
  2555     udelay(10);
       
  2556 }
       
  2557 
       
  2558 /******************************************************************************
       
  2559 * Shifts data bits out to the PHY
       
  2560 *
       
  2561 * hw - Struct containing variables accessed by shared code
       
  2562 * data - Data to send out to the PHY
       
  2563 * count - Number of bits to shift out
       
  2564 *
       
  2565 * Bits are shifted out in MSB to LSB order.
       
  2566 ******************************************************************************/
       
  2567 static void
       
  2568 e1000_shift_out_mdi_bits(struct e1000_hw *hw,
       
  2569                          uint32_t data,
       
  2570                          uint16_t count)
       
  2571 {
       
  2572     uint32_t ctrl;
       
  2573     uint32_t mask;
       
  2574 
       
  2575     /* We need to shift "count" number of bits out to the PHY. So, the value
       
  2576      * in the "data" parameter will be shifted out to the PHY one bit at a
       
  2577      * time. In order to do this, "data" must be broken down into bits.
       
  2578      */
       
  2579     mask = 0x01;
       
  2580     mask <<= (count - 1);
       
  2581 
       
  2582     ctrl = E1000_READ_REG(hw, CTRL);
       
  2583 
       
  2584     /* Set MDIO_DIR and MDC_DIR direction bits to be used as output pins. */
       
  2585     ctrl |= (E1000_CTRL_MDIO_DIR | E1000_CTRL_MDC_DIR);
       
  2586 
       
  2587     while(mask) {
       
  2588         /* A "1" is shifted out to the PHY by setting the MDIO bit to "1" and
       
  2589          * then raising and lowering the Management Data Clock. A "0" is
       
  2590          * shifted out to the PHY by setting the MDIO bit to "0" and then
       
  2591          * raising and lowering the clock.
       
  2592          */
       
  2593         if(data & mask) ctrl |= E1000_CTRL_MDIO;
       
  2594         else ctrl &= ~E1000_CTRL_MDIO;
       
  2595 
       
  2596         E1000_WRITE_REG(hw, CTRL, ctrl);
       
  2597         E1000_WRITE_FLUSH(hw);
       
  2598 
       
  2599         udelay(10);
       
  2600 
       
  2601         e1000_raise_mdi_clk(hw, &ctrl);
       
  2602         e1000_lower_mdi_clk(hw, &ctrl);
       
  2603 
       
  2604         mask = mask >> 1;
       
  2605     }
       
  2606 }
       
  2607 
       
  2608 /******************************************************************************
       
  2609 * Shifts data bits in from the PHY
       
  2610 *
       
  2611 * hw - Struct containing variables accessed by shared code
       
  2612 *
       
  2613 * Bits are shifted in in MSB to LSB order.
       
  2614 ******************************************************************************/
       
  2615 static uint16_t
       
  2616 e1000_shift_in_mdi_bits(struct e1000_hw *hw)
       
  2617 {
       
  2618     uint32_t ctrl;
       
  2619     uint16_t data = 0;
       
  2620     uint8_t i;
       
  2621 
       
  2622     /* In order to read a register from the PHY, we need to shift in a total
       
  2623      * of 18 bits from the PHY. The first two bit (turnaround) times are used
       
  2624      * to avoid contention on the MDIO pin when a read operation is performed.
       
  2625      * These two bits are ignored by us and thrown away. Bits are "shifted in"
       
  2626      * by raising the input to the Management Data Clock (setting the MDC bit),
       
  2627      * and then reading the value of the MDIO bit.
       
  2628      */
       
  2629     ctrl = E1000_READ_REG(hw, CTRL);
       
  2630 
       
  2631     /* Clear MDIO_DIR (SWDPIO1) to indicate this bit is to be used as input. */
       
  2632     ctrl &= ~E1000_CTRL_MDIO_DIR;
       
  2633     ctrl &= ~E1000_CTRL_MDIO;
       
  2634 
       
  2635     E1000_WRITE_REG(hw, CTRL, ctrl);
       
  2636     E1000_WRITE_FLUSH(hw);
       
  2637 
       
  2638     /* Raise and Lower the clock before reading in the data. This accounts for
       
  2639      * the turnaround bits. The first clock occurred when we clocked out the
       
  2640      * last bit of the Register Address.
       
  2641      */
       
  2642     e1000_raise_mdi_clk(hw, &ctrl);
       
  2643     e1000_lower_mdi_clk(hw, &ctrl);
       
  2644 
       
  2645     for(data = 0, i = 0; i < 16; i++) {
       
  2646         data = data << 1;
       
  2647         e1000_raise_mdi_clk(hw, &ctrl);
       
  2648         ctrl = E1000_READ_REG(hw, CTRL);
       
  2649         /* Check to see if we shifted in a "1". */
       
  2650         if(ctrl & E1000_CTRL_MDIO) data |= 1;
       
  2651         e1000_lower_mdi_clk(hw, &ctrl);
       
  2652     }
       
  2653 
       
  2654     e1000_raise_mdi_clk(hw, &ctrl);
       
  2655     e1000_lower_mdi_clk(hw, &ctrl);
       
  2656 
       
  2657     return data;
       
  2658 }
       
  2659 
       
  2660 /*****************************************************************************
       
  2661 * Reads the value from a PHY register, if the value is on a specific non zero
       
  2662 * page, sets the page first.
       
  2663 * hw - Struct containing variables accessed by shared code
       
  2664 * reg_addr - address of the PHY register to read
       
  2665 ******************************************************************************/
       
  2666 int32_t
       
  2667 e1000_read_phy_reg(struct e1000_hw *hw,
       
  2668                    uint32_t reg_addr,
       
  2669                    uint16_t *phy_data)
       
  2670 {
       
  2671     uint32_t ret_val;
       
  2672 
       
  2673     DEBUGFUNC("e1000_read_phy_reg");
       
  2674 
       
  2675     if((hw->phy_type == e1000_phy_igp || 
       
  2676         hw->phy_type == e1000_phy_igp_2) &&
       
  2677        (reg_addr > MAX_PHY_MULTI_PAGE_REG)) {
       
  2678         ret_val = e1000_write_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT,
       
  2679                                          (uint16_t)reg_addr);
       
  2680         if(ret_val) {
       
  2681             return ret_val;
       
  2682         }
       
  2683     }
       
  2684 
       
  2685     ret_val = e1000_read_phy_reg_ex(hw, MAX_PHY_REG_ADDRESS & reg_addr,
       
  2686                                     phy_data);
       
  2687 
       
  2688     return ret_val;
       
  2689 }
       
  2690 
       
  2691 int32_t
       
  2692 e1000_read_phy_reg_ex(struct e1000_hw *hw,
       
  2693                       uint32_t reg_addr,
       
  2694                       uint16_t *phy_data)
       
  2695 {
       
  2696     uint32_t i;
       
  2697     uint32_t mdic = 0;
       
  2698     const uint32_t phy_addr = 1;
       
  2699 
       
  2700     DEBUGFUNC("e1000_read_phy_reg_ex");
       
  2701 
       
  2702     if(reg_addr > MAX_PHY_REG_ADDRESS) {
       
  2703         DEBUGOUT1("PHY Address %d is out of range\n", reg_addr);
       
  2704         return -E1000_ERR_PARAM;
       
  2705     }
       
  2706 
       
  2707     if(hw->mac_type > e1000_82543) {
       
  2708         /* Set up Op-code, Phy Address, and register address in the MDI
       
  2709          * Control register.  The MAC will take care of interfacing with the
       
  2710          * PHY to retrieve the desired data.
       
  2711          */
       
  2712         mdic = ((reg_addr << E1000_MDIC_REG_SHIFT) |
       
  2713                 (phy_addr << E1000_MDIC_PHY_SHIFT) |
       
  2714                 (E1000_MDIC_OP_READ));
       
  2715 
       
  2716         E1000_WRITE_REG(hw, MDIC, mdic);
       
  2717 
       
  2718         /* Poll the ready bit to see if the MDI read completed */
       
  2719         for(i = 0; i < 64; i++) {
       
  2720             udelay(50);
       
  2721             mdic = E1000_READ_REG(hw, MDIC);
       
  2722             if(mdic & E1000_MDIC_READY) break;
       
  2723         }
       
  2724         if(!(mdic & E1000_MDIC_READY)) {
       
  2725             DEBUGOUT("MDI Read did not complete\n");
       
  2726             return -E1000_ERR_PHY;
       
  2727         }
       
  2728         if(mdic & E1000_MDIC_ERROR) {
       
  2729             DEBUGOUT("MDI Error\n");
       
  2730             return -E1000_ERR_PHY;
       
  2731         }
       
  2732         *phy_data = (uint16_t) mdic;
       
  2733     } else {
       
  2734         /* We must first send a preamble through the MDIO pin to signal the
       
  2735          * beginning of an MII instruction.  This is done by sending 32
       
  2736          * consecutive "1" bits.
       
  2737          */
       
  2738         e1000_shift_out_mdi_bits(hw, PHY_PREAMBLE, PHY_PREAMBLE_SIZE);
       
  2739 
       
  2740         /* Now combine the next few fields that are required for a read
       
  2741          * operation.  We use this method instead of calling the
       
  2742          * e1000_shift_out_mdi_bits routine five different times. The format of
       
  2743          * a MII read instruction consists of a shift out of 14 bits and is
       
  2744          * defined as follows:
       
  2745          *    <Preamble><SOF><Op Code><Phy Addr><Reg Addr>
       
  2746          * followed by a shift in of 18 bits.  This first two bits shifted in
       
  2747          * are TurnAround bits used to avoid contention on the MDIO pin when a
       
  2748          * READ operation is performed.  These two bits are thrown away
       
  2749          * followed by a shift in of 16 bits which contains the desired data.
       
  2750          */
       
  2751         mdic = ((reg_addr) | (phy_addr << 5) |
       
  2752                 (PHY_OP_READ << 10) | (PHY_SOF << 12));
       
  2753 
       
  2754         e1000_shift_out_mdi_bits(hw, mdic, 14);
       
  2755 
       
  2756         /* Now that we've shifted out the read command to the MII, we need to
       
  2757          * "shift in" the 16-bit value (18 total bits) of the requested PHY
       
  2758          * register address.
       
  2759          */
       
  2760         *phy_data = e1000_shift_in_mdi_bits(hw);
       
  2761     }
       
  2762     return E1000_SUCCESS;
       
  2763 }
       
  2764 
       
  2765 /******************************************************************************
       
  2766 * Writes a value to a PHY register
       
  2767 *
       
  2768 * hw - Struct containing variables accessed by shared code
       
  2769 * reg_addr - address of the PHY register to write
       
  2770 * data - data to write to the PHY
       
  2771 ******************************************************************************/
       
  2772 int32_t
       
  2773 e1000_write_phy_reg(struct e1000_hw *hw,
       
  2774                     uint32_t reg_addr,
       
  2775                     uint16_t phy_data)
       
  2776 {
       
  2777     uint32_t ret_val;
       
  2778 
       
  2779     DEBUGFUNC("e1000_write_phy_reg");
       
  2780 
       
  2781     if((hw->phy_type == e1000_phy_igp || 
       
  2782         hw->phy_type == e1000_phy_igp_2) &&
       
  2783        (reg_addr > MAX_PHY_MULTI_PAGE_REG)) {
       
  2784         ret_val = e1000_write_phy_reg_ex(hw, IGP01E1000_PHY_PAGE_SELECT,
       
  2785                                          (uint16_t)reg_addr);
       
  2786         if(ret_val) {
       
  2787             return ret_val;
       
  2788         }
       
  2789     }
       
  2790 
       
  2791     ret_val = e1000_write_phy_reg_ex(hw, MAX_PHY_REG_ADDRESS & reg_addr,
       
  2792                                      phy_data);
       
  2793 
       
  2794     return ret_val;
       
  2795 }
       
  2796 
       
  2797 int32_t
       
  2798 e1000_write_phy_reg_ex(struct e1000_hw *hw,
       
  2799                     uint32_t reg_addr,
       
  2800                     uint16_t phy_data)
       
  2801 {
       
  2802     uint32_t i;
       
  2803     uint32_t mdic = 0;
       
  2804     const uint32_t phy_addr = 1;
       
  2805 
       
  2806     DEBUGFUNC("e1000_write_phy_reg_ex");
       
  2807 
       
  2808     if(reg_addr > MAX_PHY_REG_ADDRESS) {
       
  2809         DEBUGOUT1("PHY Address %d is out of range\n", reg_addr);
       
  2810         return -E1000_ERR_PARAM;
       
  2811     }
       
  2812 
       
  2813     if(hw->mac_type > e1000_82543) {
       
  2814         /* Set up Op-code, Phy Address, register address, and data intended
       
  2815          * for the PHY register in the MDI Control register.  The MAC will take
       
  2816          * care of interfacing with the PHY to send the desired data.
       
  2817          */
       
  2818         mdic = (((uint32_t) phy_data) |
       
  2819                 (reg_addr << E1000_MDIC_REG_SHIFT) |
       
  2820                 (phy_addr << E1000_MDIC_PHY_SHIFT) |
       
  2821                 (E1000_MDIC_OP_WRITE));
       
  2822 
       
  2823         E1000_WRITE_REG(hw, MDIC, mdic);
       
  2824 
       
  2825         /* Poll the ready bit to see if the MDI read completed */
       
  2826         for(i = 0; i < 640; i++) {
       
  2827             udelay(5);
       
  2828             mdic = E1000_READ_REG(hw, MDIC);
       
  2829             if(mdic & E1000_MDIC_READY) break;
       
  2830         }
       
  2831         if(!(mdic & E1000_MDIC_READY)) {
       
  2832             DEBUGOUT("MDI Write did not complete\n");
       
  2833             return -E1000_ERR_PHY;
       
  2834         }
       
  2835     } else {
       
  2836         /* We'll need to use the SW defined pins to shift the write command
       
  2837          * out to the PHY. We first send a preamble to the PHY to signal the
       
  2838          * beginning of the MII instruction.  This is done by sending 32
       
  2839          * consecutive "1" bits.
       
  2840          */
       
  2841         e1000_shift_out_mdi_bits(hw, PHY_PREAMBLE, PHY_PREAMBLE_SIZE);
       
  2842 
       
  2843         /* Now combine the remaining required fields that will indicate a
       
  2844          * write operation. We use this method instead of calling the
       
  2845          * e1000_shift_out_mdi_bits routine for each field in the command. The
       
  2846          * format of a MII write instruction is as follows:
       
  2847          * <Preamble><SOF><Op Code><Phy Addr><Reg Addr><Turnaround><Data>.
       
  2848          */
       
  2849         mdic = ((PHY_TURNAROUND) | (reg_addr << 2) | (phy_addr << 7) |
       
  2850                 (PHY_OP_WRITE << 12) | (PHY_SOF << 14));
       
  2851         mdic <<= 16;
       
  2852         mdic |= (uint32_t) phy_data;
       
  2853 
       
  2854         e1000_shift_out_mdi_bits(hw, mdic, 32);
       
  2855     }
       
  2856 
       
  2857     return E1000_SUCCESS;
       
  2858 }
       
  2859 
       
  2860 
       
  2861 /******************************************************************************
       
  2862 * Returns the PHY to the power-on reset state
       
  2863 *
       
  2864 * hw - Struct containing variables accessed by shared code
       
  2865 ******************************************************************************/
       
  2866 int32_t
       
  2867 e1000_phy_hw_reset(struct e1000_hw *hw)
       
  2868 {
       
  2869     uint32_t ctrl, ctrl_ext;
       
  2870     uint32_t led_ctrl;
       
  2871     int32_t ret_val;
       
  2872 
       
  2873     DEBUGFUNC("e1000_phy_hw_reset");
       
  2874 
       
  2875     /* In the case of the phy reset being blocked, it's not an error, we
       
  2876      * simply return success without performing the reset. */
       
  2877     ret_val = e1000_check_phy_reset_block(hw);
       
  2878     if (ret_val)
       
  2879         return E1000_SUCCESS;
       
  2880 
       
  2881     DEBUGOUT("Resetting Phy...\n");
       
  2882 
       
  2883     if(hw->mac_type > e1000_82543) {
       
  2884         /* Read the device control register and assert the E1000_CTRL_PHY_RST
       
  2885          * bit. Then, take it out of reset.
       
  2886          */
       
  2887         ctrl = E1000_READ_REG(hw, CTRL);
       
  2888         E1000_WRITE_REG(hw, CTRL, ctrl | E1000_CTRL_PHY_RST);
       
  2889         E1000_WRITE_FLUSH(hw);
       
  2890         msec_delay(10);
       
  2891         E1000_WRITE_REG(hw, CTRL, ctrl);
       
  2892         E1000_WRITE_FLUSH(hw);
       
  2893     } else {
       
  2894         /* Read the Extended Device Control Register, assert the PHY_RESET_DIR
       
  2895          * bit to put the PHY into reset. Then, take it out of reset.
       
  2896          */
       
  2897         ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
       
  2898         ctrl_ext |= E1000_CTRL_EXT_SDP4_DIR;
       
  2899         ctrl_ext &= ~E1000_CTRL_EXT_SDP4_DATA;
       
  2900         E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
       
  2901         E1000_WRITE_FLUSH(hw);
       
  2902         msec_delay(10);
       
  2903         ctrl_ext |= E1000_CTRL_EXT_SDP4_DATA;
       
  2904         E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
       
  2905         E1000_WRITE_FLUSH(hw);
       
  2906     }
       
  2907     udelay(150);
       
  2908 
       
  2909     if((hw->mac_type == e1000_82541) || (hw->mac_type == e1000_82547)) {
       
  2910         /* Configure activity LED after PHY reset */
       
  2911         led_ctrl = E1000_READ_REG(hw, LEDCTL);
       
  2912         led_ctrl &= IGP_ACTIVITY_LED_MASK;
       
  2913         led_ctrl |= (IGP_ACTIVITY_LED_ENABLE | IGP_LED3_MODE);
       
  2914         E1000_WRITE_REG(hw, LEDCTL, led_ctrl);
       
  2915     }
       
  2916 
       
  2917     /* Wait for FW to finish PHY configuration. */
       
  2918     ret_val = e1000_get_phy_cfg_done(hw);
       
  2919 
       
  2920     return ret_val;
       
  2921 }
       
  2922 
       
  2923 /******************************************************************************
       
  2924 * Resets the PHY
       
  2925 *
       
  2926 * hw - Struct containing variables accessed by shared code
       
  2927 *
       
  2928 * Sets bit 15 of the MII Control regiser
       
  2929 ******************************************************************************/
       
  2930 int32_t
       
  2931 e1000_phy_reset(struct e1000_hw *hw)
       
  2932 {
       
  2933     int32_t ret_val;
       
  2934     uint16_t phy_data;
       
  2935 
       
  2936     DEBUGFUNC("e1000_phy_reset");
       
  2937 
       
  2938     /* In the case of the phy reset being blocked, it's not an error, we
       
  2939      * simply return success without performing the reset. */
       
  2940     ret_val = e1000_check_phy_reset_block(hw);
       
  2941     if (ret_val)
       
  2942         return E1000_SUCCESS;
       
  2943 
       
  2944     switch (hw->mac_type) {
       
  2945     case e1000_82541_rev_2:
       
  2946         ret_val = e1000_phy_hw_reset(hw);
       
  2947         if(ret_val)
       
  2948             return ret_val;
       
  2949         break;
       
  2950     default:
       
  2951         ret_val = e1000_read_phy_reg(hw, PHY_CTRL, &phy_data);
       
  2952         if(ret_val)
       
  2953             return ret_val;
       
  2954 
       
  2955         phy_data |= MII_CR_RESET;
       
  2956         ret_val = e1000_write_phy_reg(hw, PHY_CTRL, phy_data);
       
  2957         if(ret_val)
       
  2958             return ret_val;
       
  2959 
       
  2960         udelay(1);
       
  2961         break;
       
  2962     }
       
  2963 
       
  2964     if(hw->phy_type == e1000_phy_igp || hw->phy_type == e1000_phy_igp_2)
       
  2965         e1000_phy_init_script(hw);
       
  2966 
       
  2967     return E1000_SUCCESS;
       
  2968 }
       
  2969 
       
  2970 /******************************************************************************
       
  2971 * Probes the expected PHY address for known PHY IDs
       
  2972 *
       
  2973 * hw - Struct containing variables accessed by shared code
       
  2974 ******************************************************************************/
       
  2975 int32_t
       
  2976 e1000_detect_gig_phy(struct e1000_hw *hw)
       
  2977 {
       
  2978     int32_t phy_init_status, ret_val;
       
  2979     uint16_t phy_id_high, phy_id_low;
       
  2980     boolean_t match = FALSE;
       
  2981 
       
  2982     DEBUGFUNC("e1000_detect_gig_phy");
       
  2983 
       
  2984     /* Read the PHY ID Registers to identify which PHY is onboard. */
       
  2985     ret_val = e1000_read_phy_reg(hw, PHY_ID1, &phy_id_high);
       
  2986     if(ret_val)
       
  2987         return ret_val;
       
  2988 
       
  2989     hw->phy_id = (uint32_t) (phy_id_high << 16);
       
  2990     udelay(20);
       
  2991     ret_val = e1000_read_phy_reg(hw, PHY_ID2, &phy_id_low);
       
  2992     if(ret_val)
       
  2993         return ret_val;
       
  2994 
       
  2995     hw->phy_id |= (uint32_t) (phy_id_low & PHY_REVISION_MASK);
       
  2996     hw->phy_revision = (uint32_t) phy_id_low & ~PHY_REVISION_MASK;
       
  2997 
       
  2998     switch(hw->mac_type) {
       
  2999     case e1000_82543:
       
  3000         if(hw->phy_id == M88E1000_E_PHY_ID) match = TRUE;
       
  3001         break;
       
  3002     case e1000_82544:
       
  3003         if(hw->phy_id == M88E1000_I_PHY_ID) match = TRUE;
       
  3004         break;
       
  3005     case e1000_82540:
       
  3006     case e1000_82545:
       
  3007     case e1000_82545_rev_3:
       
  3008     case e1000_82546:
       
  3009     case e1000_82546_rev_3:
       
  3010         if(hw->phy_id == M88E1011_I_PHY_ID) match = TRUE;
       
  3011         break;
       
  3012     case e1000_82541:
       
  3013     case e1000_82541_rev_2:
       
  3014     case e1000_82547:
       
  3015     case e1000_82547_rev_2:
       
  3016         if(hw->phy_id == IGP01E1000_I_PHY_ID) match = TRUE;
       
  3017         break;
       
  3018     case e1000_82573:
       
  3019         if(hw->phy_id == M88E1111_I_PHY_ID) match = TRUE;
       
  3020         break;
       
  3021     default:
       
  3022         DEBUGOUT1("Invalid MAC type %d\n", hw->mac_type);
       
  3023         return -E1000_ERR_CONFIG;
       
  3024     }
       
  3025     phy_init_status = e1000_set_phy_type(hw);
       
  3026 
       
  3027     if ((match) && (phy_init_status == E1000_SUCCESS)) {
       
  3028         DEBUGOUT1("PHY ID 0x%X detected\n", hw->phy_id);
       
  3029         return E1000_SUCCESS;
       
  3030     }
       
  3031     DEBUGOUT1("Invalid PHY ID 0x%X\n", hw->phy_id);
       
  3032     return -E1000_ERR_PHY;
       
  3033 }
       
  3034 
       
  3035 /******************************************************************************
       
  3036 * Resets the PHY's DSP
       
  3037 *
       
  3038 * hw - Struct containing variables accessed by shared code
       
  3039 ******************************************************************************/
       
  3040 static int32_t
       
  3041 e1000_phy_reset_dsp(struct e1000_hw *hw)
       
  3042 {
       
  3043     int32_t ret_val;
       
  3044     DEBUGFUNC("e1000_phy_reset_dsp");
       
  3045 
       
  3046     do {
       
  3047         ret_val = e1000_write_phy_reg(hw, 29, 0x001d);
       
  3048         if(ret_val) break;
       
  3049         ret_val = e1000_write_phy_reg(hw, 30, 0x00c1);
       
  3050         if(ret_val) break;
       
  3051         ret_val = e1000_write_phy_reg(hw, 30, 0x0000);
       
  3052         if(ret_val) break;
       
  3053         ret_val = E1000_SUCCESS;
       
  3054     } while(0);
       
  3055 
       
  3056     return ret_val;
       
  3057 }
       
  3058 
       
  3059 /******************************************************************************
       
  3060 * Get PHY information from various PHY registers for igp PHY only.
       
  3061 *
       
  3062 * hw - Struct containing variables accessed by shared code
       
  3063 * phy_info - PHY information structure
       
  3064 ******************************************************************************/
       
  3065 int32_t
       
  3066 e1000_phy_igp_get_info(struct e1000_hw *hw,
       
  3067                        struct e1000_phy_info *phy_info)
       
  3068 {
       
  3069     int32_t ret_val;
       
  3070     uint16_t phy_data, polarity, min_length, max_length, average;
       
  3071 
       
  3072     DEBUGFUNC("e1000_phy_igp_get_info");
       
  3073 
       
  3074     /* The downshift status is checked only once, after link is established,
       
  3075      * and it stored in the hw->speed_downgraded parameter. */
       
  3076     phy_info->downshift = (e1000_downshift)hw->speed_downgraded;
       
  3077 
       
  3078     /* IGP01E1000 does not need to support it. */
       
  3079     phy_info->extended_10bt_distance = e1000_10bt_ext_dist_enable_normal;
       
  3080 
       
  3081     /* IGP01E1000 always correct polarity reversal */
       
  3082     phy_info->polarity_correction = e1000_polarity_reversal_enabled;
       
  3083 
       
  3084     /* Check polarity status */
       
  3085     ret_val = e1000_check_polarity(hw, &polarity);
       
  3086     if(ret_val)
       
  3087         return ret_val;
       
  3088 
       
  3089     phy_info->cable_polarity = polarity;
       
  3090 
       
  3091     ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS, &phy_data);
       
  3092     if(ret_val)
       
  3093         return ret_val;
       
  3094 
       
  3095     phy_info->mdix_mode = (phy_data & IGP01E1000_PSSR_MDIX) >>
       
  3096                           IGP01E1000_PSSR_MDIX_SHIFT;
       
  3097 
       
  3098     if((phy_data & IGP01E1000_PSSR_SPEED_MASK) ==
       
  3099        IGP01E1000_PSSR_SPEED_1000MBPS) {
       
  3100         /* Local/Remote Receiver Information are only valid at 1000 Mbps */
       
  3101         ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
       
  3102         if(ret_val)
       
  3103             return ret_val;
       
  3104 
       
  3105         phy_info->local_rx = (phy_data & SR_1000T_LOCAL_RX_STATUS) >>
       
  3106                              SR_1000T_LOCAL_RX_STATUS_SHIFT;
       
  3107         phy_info->remote_rx = (phy_data & SR_1000T_REMOTE_RX_STATUS) >>
       
  3108                               SR_1000T_REMOTE_RX_STATUS_SHIFT;
       
  3109 
       
  3110         /* Get cable length */
       
  3111         ret_val = e1000_get_cable_length(hw, &min_length, &max_length);
       
  3112         if(ret_val)
       
  3113             return ret_val;
       
  3114 
       
  3115         /* Translate to old method */
       
  3116         average = (max_length + min_length) / 2;
       
  3117 
       
  3118         if(average <= e1000_igp_cable_length_50)
       
  3119             phy_info->cable_length = e1000_cable_length_50;
       
  3120         else if(average <= e1000_igp_cable_length_80)
       
  3121             phy_info->cable_length = e1000_cable_length_50_80;
       
  3122         else if(average <= e1000_igp_cable_length_110)
       
  3123             phy_info->cable_length = e1000_cable_length_80_110;
       
  3124         else if(average <= e1000_igp_cable_length_140)
       
  3125             phy_info->cable_length = e1000_cable_length_110_140;
       
  3126         else
       
  3127             phy_info->cable_length = e1000_cable_length_140;
       
  3128     }
       
  3129 
       
  3130     return E1000_SUCCESS;
       
  3131 }
       
  3132 
       
  3133 /******************************************************************************
       
  3134 * Get PHY information from various PHY registers fot m88 PHY only.
       
  3135 *
       
  3136 * hw - Struct containing variables accessed by shared code
       
  3137 * phy_info - PHY information structure
       
  3138 ******************************************************************************/
       
  3139 int32_t
       
  3140 e1000_phy_m88_get_info(struct e1000_hw *hw,
       
  3141                        struct e1000_phy_info *phy_info)
       
  3142 {
       
  3143     int32_t ret_val;
       
  3144     uint16_t phy_data, polarity;
       
  3145 
       
  3146     DEBUGFUNC("e1000_phy_m88_get_info");
       
  3147 
       
  3148     /* The downshift status is checked only once, after link is established,
       
  3149      * and it stored in the hw->speed_downgraded parameter. */
       
  3150     phy_info->downshift = (e1000_downshift)hw->speed_downgraded;
       
  3151 
       
  3152     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
       
  3153     if(ret_val)
       
  3154         return ret_val;
       
  3155 
       
  3156     phy_info->extended_10bt_distance =
       
  3157         (phy_data & M88E1000_PSCR_10BT_EXT_DIST_ENABLE) >>
       
  3158         M88E1000_PSCR_10BT_EXT_DIST_ENABLE_SHIFT;
       
  3159     phy_info->polarity_correction =
       
  3160         (phy_data & M88E1000_PSCR_POLARITY_REVERSAL) >>
       
  3161         M88E1000_PSCR_POLARITY_REVERSAL_SHIFT;
       
  3162 
       
  3163     /* Check polarity status */
       
  3164     ret_val = e1000_check_polarity(hw, &polarity);
       
  3165     if(ret_val)
       
  3166         return ret_val; 
       
  3167     phy_info->cable_polarity = polarity;
       
  3168 
       
  3169     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
       
  3170     if(ret_val)
       
  3171         return ret_val;
       
  3172 
       
  3173     phy_info->mdix_mode = (phy_data & M88E1000_PSSR_MDIX) >>
       
  3174                           M88E1000_PSSR_MDIX_SHIFT;
       
  3175 
       
  3176     if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS) {
       
  3177         /* Cable Length Estimation and Local/Remote Receiver Information
       
  3178          * are only valid at 1000 Mbps.
       
  3179          */
       
  3180         phy_info->cable_length = ((phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
       
  3181                                   M88E1000_PSSR_CABLE_LENGTH_SHIFT);
       
  3182 
       
  3183         ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
       
  3184         if(ret_val)
       
  3185             return ret_val;
       
  3186 
       
  3187         phy_info->local_rx = (phy_data & SR_1000T_LOCAL_RX_STATUS) >>
       
  3188                              SR_1000T_LOCAL_RX_STATUS_SHIFT;
       
  3189 
       
  3190         phy_info->remote_rx = (phy_data & SR_1000T_REMOTE_RX_STATUS) >>
       
  3191                               SR_1000T_REMOTE_RX_STATUS_SHIFT;
       
  3192     }
       
  3193 
       
  3194     return E1000_SUCCESS;
       
  3195 }
       
  3196 
       
  3197 /******************************************************************************
       
  3198 * Get PHY information from various PHY registers
       
  3199 *
       
  3200 * hw - Struct containing variables accessed by shared code
       
  3201 * phy_info - PHY information structure
       
  3202 ******************************************************************************/
       
  3203 int32_t
       
  3204 e1000_phy_get_info(struct e1000_hw *hw,
       
  3205                    struct e1000_phy_info *phy_info)
       
  3206 {
       
  3207     int32_t ret_val;
       
  3208     uint16_t phy_data;
       
  3209 
       
  3210     DEBUGFUNC("e1000_phy_get_info");
       
  3211 
       
  3212     phy_info->cable_length = e1000_cable_length_undefined;
       
  3213     phy_info->extended_10bt_distance = e1000_10bt_ext_dist_enable_undefined;
       
  3214     phy_info->cable_polarity = e1000_rev_polarity_undefined;
       
  3215     phy_info->downshift = e1000_downshift_undefined;
       
  3216     phy_info->polarity_correction = e1000_polarity_reversal_undefined;
       
  3217     phy_info->mdix_mode = e1000_auto_x_mode_undefined;
       
  3218     phy_info->local_rx = e1000_1000t_rx_status_undefined;
       
  3219     phy_info->remote_rx = e1000_1000t_rx_status_undefined;
       
  3220 
       
  3221     if(hw->media_type != e1000_media_type_copper) {
       
  3222         DEBUGOUT("PHY info is only valid for copper media\n");
       
  3223         return -E1000_ERR_CONFIG;
       
  3224     }
       
  3225 
       
  3226     ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
       
  3227     if(ret_val)
       
  3228         return ret_val;
       
  3229 
       
  3230     ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &phy_data);
       
  3231     if(ret_val)
       
  3232         return ret_val;
       
  3233 
       
  3234     if((phy_data & MII_SR_LINK_STATUS) != MII_SR_LINK_STATUS) {
       
  3235         DEBUGOUT("PHY info is only valid if link is up\n");
       
  3236         return -E1000_ERR_CONFIG;
       
  3237     }
       
  3238 
       
  3239     if(hw->phy_type == e1000_phy_igp ||
       
  3240         hw->phy_type == e1000_phy_igp_2)
       
  3241         return e1000_phy_igp_get_info(hw, phy_info);
       
  3242     else
       
  3243         return e1000_phy_m88_get_info(hw, phy_info);
       
  3244 }
       
  3245 
       
  3246 int32_t
       
  3247 e1000_validate_mdi_setting(struct e1000_hw *hw)
       
  3248 {
       
  3249     DEBUGFUNC("e1000_validate_mdi_settings");
       
  3250 
       
  3251     if(!hw->autoneg && (hw->mdix == 0 || hw->mdix == 3)) {
       
  3252         DEBUGOUT("Invalid MDI setting detected\n");
       
  3253         hw->mdix = 1;
       
  3254         return -E1000_ERR_CONFIG;
       
  3255     }
       
  3256     return E1000_SUCCESS;
       
  3257 }
       
  3258 
       
  3259 
       
  3260 /******************************************************************************
       
  3261  * Sets up eeprom variables in the hw struct.  Must be called after mac_type
       
  3262  * is configured.
       
  3263  *
       
  3264  * hw - Struct containing variables accessed by shared code
       
  3265  *****************************************************************************/
       
  3266 int32_t
       
  3267 e1000_init_eeprom_params(struct e1000_hw *hw)
       
  3268 {
       
  3269     struct e1000_eeprom_info *eeprom = &hw->eeprom;
       
  3270     uint32_t eecd = E1000_READ_REG(hw, EECD);
       
  3271     int32_t ret_val = E1000_SUCCESS;
       
  3272     uint16_t eeprom_size;
       
  3273 
       
  3274     DEBUGFUNC("e1000_init_eeprom_params");
       
  3275 
       
  3276     switch (hw->mac_type) {
       
  3277     case e1000_82542_rev2_0:
       
  3278     case e1000_82542_rev2_1:
       
  3279     case e1000_82543:
       
  3280     case e1000_82544:
       
  3281         eeprom->type = e1000_eeprom_microwire;
       
  3282         eeprom->word_size = 64;
       
  3283         eeprom->opcode_bits = 3;
       
  3284         eeprom->address_bits = 6;
       
  3285         eeprom->delay_usec = 50;
       
  3286         eeprom->use_eerd = FALSE;
       
  3287         eeprom->use_eewr = FALSE;
       
  3288         break;
       
  3289     case e1000_82540:
       
  3290     case e1000_82545:
       
  3291     case e1000_82545_rev_3:
       
  3292     case e1000_82546:
       
  3293     case e1000_82546_rev_3:
       
  3294         eeprom->type = e1000_eeprom_microwire;
       
  3295         eeprom->opcode_bits = 3;
       
  3296         eeprom->delay_usec = 50;
       
  3297         if(eecd & E1000_EECD_SIZE) {
       
  3298             eeprom->word_size = 256;
       
  3299             eeprom->address_bits = 8;
       
  3300         } else {
       
  3301             eeprom->word_size = 64;
       
  3302             eeprom->address_bits = 6;
       
  3303         }
       
  3304         eeprom->use_eerd = FALSE;
       
  3305         eeprom->use_eewr = FALSE;
       
  3306         break;
       
  3307     case e1000_82541:
       
  3308     case e1000_82541_rev_2:
       
  3309     case e1000_82547:
       
  3310     case e1000_82547_rev_2:
       
  3311         if (eecd & E1000_EECD_TYPE) {
       
  3312             eeprom->type = e1000_eeprom_spi;
       
  3313             eeprom->opcode_bits = 8;
       
  3314             eeprom->delay_usec = 1;
       
  3315             if (eecd & E1000_EECD_ADDR_BITS) {
       
  3316                 eeprom->page_size = 32;
       
  3317                 eeprom->address_bits = 16;
       
  3318             } else {
       
  3319                 eeprom->page_size = 8;
       
  3320                 eeprom->address_bits = 8;
       
  3321             }
       
  3322         } else {
       
  3323             eeprom->type = e1000_eeprom_microwire;
       
  3324             eeprom->opcode_bits = 3;
       
  3325             eeprom->delay_usec = 50;
       
  3326             if (eecd & E1000_EECD_ADDR_BITS) {
       
  3327                 eeprom->word_size = 256;
       
  3328                 eeprom->address_bits = 8;
       
  3329             } else {
       
  3330                 eeprom->word_size = 64;
       
  3331                 eeprom->address_bits = 6;
       
  3332             }
       
  3333         }
       
  3334         eeprom->use_eerd = FALSE;
       
  3335         eeprom->use_eewr = FALSE;
       
  3336         break;
       
  3337     case e1000_82573:
       
  3338         eeprom->type = e1000_eeprom_spi;
       
  3339         eeprom->opcode_bits = 8;
       
  3340         eeprom->delay_usec = 1;
       
  3341         if (eecd & E1000_EECD_ADDR_BITS) {
       
  3342             eeprom->page_size = 32;
       
  3343             eeprom->address_bits = 16;
       
  3344         } else {
       
  3345             eeprom->page_size = 8;
       
  3346             eeprom->address_bits = 8;
       
  3347         }
       
  3348         eeprom->use_eerd = TRUE;
       
  3349         eeprom->use_eewr = TRUE;
       
  3350         if(e1000_is_onboard_nvm_eeprom(hw) == FALSE) {
       
  3351             eeprom->type = e1000_eeprom_flash;
       
  3352             eeprom->word_size = 2048;
       
  3353 
       
  3354             /* Ensure that the Autonomous FLASH update bit is cleared due to
       
  3355              * Flash update issue on parts which use a FLASH for NVM. */
       
  3356             eecd &= ~E1000_EECD_AUPDEN;
       
  3357             E1000_WRITE_REG(hw, EECD, eecd);
       
  3358         }
       
  3359         break;
       
  3360     default:
       
  3361         break;
       
  3362     }
       
  3363 
       
  3364     if (eeprom->type == e1000_eeprom_spi) {
       
  3365         /* eeprom_size will be an enum [0..8] that maps to eeprom sizes 128B to
       
  3366          * 32KB (incremented by powers of 2).
       
  3367          */
       
  3368         if(hw->mac_type <= e1000_82547_rev_2) {
       
  3369             /* Set to default value for initial eeprom read. */
       
  3370             eeprom->word_size = 64;
       
  3371             ret_val = e1000_read_eeprom(hw, EEPROM_CFG, 1, &eeprom_size);
       
  3372             if(ret_val)
       
  3373                 return ret_val;
       
  3374             eeprom_size = (eeprom_size & EEPROM_SIZE_MASK) >> EEPROM_SIZE_SHIFT;
       
  3375             /* 256B eeprom size was not supported in earlier hardware, so we
       
  3376              * bump eeprom_size up one to ensure that "1" (which maps to 256B)
       
  3377              * is never the result used in the shifting logic below. */
       
  3378             if(eeprom_size)
       
  3379                 eeprom_size++;
       
  3380         } else {
       
  3381             eeprom_size = (uint16_t)((eecd & E1000_EECD_SIZE_EX_MASK) >>
       
  3382                           E1000_EECD_SIZE_EX_SHIFT);
       
  3383         }
       
  3384 
       
  3385         eeprom->word_size = 1 << (eeprom_size + EEPROM_WORD_SIZE_SHIFT);
       
  3386     }
       
  3387     return ret_val;
       
  3388 }
       
  3389 
       
  3390 /******************************************************************************
       
  3391  * Raises the EEPROM's clock input.
       
  3392  *
       
  3393  * hw - Struct containing variables accessed by shared code
       
  3394  * eecd - EECD's current value
       
  3395  *****************************************************************************/
       
  3396 static void
       
  3397 e1000_raise_ee_clk(struct e1000_hw *hw,
       
  3398                    uint32_t *eecd)
       
  3399 {
       
  3400     /* Raise the clock input to the EEPROM (by setting the SK bit), and then
       
  3401      * wait <delay> microseconds.
       
  3402      */
       
  3403     *eecd = *eecd | E1000_EECD_SK;
       
  3404     E1000_WRITE_REG(hw, EECD, *eecd);
       
  3405     E1000_WRITE_FLUSH(hw);
       
  3406     udelay(hw->eeprom.delay_usec);
       
  3407 }
       
  3408 
       
  3409 /******************************************************************************
       
  3410  * Lowers the EEPROM's clock input.
       
  3411  *
       
  3412  * hw - Struct containing variables accessed by shared code
       
  3413  * eecd - EECD's current value
       
  3414  *****************************************************************************/
       
  3415 static void
       
  3416 e1000_lower_ee_clk(struct e1000_hw *hw,
       
  3417                    uint32_t *eecd)
       
  3418 {
       
  3419     /* Lower the clock input to the EEPROM (by clearing the SK bit), and then
       
  3420      * wait 50 microseconds.
       
  3421      */
       
  3422     *eecd = *eecd & ~E1000_EECD_SK;
       
  3423     E1000_WRITE_REG(hw, EECD, *eecd);
       
  3424     E1000_WRITE_FLUSH(hw);
       
  3425     udelay(hw->eeprom.delay_usec);
       
  3426 }
       
  3427 
       
  3428 /******************************************************************************
       
  3429  * Shift data bits out to the EEPROM.
       
  3430  *
       
  3431  * hw - Struct containing variables accessed by shared code
       
  3432  * data - data to send to the EEPROM
       
  3433  * count - number of bits to shift out
       
  3434  *****************************************************************************/
       
  3435 static void
       
  3436 e1000_shift_out_ee_bits(struct e1000_hw *hw,
       
  3437                         uint16_t data,
       
  3438                         uint16_t count)
       
  3439 {
       
  3440     struct e1000_eeprom_info *eeprom = &hw->eeprom;
       
  3441     uint32_t eecd;
       
  3442     uint32_t mask;
       
  3443 
       
  3444     /* We need to shift "count" bits out to the EEPROM. So, value in the
       
  3445      * "data" parameter will be shifted out to the EEPROM one bit at a time.
       
  3446      * In order to do this, "data" must be broken down into bits.
       
  3447      */
       
  3448     mask = 0x01 << (count - 1);
       
  3449     eecd = E1000_READ_REG(hw, EECD);
       
  3450     if (eeprom->type == e1000_eeprom_microwire) {
       
  3451         eecd &= ~E1000_EECD_DO;
       
  3452     } else if (eeprom->type == e1000_eeprom_spi) {
       
  3453         eecd |= E1000_EECD_DO;
       
  3454     }
       
  3455     do {
       
  3456         /* A "1" is shifted out to the EEPROM by setting bit "DI" to a "1",
       
  3457          * and then raising and then lowering the clock (the SK bit controls
       
  3458          * the clock input to the EEPROM).  A "0" is shifted out to the EEPROM
       
  3459          * by setting "DI" to "0" and then raising and then lowering the clock.
       
  3460          */
       
  3461         eecd &= ~E1000_EECD_DI;
       
  3462 
       
  3463         if(data & mask)
       
  3464             eecd |= E1000_EECD_DI;
       
  3465 
       
  3466         E1000_WRITE_REG(hw, EECD, eecd);
       
  3467         E1000_WRITE_FLUSH(hw);
       
  3468 
       
  3469         udelay(eeprom->delay_usec);
       
  3470 
       
  3471         e1000_raise_ee_clk(hw, &eecd);
       
  3472         e1000_lower_ee_clk(hw, &eecd);
       
  3473 
       
  3474         mask = mask >> 1;
       
  3475 
       
  3476     } while(mask);
       
  3477 
       
  3478     /* We leave the "DI" bit set to "0" when we leave this routine. */
       
  3479     eecd &= ~E1000_EECD_DI;
       
  3480     E1000_WRITE_REG(hw, EECD, eecd);
       
  3481 }
       
  3482 
       
  3483 /******************************************************************************
       
  3484  * Shift data bits in from the EEPROM
       
  3485  *
       
  3486  * hw - Struct containing variables accessed by shared code
       
  3487  *****************************************************************************/
       
  3488 static uint16_t
       
  3489 e1000_shift_in_ee_bits(struct e1000_hw *hw,
       
  3490                        uint16_t count)
       
  3491 {
       
  3492     uint32_t eecd;
       
  3493     uint32_t i;
       
  3494     uint16_t data;
       
  3495 
       
  3496     /* In order to read a register from the EEPROM, we need to shift 'count'
       
  3497      * bits in from the EEPROM. Bits are "shifted in" by raising the clock
       
  3498      * input to the EEPROM (setting the SK bit), and then reading the value of
       
  3499      * the "DO" bit.  During this "shifting in" process the "DI" bit should
       
  3500      * always be clear.
       
  3501      */
       
  3502 
       
  3503     eecd = E1000_READ_REG(hw, EECD);
       
  3504 
       
  3505     eecd &= ~(E1000_EECD_DO | E1000_EECD_DI);
       
  3506     data = 0;
       
  3507 
       
  3508     for(i = 0; i < count; i++) {
       
  3509         data = data << 1;
       
  3510         e1000_raise_ee_clk(hw, &eecd);
       
  3511 
       
  3512         eecd = E1000_READ_REG(hw, EECD);
       
  3513 
       
  3514         eecd &= ~(E1000_EECD_DI);
       
  3515         if(eecd & E1000_EECD_DO)
       
  3516             data |= 1;
       
  3517 
       
  3518         e1000_lower_ee_clk(hw, &eecd);
       
  3519     }
       
  3520 
       
  3521     return data;
       
  3522 }
       
  3523 
       
  3524 /******************************************************************************
       
  3525  * Prepares EEPROM for access
       
  3526  *
       
  3527  * hw - Struct containing variables accessed by shared code
       
  3528  *
       
  3529  * Lowers EEPROM clock. Clears input pin. Sets the chip select pin. This
       
  3530  * function should be called before issuing a command to the EEPROM.
       
  3531  *****************************************************************************/
       
  3532 static int32_t
       
  3533 e1000_acquire_eeprom(struct e1000_hw *hw)
       
  3534 {
       
  3535     struct e1000_eeprom_info *eeprom = &hw->eeprom;
       
  3536     uint32_t eecd, i=0;
       
  3537 
       
  3538     DEBUGFUNC("e1000_acquire_eeprom");
       
  3539 
       
  3540     if(e1000_get_hw_eeprom_semaphore(hw))
       
  3541         return -E1000_ERR_EEPROM;
       
  3542 
       
  3543     eecd = E1000_READ_REG(hw, EECD);
       
  3544 
       
  3545     if (hw->mac_type != e1000_82573) {
       
  3546     /* Request EEPROM Access */
       
  3547     if(hw->mac_type > e1000_82544) {
       
  3548         eecd |= E1000_EECD_REQ;
       
  3549         E1000_WRITE_REG(hw, EECD, eecd);
       
  3550         eecd = E1000_READ_REG(hw, EECD);
       
  3551         while((!(eecd & E1000_EECD_GNT)) &&
       
  3552               (i < E1000_EEPROM_GRANT_ATTEMPTS)) {
       
  3553             i++;
       
  3554             udelay(5);
       
  3555             eecd = E1000_READ_REG(hw, EECD);
       
  3556         }
       
  3557         if(!(eecd & E1000_EECD_GNT)) {
       
  3558             eecd &= ~E1000_EECD_REQ;
       
  3559             E1000_WRITE_REG(hw, EECD, eecd);
       
  3560             DEBUGOUT("Could not acquire EEPROM grant\n");
       
  3561             return -E1000_ERR_EEPROM;
       
  3562         }
       
  3563     }
       
  3564     }
       
  3565 
       
  3566     /* Setup EEPROM for Read/Write */
       
  3567 
       
  3568     if (eeprom->type == e1000_eeprom_microwire) {
       
  3569         /* Clear SK and DI */
       
  3570         eecd &= ~(E1000_EECD_DI | E1000_EECD_SK);
       
  3571         E1000_WRITE_REG(hw, EECD, eecd);
       
  3572 
       
  3573         /* Set CS */
       
  3574         eecd |= E1000_EECD_CS;
       
  3575         E1000_WRITE_REG(hw, EECD, eecd);
       
  3576     } else if (eeprom->type == e1000_eeprom_spi) {
       
  3577         /* Clear SK and CS */
       
  3578         eecd &= ~(E1000_EECD_CS | E1000_EECD_SK);
       
  3579         E1000_WRITE_REG(hw, EECD, eecd);
       
  3580         udelay(1);
       
  3581     }
       
  3582 
       
  3583     return E1000_SUCCESS;
       
  3584 }
       
  3585 
       
  3586 /******************************************************************************
       
  3587  * Returns EEPROM to a "standby" state
       
  3588  *
       
  3589  * hw - Struct containing variables accessed by shared code
       
  3590  *****************************************************************************/
       
  3591 static void
       
  3592 e1000_standby_eeprom(struct e1000_hw *hw)
       
  3593 {
       
  3594     struct e1000_eeprom_info *eeprom = &hw->eeprom;
       
  3595     uint32_t eecd;
       
  3596 
       
  3597     eecd = E1000_READ_REG(hw, EECD);
       
  3598 
       
  3599     if(eeprom->type == e1000_eeprom_microwire) {
       
  3600         eecd &= ~(E1000_EECD_CS | E1000_EECD_SK);
       
  3601         E1000_WRITE_REG(hw, EECD, eecd);
       
  3602         E1000_WRITE_FLUSH(hw);
       
  3603         udelay(eeprom->delay_usec);
       
  3604 
       
  3605         /* Clock high */
       
  3606         eecd |= E1000_EECD_SK;
       
  3607         E1000_WRITE_REG(hw, EECD, eecd);
       
  3608         E1000_WRITE_FLUSH(hw);
       
  3609         udelay(eeprom->delay_usec);
       
  3610 
       
  3611         /* Select EEPROM */
       
  3612         eecd |= E1000_EECD_CS;
       
  3613         E1000_WRITE_REG(hw, EECD, eecd);
       
  3614         E1000_WRITE_FLUSH(hw);
       
  3615         udelay(eeprom->delay_usec);
       
  3616 
       
  3617         /* Clock low */
       
  3618         eecd &= ~E1000_EECD_SK;
       
  3619         E1000_WRITE_REG(hw, EECD, eecd);
       
  3620         E1000_WRITE_FLUSH(hw);
       
  3621         udelay(eeprom->delay_usec);
       
  3622     } else if(eeprom->type == e1000_eeprom_spi) {
       
  3623         /* Toggle CS to flush commands */
       
  3624         eecd |= E1000_EECD_CS;
       
  3625         E1000_WRITE_REG(hw, EECD, eecd);
       
  3626         E1000_WRITE_FLUSH(hw);
       
  3627         udelay(eeprom->delay_usec);
       
  3628         eecd &= ~E1000_EECD_CS;
       
  3629         E1000_WRITE_REG(hw, EECD, eecd);
       
  3630         E1000_WRITE_FLUSH(hw);
       
  3631         udelay(eeprom->delay_usec);
       
  3632     }
       
  3633 }
       
  3634 
       
  3635 /******************************************************************************
       
  3636  * Terminates a command by inverting the EEPROM's chip select pin
       
  3637  *
       
  3638  * hw - Struct containing variables accessed by shared code
       
  3639  *****************************************************************************/
       
  3640 static void
       
  3641 e1000_release_eeprom(struct e1000_hw *hw)
       
  3642 {
       
  3643     uint32_t eecd;
       
  3644 
       
  3645     DEBUGFUNC("e1000_release_eeprom");
       
  3646 
       
  3647     eecd = E1000_READ_REG(hw, EECD);
       
  3648 
       
  3649     if (hw->eeprom.type == e1000_eeprom_spi) {
       
  3650         eecd |= E1000_EECD_CS;  /* Pull CS high */
       
  3651         eecd &= ~E1000_EECD_SK; /* Lower SCK */
       
  3652 
       
  3653         E1000_WRITE_REG(hw, EECD, eecd);
       
  3654 
       
  3655         udelay(hw->eeprom.delay_usec);
       
  3656     } else if(hw->eeprom.type == e1000_eeprom_microwire) {
       
  3657         /* cleanup eeprom */
       
  3658 
       
  3659         /* CS on Microwire is active-high */
       
  3660         eecd &= ~(E1000_EECD_CS | E1000_EECD_DI);
       
  3661 
       
  3662         E1000_WRITE_REG(hw, EECD, eecd);
       
  3663 
       
  3664         /* Rising edge of clock */
       
  3665         eecd |= E1000_EECD_SK;
       
  3666         E1000_WRITE_REG(hw, EECD, eecd);
       
  3667         E1000_WRITE_FLUSH(hw);
       
  3668         udelay(hw->eeprom.delay_usec);
       
  3669 
       
  3670         /* Falling edge of clock */
       
  3671         eecd &= ~E1000_EECD_SK;
       
  3672         E1000_WRITE_REG(hw, EECD, eecd);
       
  3673         E1000_WRITE_FLUSH(hw);
       
  3674         udelay(hw->eeprom.delay_usec);
       
  3675     }
       
  3676 
       
  3677     /* Stop requesting EEPROM access */
       
  3678     if(hw->mac_type > e1000_82544) {
       
  3679         eecd &= ~E1000_EECD_REQ;
       
  3680         E1000_WRITE_REG(hw, EECD, eecd);
       
  3681     }
       
  3682 
       
  3683     e1000_put_hw_eeprom_semaphore(hw);
       
  3684 }
       
  3685 
       
  3686 /******************************************************************************
       
  3687  * Reads a 16 bit word from the EEPROM.
       
  3688  *
       
  3689  * hw - Struct containing variables accessed by shared code
       
  3690  *****************************************************************************/
       
  3691 int32_t
       
  3692 e1000_spi_eeprom_ready(struct e1000_hw *hw)
       
  3693 {
       
  3694     uint16_t retry_count = 0;
       
  3695     uint8_t spi_stat_reg;
       
  3696 
       
  3697     DEBUGFUNC("e1000_spi_eeprom_ready");
       
  3698 
       
  3699     /* Read "Status Register" repeatedly until the LSB is cleared.  The
       
  3700      * EEPROM will signal that the command has been completed by clearing
       
  3701      * bit 0 of the internal status register.  If it's not cleared within
       
  3702      * 5 milliseconds, then error out.
       
  3703      */
       
  3704     retry_count = 0;
       
  3705     do {
       
  3706         e1000_shift_out_ee_bits(hw, EEPROM_RDSR_OPCODE_SPI,
       
  3707                                 hw->eeprom.opcode_bits);
       
  3708         spi_stat_reg = (uint8_t)e1000_shift_in_ee_bits(hw, 8);
       
  3709         if (!(spi_stat_reg & EEPROM_STATUS_RDY_SPI))
       
  3710             break;
       
  3711 
       
  3712         udelay(5);
       
  3713         retry_count += 5;
       
  3714 
       
  3715         e1000_standby_eeprom(hw);
       
  3716     } while(retry_count < EEPROM_MAX_RETRY_SPI);
       
  3717 
       
  3718     /* ATMEL SPI write time could vary from 0-20mSec on 3.3V devices (and
       
  3719      * only 0-5mSec on 5V devices)
       
  3720      */
       
  3721     if(retry_count >= EEPROM_MAX_RETRY_SPI) {
       
  3722         DEBUGOUT("SPI EEPROM Status error\n");
       
  3723         return -E1000_ERR_EEPROM;
       
  3724     }
       
  3725 
       
  3726     return E1000_SUCCESS;
       
  3727 }
       
  3728 
       
  3729 /******************************************************************************
       
  3730  * Reads a 16 bit word from the EEPROM.
       
  3731  *
       
  3732  * hw - Struct containing variables accessed by shared code
       
  3733  * offset - offset of  word in the EEPROM to read
       
  3734  * data - word read from the EEPROM
       
  3735  * words - number of words to read
       
  3736  *****************************************************************************/
       
  3737 int32_t
       
  3738 e1000_read_eeprom(struct e1000_hw *hw,
       
  3739                   uint16_t offset,
       
  3740                   uint16_t words,
       
  3741                   uint16_t *data)
       
  3742 {
       
  3743     struct e1000_eeprom_info *eeprom = &hw->eeprom;
       
  3744     uint32_t i = 0;
       
  3745     int32_t ret_val;
       
  3746 
       
  3747     DEBUGFUNC("e1000_read_eeprom");
       
  3748 
       
  3749     /* A check for invalid values:  offset too large, too many words, and not
       
  3750      * enough words.
       
  3751      */
       
  3752     if((offset >= eeprom->word_size) || (words > eeprom->word_size - offset) ||
       
  3753        (words == 0)) {
       
  3754         DEBUGOUT("\"words\" parameter out of bounds\n");
       
  3755         return -E1000_ERR_EEPROM;
       
  3756     }
       
  3757 
       
  3758     /* FLASH reads without acquiring the semaphore are safe in 82573-based
       
  3759      * controllers.
       
  3760      */
       
  3761     if ((e1000_is_onboard_nvm_eeprom(hw) == TRUE) ||
       
  3762         (hw->mac_type != e1000_82573)) {
       
  3763         /* Prepare the EEPROM for reading  */
       
  3764         if(e1000_acquire_eeprom(hw) != E1000_SUCCESS)
       
  3765             return -E1000_ERR_EEPROM;
       
  3766     }
       
  3767 
       
  3768     if(eeprom->use_eerd == TRUE) {
       
  3769         ret_val = e1000_read_eeprom_eerd(hw, offset, words, data);
       
  3770         if ((e1000_is_onboard_nvm_eeprom(hw) == TRUE) ||
       
  3771             (hw->mac_type != e1000_82573))
       
  3772             e1000_release_eeprom(hw);
       
  3773         return ret_val;
       
  3774     }
       
  3775 
       
  3776     if(eeprom->type == e1000_eeprom_spi) {
       
  3777         uint16_t word_in;
       
  3778         uint8_t read_opcode = EEPROM_READ_OPCODE_SPI;
       
  3779 
       
  3780         if(e1000_spi_eeprom_ready(hw)) {
       
  3781             e1000_release_eeprom(hw);
       
  3782             return -E1000_ERR_EEPROM;
       
  3783         }
       
  3784 
       
  3785         e1000_standby_eeprom(hw);
       
  3786 
       
  3787         /* Some SPI eeproms use the 8th address bit embedded in the opcode */
       
  3788         if((eeprom->address_bits == 8) && (offset >= 128))
       
  3789             read_opcode |= EEPROM_A8_OPCODE_SPI;
       
  3790 
       
  3791         /* Send the READ command (opcode + addr)  */
       
  3792         e1000_shift_out_ee_bits(hw, read_opcode, eeprom->opcode_bits);
       
  3793         e1000_shift_out_ee_bits(hw, (uint16_t)(offset*2), eeprom->address_bits);
       
  3794 
       
  3795         /* Read the data.  The address of the eeprom internally increments with
       
  3796          * each byte (spi) being read, saving on the overhead of eeprom setup
       
  3797          * and tear-down.  The address counter will roll over if reading beyond
       
  3798          * the size of the eeprom, thus allowing the entire memory to be read
       
  3799          * starting from any offset. */
       
  3800         for (i = 0; i < words; i++) {
       
  3801             word_in = e1000_shift_in_ee_bits(hw, 16);
       
  3802             data[i] = (word_in >> 8) | (word_in << 8);
       
  3803         }
       
  3804     } else if(eeprom->type == e1000_eeprom_microwire) {
       
  3805         for (i = 0; i < words; i++) {
       
  3806             /* Send the READ command (opcode + addr)  */
       
  3807             e1000_shift_out_ee_bits(hw, EEPROM_READ_OPCODE_MICROWIRE,
       
  3808                                     eeprom->opcode_bits);
       
  3809             e1000_shift_out_ee_bits(hw, (uint16_t)(offset + i),
       
  3810                                     eeprom->address_bits);
       
  3811 
       
  3812             /* Read the data.  For microwire, each word requires the overhead
       
  3813              * of eeprom setup and tear-down. */
       
  3814             data[i] = e1000_shift_in_ee_bits(hw, 16);
       
  3815             e1000_standby_eeprom(hw);
       
  3816         }
       
  3817     }
       
  3818 
       
  3819     /* End this read operation */
       
  3820     e1000_release_eeprom(hw);
       
  3821 
       
  3822     return E1000_SUCCESS;
       
  3823 }
       
  3824 
       
  3825 /******************************************************************************
       
  3826  * Reads a 16 bit word from the EEPROM using the EERD register.
       
  3827  *
       
  3828  * hw - Struct containing variables accessed by shared code
       
  3829  * offset - offset of  word in the EEPROM to read
       
  3830  * data - word read from the EEPROM
       
  3831  * words - number of words to read
       
  3832  *****************************************************************************/
       
  3833 int32_t
       
  3834 e1000_read_eeprom_eerd(struct e1000_hw *hw,
       
  3835                   uint16_t offset,
       
  3836                   uint16_t words,
       
  3837                   uint16_t *data)
       
  3838 {
       
  3839     uint32_t i, eerd = 0;
       
  3840     int32_t error = 0;
       
  3841 
       
  3842     for (i = 0; i < words; i++) {
       
  3843         eerd = ((offset+i) << E1000_EEPROM_RW_ADDR_SHIFT) +
       
  3844                          E1000_EEPROM_RW_REG_START;
       
  3845 
       
  3846         E1000_WRITE_REG(hw, EERD, eerd);
       
  3847         error = e1000_poll_eerd_eewr_done(hw, E1000_EEPROM_POLL_READ);
       
  3848         
       
  3849         if(error) {
       
  3850             break;
       
  3851         }
       
  3852         data[i] = (E1000_READ_REG(hw, EERD) >> E1000_EEPROM_RW_REG_DATA);
       
  3853       
       
  3854     }
       
  3855     
       
  3856     return error;
       
  3857 }
       
  3858 
       
  3859 /******************************************************************************
       
  3860  * Writes a 16 bit word from the EEPROM using the EEWR register.
       
  3861  *
       
  3862  * hw - Struct containing variables accessed by shared code
       
  3863  * offset - offset of  word in the EEPROM to read
       
  3864  * data - word read from the EEPROM
       
  3865  * words - number of words to read
       
  3866  *****************************************************************************/
       
  3867 int32_t
       
  3868 e1000_write_eeprom_eewr(struct e1000_hw *hw,
       
  3869                    uint16_t offset,
       
  3870                    uint16_t words,
       
  3871                    uint16_t *data)
       
  3872 {
       
  3873     uint32_t    register_value = 0;
       
  3874     uint32_t    i              = 0;
       
  3875     int32_t     error          = 0;
       
  3876 
       
  3877     for (i = 0; i < words; i++) {
       
  3878         register_value = (data[i] << E1000_EEPROM_RW_REG_DATA) | 
       
  3879                          ((offset+i) << E1000_EEPROM_RW_ADDR_SHIFT) | 
       
  3880                          E1000_EEPROM_RW_REG_START;
       
  3881 
       
  3882         error = e1000_poll_eerd_eewr_done(hw, E1000_EEPROM_POLL_WRITE);
       
  3883         if(error) {
       
  3884             break;
       
  3885         }       
       
  3886 
       
  3887         E1000_WRITE_REG(hw, EEWR, register_value);
       
  3888         
       
  3889         error = e1000_poll_eerd_eewr_done(hw, E1000_EEPROM_POLL_WRITE);
       
  3890         
       
  3891         if(error) {
       
  3892             break;
       
  3893         }       
       
  3894     }
       
  3895     
       
  3896     return error;
       
  3897 }
       
  3898 
       
  3899 /******************************************************************************
       
  3900  * Polls the status bit (bit 1) of the EERD to determine when the read is done.
       
  3901  *
       
  3902  * hw - Struct containing variables accessed by shared code
       
  3903  *****************************************************************************/
       
  3904 int32_t
       
  3905 e1000_poll_eerd_eewr_done(struct e1000_hw *hw, int eerd)
       
  3906 {
       
  3907     uint32_t attempts = 100000;
       
  3908     uint32_t i, reg = 0;
       
  3909     int32_t done = E1000_ERR_EEPROM;
       
  3910 
       
  3911     for(i = 0; i < attempts; i++) {
       
  3912         if(eerd == E1000_EEPROM_POLL_READ)
       
  3913             reg = E1000_READ_REG(hw, EERD);
       
  3914         else 
       
  3915             reg = E1000_READ_REG(hw, EEWR);
       
  3916 
       
  3917         if(reg & E1000_EEPROM_RW_REG_DONE) {
       
  3918             done = E1000_SUCCESS;
       
  3919             break;
       
  3920         }
       
  3921         udelay(5);
       
  3922     }
       
  3923 
       
  3924     return done;
       
  3925 }
       
  3926 
       
  3927 /***************************************************************************
       
  3928 * Description:     Determines if the onboard NVM is FLASH or EEPROM.
       
  3929 *
       
  3930 * hw - Struct containing variables accessed by shared code
       
  3931 ****************************************************************************/
       
  3932 boolean_t
       
  3933 e1000_is_onboard_nvm_eeprom(struct e1000_hw *hw)
       
  3934 {
       
  3935     uint32_t eecd = 0;
       
  3936 
       
  3937     if(hw->mac_type == e1000_82573) {
       
  3938         eecd = E1000_READ_REG(hw, EECD);
       
  3939 
       
  3940         /* Isolate bits 15 & 16 */
       
  3941         eecd = ((eecd >> 15) & 0x03);
       
  3942 
       
  3943         /* If both bits are set, device is Flash type */
       
  3944         if(eecd == 0x03) {
       
  3945             return FALSE;
       
  3946         }
       
  3947     }
       
  3948     return TRUE;
       
  3949 }
       
  3950 
       
  3951 /******************************************************************************
       
  3952  * Verifies that the EEPROM has a valid checksum
       
  3953  *
       
  3954  * hw - Struct containing variables accessed by shared code
       
  3955  *
       
  3956  * Reads the first 64 16 bit words of the EEPROM and sums the values read.
       
  3957  * If the the sum of the 64 16 bit words is 0xBABA, the EEPROM's checksum is
       
  3958  * valid.
       
  3959  *****************************************************************************/
       
  3960 int32_t
       
  3961 e1000_validate_eeprom_checksum(struct e1000_hw *hw)
       
  3962 {
       
  3963     uint16_t checksum = 0;
       
  3964     uint16_t i, eeprom_data;
       
  3965 
       
  3966     DEBUGFUNC("e1000_validate_eeprom_checksum");
       
  3967 
       
  3968     if ((hw->mac_type == e1000_82573) &&
       
  3969         (e1000_is_onboard_nvm_eeprom(hw) == FALSE)) {
       
  3970         /* Check bit 4 of word 10h.  If it is 0, firmware is done updating
       
  3971          * 10h-12h.  Checksum may need to be fixed. */
       
  3972         e1000_read_eeprom(hw, 0x10, 1, &eeprom_data);
       
  3973         if ((eeprom_data & 0x10) == 0) {
       
  3974             /* Read 0x23 and check bit 15.  This bit is a 1 when the checksum
       
  3975              * has already been fixed.  If the checksum is still wrong and this
       
  3976              * bit is a 1, we need to return bad checksum.  Otherwise, we need
       
  3977              * to set this bit to a 1 and update the checksum. */
       
  3978             e1000_read_eeprom(hw, 0x23, 1, &eeprom_data);
       
  3979             if ((eeprom_data & 0x8000) == 0) {
       
  3980                 eeprom_data |= 0x8000;
       
  3981                 e1000_write_eeprom(hw, 0x23, 1, &eeprom_data);
       
  3982                 e1000_update_eeprom_checksum(hw);
       
  3983             }
       
  3984         }
       
  3985     }
       
  3986 
       
  3987     for(i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++) {
       
  3988         if(e1000_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
       
  3989             DEBUGOUT("EEPROM Read Error\n");
       
  3990             return -E1000_ERR_EEPROM;
       
  3991         }
       
  3992         checksum += eeprom_data;
       
  3993     }
       
  3994 
       
  3995     if(checksum == (uint16_t) EEPROM_SUM)
       
  3996         return E1000_SUCCESS;
       
  3997     else {
       
  3998         DEBUGOUT("EEPROM Checksum Invalid\n");
       
  3999         return -E1000_ERR_EEPROM;
       
  4000     }
       
  4001 }
       
  4002 
       
  4003 /******************************************************************************
       
  4004  * Calculates the EEPROM checksum and writes it to the EEPROM
       
  4005  *
       
  4006  * hw - Struct containing variables accessed by shared code
       
  4007  *
       
  4008  * Sums the first 63 16 bit words of the EEPROM. Subtracts the sum from 0xBABA.
       
  4009  * Writes the difference to word offset 63 of the EEPROM.
       
  4010  *****************************************************************************/
       
  4011 int32_t
       
  4012 e1000_update_eeprom_checksum(struct e1000_hw *hw)
       
  4013 {
       
  4014     uint16_t checksum = 0;
       
  4015     uint16_t i, eeprom_data;
       
  4016 
       
  4017     DEBUGFUNC("e1000_update_eeprom_checksum");
       
  4018 
       
  4019     for(i = 0; i < EEPROM_CHECKSUM_REG; i++) {
       
  4020         if(e1000_read_eeprom(hw, i, 1, &eeprom_data) < 0) {
       
  4021             DEBUGOUT("EEPROM Read Error\n");
       
  4022             return -E1000_ERR_EEPROM;
       
  4023         }
       
  4024         checksum += eeprom_data;
       
  4025     }
       
  4026     checksum = (uint16_t) EEPROM_SUM - checksum;
       
  4027     if(e1000_write_eeprom(hw, EEPROM_CHECKSUM_REG, 1, &checksum) < 0) {
       
  4028         DEBUGOUT("EEPROM Write Error\n");
       
  4029         return -E1000_ERR_EEPROM;
       
  4030     } else if (hw->eeprom.type == e1000_eeprom_flash) {
       
  4031         e1000_commit_shadow_ram(hw);
       
  4032     }
       
  4033     return E1000_SUCCESS;
       
  4034 }
       
  4035 
       
  4036 /******************************************************************************
       
  4037  * Parent function for writing words to the different EEPROM types.
       
  4038  *
       
  4039  * hw - Struct containing variables accessed by shared code
       
  4040  * offset - offset within the EEPROM to be written to
       
  4041  * words - number of words to write
       
  4042  * data - 16 bit word to be written to the EEPROM
       
  4043  *
       
  4044  * If e1000_update_eeprom_checksum is not called after this function, the
       
  4045  * EEPROM will most likely contain an invalid checksum.
       
  4046  *****************************************************************************/
       
  4047 int32_t
       
  4048 e1000_write_eeprom(struct e1000_hw *hw,
       
  4049                    uint16_t offset,
       
  4050                    uint16_t words,
       
  4051                    uint16_t *data)
       
  4052 {
       
  4053     struct e1000_eeprom_info *eeprom = &hw->eeprom;
       
  4054     int32_t status = 0;
       
  4055 
       
  4056     DEBUGFUNC("e1000_write_eeprom");
       
  4057 
       
  4058     /* A check for invalid values:  offset too large, too many words, and not
       
  4059      * enough words.
       
  4060      */
       
  4061     if((offset >= eeprom->word_size) || (words > eeprom->word_size - offset) ||
       
  4062        (words == 0)) {
       
  4063         DEBUGOUT("\"words\" parameter out of bounds\n");
       
  4064         return -E1000_ERR_EEPROM;
       
  4065     }
       
  4066 
       
  4067     /* 82573 reads only through eerd */
       
  4068     if(eeprom->use_eewr == TRUE)
       
  4069         return e1000_write_eeprom_eewr(hw, offset, words, data);
       
  4070 
       
  4071     /* Prepare the EEPROM for writing  */
       
  4072     if (e1000_acquire_eeprom(hw) != E1000_SUCCESS)
       
  4073         return -E1000_ERR_EEPROM;
       
  4074 
       
  4075     if(eeprom->type == e1000_eeprom_microwire) {
       
  4076         status = e1000_write_eeprom_microwire(hw, offset, words, data);
       
  4077     } else {
       
  4078         status = e1000_write_eeprom_spi(hw, offset, words, data);
       
  4079         msec_delay(10);
       
  4080     }
       
  4081 
       
  4082     /* Done with writing */
       
  4083     e1000_release_eeprom(hw);
       
  4084 
       
  4085     return status;
       
  4086 }
       
  4087 
       
  4088 /******************************************************************************
       
  4089  * Writes a 16 bit word to a given offset in an SPI EEPROM.
       
  4090  *
       
  4091  * hw - Struct containing variables accessed by shared code
       
  4092  * offset - offset within the EEPROM to be written to
       
  4093  * words - number of words to write
       
  4094  * data - pointer to array of 8 bit words to be written to the EEPROM
       
  4095  *
       
  4096  *****************************************************************************/
       
  4097 int32_t
       
  4098 e1000_write_eeprom_spi(struct e1000_hw *hw,
       
  4099                        uint16_t offset,
       
  4100                        uint16_t words,
       
  4101                        uint16_t *data)
       
  4102 {
       
  4103     struct e1000_eeprom_info *eeprom = &hw->eeprom;
       
  4104     uint16_t widx = 0;
       
  4105 
       
  4106     DEBUGFUNC("e1000_write_eeprom_spi");
       
  4107 
       
  4108     while (widx < words) {
       
  4109         uint8_t write_opcode = EEPROM_WRITE_OPCODE_SPI;
       
  4110 
       
  4111         if(e1000_spi_eeprom_ready(hw)) return -E1000_ERR_EEPROM;
       
  4112 
       
  4113         e1000_standby_eeprom(hw);
       
  4114 
       
  4115         /*  Send the WRITE ENABLE command (8 bit opcode )  */
       
  4116         e1000_shift_out_ee_bits(hw, EEPROM_WREN_OPCODE_SPI,
       
  4117                                     eeprom->opcode_bits);
       
  4118 
       
  4119         e1000_standby_eeprom(hw);
       
  4120 
       
  4121         /* Some SPI eeproms use the 8th address bit embedded in the opcode */
       
  4122         if((eeprom->address_bits == 8) && (offset >= 128))
       
  4123             write_opcode |= EEPROM_A8_OPCODE_SPI;
       
  4124 
       
  4125         /* Send the Write command (8-bit opcode + addr) */
       
  4126         e1000_shift_out_ee_bits(hw, write_opcode, eeprom->opcode_bits);
       
  4127 
       
  4128         e1000_shift_out_ee_bits(hw, (uint16_t)((offset + widx)*2),
       
  4129                                 eeprom->address_bits);
       
  4130 
       
  4131         /* Send the data */
       
  4132 
       
  4133         /* Loop to allow for up to whole page write (32 bytes) of eeprom */
       
  4134         while (widx < words) {
       
  4135             uint16_t word_out = data[widx];
       
  4136             word_out = (word_out >> 8) | (word_out << 8);
       
  4137             e1000_shift_out_ee_bits(hw, word_out, 16);
       
  4138             widx++;
       
  4139 
       
  4140             /* Some larger eeprom sizes are capable of a 32-byte PAGE WRITE
       
  4141              * operation, while the smaller eeproms are capable of an 8-byte
       
  4142              * PAGE WRITE operation.  Break the inner loop to pass new address
       
  4143              */
       
  4144             if((((offset + widx)*2) % eeprom->page_size) == 0) {
       
  4145                 e1000_standby_eeprom(hw);
       
  4146                 break;
       
  4147             }
       
  4148         }
       
  4149     }
       
  4150 
       
  4151     return E1000_SUCCESS;
       
  4152 }
       
  4153 
       
  4154 /******************************************************************************
       
  4155  * Writes a 16 bit word to a given offset in a Microwire EEPROM.
       
  4156  *
       
  4157  * hw - Struct containing variables accessed by shared code
       
  4158  * offset - offset within the EEPROM to be written to
       
  4159  * words - number of words to write
       
  4160  * data - pointer to array of 16 bit words to be written to the EEPROM
       
  4161  *
       
  4162  *****************************************************************************/
       
  4163 int32_t
       
  4164 e1000_write_eeprom_microwire(struct e1000_hw *hw,
       
  4165                              uint16_t offset,
       
  4166                              uint16_t words,
       
  4167                              uint16_t *data)
       
  4168 {
       
  4169     struct e1000_eeprom_info *eeprom = &hw->eeprom;
       
  4170     uint32_t eecd;
       
  4171     uint16_t words_written = 0;
       
  4172     uint16_t i = 0;
       
  4173 
       
  4174     DEBUGFUNC("e1000_write_eeprom_microwire");
       
  4175 
       
  4176     /* Send the write enable command to the EEPROM (3-bit opcode plus
       
  4177      * 6/8-bit dummy address beginning with 11).  It's less work to include
       
  4178      * the 11 of the dummy address as part of the opcode than it is to shift
       
  4179      * it over the correct number of bits for the address.  This puts the
       
  4180      * EEPROM into write/erase mode.
       
  4181      */
       
  4182     e1000_shift_out_ee_bits(hw, EEPROM_EWEN_OPCODE_MICROWIRE,
       
  4183                             (uint16_t)(eeprom->opcode_bits + 2));
       
  4184 
       
  4185     e1000_shift_out_ee_bits(hw, 0, (uint16_t)(eeprom->address_bits - 2));
       
  4186 
       
  4187     /* Prepare the EEPROM */
       
  4188     e1000_standby_eeprom(hw);
       
  4189 
       
  4190     while (words_written < words) {
       
  4191         /* Send the Write command (3-bit opcode + addr) */
       
  4192         e1000_shift_out_ee_bits(hw, EEPROM_WRITE_OPCODE_MICROWIRE,
       
  4193                                 eeprom->opcode_bits);
       
  4194 
       
  4195         e1000_shift_out_ee_bits(hw, (uint16_t)(offset + words_written),
       
  4196                                 eeprom->address_bits);
       
  4197 
       
  4198         /* Send the data */
       
  4199         e1000_shift_out_ee_bits(hw, data[words_written], 16);
       
  4200 
       
  4201         /* Toggle the CS line.  This in effect tells the EEPROM to execute
       
  4202          * the previous command.
       
  4203          */
       
  4204         e1000_standby_eeprom(hw);
       
  4205 
       
  4206         /* Read DO repeatedly until it is high (equal to '1').  The EEPROM will
       
  4207          * signal that the command has been completed by raising the DO signal.
       
  4208          * If DO does not go high in 10 milliseconds, then error out.
       
  4209          */
       
  4210         for(i = 0; i < 200; i++) {
       
  4211             eecd = E1000_READ_REG(hw, EECD);
       
  4212             if(eecd & E1000_EECD_DO) break;
       
  4213             udelay(50);
       
  4214         }
       
  4215         if(i == 200) {
       
  4216             DEBUGOUT("EEPROM Write did not complete\n");
       
  4217             return -E1000_ERR_EEPROM;
       
  4218         }
       
  4219 
       
  4220         /* Recover from write */
       
  4221         e1000_standby_eeprom(hw);
       
  4222 
       
  4223         words_written++;
       
  4224     }
       
  4225 
       
  4226     /* Send the write disable command to the EEPROM (3-bit opcode plus
       
  4227      * 6/8-bit dummy address beginning with 10).  It's less work to include
       
  4228      * the 10 of the dummy address as part of the opcode than it is to shift
       
  4229      * it over the correct number of bits for the address.  This takes the
       
  4230      * EEPROM out of write/erase mode.
       
  4231      */
       
  4232     e1000_shift_out_ee_bits(hw, EEPROM_EWDS_OPCODE_MICROWIRE,
       
  4233                             (uint16_t)(eeprom->opcode_bits + 2));
       
  4234 
       
  4235     e1000_shift_out_ee_bits(hw, 0, (uint16_t)(eeprom->address_bits - 2));
       
  4236 
       
  4237     return E1000_SUCCESS;
       
  4238 }
       
  4239 
       
  4240 /******************************************************************************
       
  4241  * Flushes the cached eeprom to NVM. This is done by saving the modified values
       
  4242  * in the eeprom cache and the non modified values in the currently active bank
       
  4243  * to the new bank.
       
  4244  *
       
  4245  * hw - Struct containing variables accessed by shared code
       
  4246  * offset - offset of  word in the EEPROM to read
       
  4247  * data - word read from the EEPROM
       
  4248  * words - number of words to read
       
  4249  *****************************************************************************/
       
  4250 int32_t
       
  4251 e1000_commit_shadow_ram(struct e1000_hw *hw)
       
  4252 {
       
  4253     uint32_t attempts = 100000;
       
  4254     uint32_t eecd = 0;
       
  4255     uint32_t flop = 0;
       
  4256     uint32_t i = 0;
       
  4257     int32_t error = E1000_SUCCESS;
       
  4258 
       
  4259     /* The flop register will be used to determine if flash type is STM */
       
  4260     flop = E1000_READ_REG(hw, FLOP);
       
  4261 
       
  4262     if (hw->mac_type == e1000_82573) {
       
  4263         for (i=0; i < attempts; i++) {
       
  4264             eecd = E1000_READ_REG(hw, EECD);
       
  4265             if ((eecd & E1000_EECD_FLUPD) == 0) {
       
  4266                 break;
       
  4267             }
       
  4268             udelay(5);
       
  4269         }
       
  4270 
       
  4271         if (i == attempts) {
       
  4272             return -E1000_ERR_EEPROM;
       
  4273         }
       
  4274 
       
  4275 	/* If STM opcode located in bits 15:8 of flop, reset firmware */
       
  4276         if ((flop & 0xFF00) == E1000_STM_OPCODE) {
       
  4277             E1000_WRITE_REG(hw, HICR, E1000_HICR_FW_RESET);
       
  4278         }
       
  4279 
       
  4280         /* Perform the flash update */
       
  4281         E1000_WRITE_REG(hw, EECD, eecd | E1000_EECD_FLUPD);
       
  4282 
       
  4283 	for (i=0; i < attempts; i++) {
       
  4284             eecd = E1000_READ_REG(hw, EECD);
       
  4285             if ((eecd & E1000_EECD_FLUPD) == 0) {
       
  4286                 break;
       
  4287             }
       
  4288             udelay(5);
       
  4289         }
       
  4290 
       
  4291         if (i == attempts) {
       
  4292             return -E1000_ERR_EEPROM;
       
  4293         }
       
  4294     }
       
  4295 
       
  4296     return error;
       
  4297 }
       
  4298 
       
  4299 /******************************************************************************
       
  4300  * Reads the adapter's part number from the EEPROM
       
  4301  *
       
  4302  * hw - Struct containing variables accessed by shared code
       
  4303  * part_num - Adapter's part number
       
  4304  *****************************************************************************/
       
  4305 int32_t
       
  4306 e1000_read_part_num(struct e1000_hw *hw,
       
  4307                     uint32_t *part_num)
       
  4308 {
       
  4309     uint16_t offset = EEPROM_PBA_BYTE_1;
       
  4310     uint16_t eeprom_data;
       
  4311 
       
  4312     DEBUGFUNC("e1000_read_part_num");
       
  4313 
       
  4314     /* Get word 0 from EEPROM */
       
  4315     if(e1000_read_eeprom(hw, offset, 1, &eeprom_data) < 0) {
       
  4316         DEBUGOUT("EEPROM Read Error\n");
       
  4317         return -E1000_ERR_EEPROM;
       
  4318     }
       
  4319     /* Save word 0 in upper half of part_num */
       
  4320     *part_num = (uint32_t) (eeprom_data << 16);
       
  4321 
       
  4322     /* Get word 1 from EEPROM */
       
  4323     if(e1000_read_eeprom(hw, ++offset, 1, &eeprom_data) < 0) {
       
  4324         DEBUGOUT("EEPROM Read Error\n");
       
  4325         return -E1000_ERR_EEPROM;
       
  4326     }
       
  4327     /* Save word 1 in lower half of part_num */
       
  4328     *part_num |= eeprom_data;
       
  4329 
       
  4330     return E1000_SUCCESS;
       
  4331 }
       
  4332 
       
  4333 /******************************************************************************
       
  4334  * Reads the adapter's MAC address from the EEPROM and inverts the LSB for the
       
  4335  * second function of dual function devices
       
  4336  *
       
  4337  * hw - Struct containing variables accessed by shared code
       
  4338  *****************************************************************************/
       
  4339 int32_t
       
  4340 e1000_read_mac_addr(struct e1000_hw * hw)
       
  4341 {
       
  4342     uint16_t offset;
       
  4343     uint16_t eeprom_data, i;
       
  4344 
       
  4345     DEBUGFUNC("e1000_read_mac_addr");
       
  4346 
       
  4347     for(i = 0; i < NODE_ADDRESS_SIZE; i += 2) {
       
  4348         offset = i >> 1;
       
  4349         if(e1000_read_eeprom(hw, offset, 1, &eeprom_data) < 0) {
       
  4350             DEBUGOUT("EEPROM Read Error\n");
       
  4351             return -E1000_ERR_EEPROM;
       
  4352         }
       
  4353         hw->perm_mac_addr[i] = (uint8_t) (eeprom_data & 0x00FF);
       
  4354         hw->perm_mac_addr[i+1] = (uint8_t) (eeprom_data >> 8);
       
  4355     }
       
  4356     if(((hw->mac_type == e1000_82546) || (hw->mac_type == e1000_82546_rev_3)) &&
       
  4357        (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1))
       
  4358             hw->perm_mac_addr[5] ^= 0x01;
       
  4359 
       
  4360     for(i = 0; i < NODE_ADDRESS_SIZE; i++)
       
  4361         hw->mac_addr[i] = hw->perm_mac_addr[i];
       
  4362     return E1000_SUCCESS;
       
  4363 }
       
  4364 
       
  4365 /******************************************************************************
       
  4366  * Initializes receive address filters.
       
  4367  *
       
  4368  * hw - Struct containing variables accessed by shared code
       
  4369  *
       
  4370  * Places the MAC address in receive address register 0 and clears the rest
       
  4371  * of the receive addresss registers. Clears the multicast table. Assumes
       
  4372  * the receiver is in reset when the routine is called.
       
  4373  *****************************************************************************/
       
  4374 void
       
  4375 e1000_init_rx_addrs(struct e1000_hw *hw)
       
  4376 {
       
  4377     uint32_t i;
       
  4378     uint32_t rar_num;
       
  4379 
       
  4380     DEBUGFUNC("e1000_init_rx_addrs");
       
  4381 
       
  4382     /* Setup the receive address. */
       
  4383     DEBUGOUT("Programming MAC Address into RAR[0]\n");
       
  4384 
       
  4385     e1000_rar_set(hw, hw->mac_addr, 0);
       
  4386 
       
  4387     rar_num = E1000_RAR_ENTRIES;
       
  4388     /* Zero out the other 15 receive addresses. */
       
  4389     DEBUGOUT("Clearing RAR[1-15]\n");
       
  4390     for(i = 1; i < rar_num; i++) {
       
  4391         E1000_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
       
  4392         E1000_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
       
  4393     }
       
  4394 }
       
  4395 
       
  4396 /******************************************************************************
       
  4397  * Updates the MAC's list of multicast addresses.
       
  4398  *
       
  4399  * hw - Struct containing variables accessed by shared code
       
  4400  * mc_addr_list - the list of new multicast addresses
       
  4401  * mc_addr_count - number of addresses
       
  4402  * pad - number of bytes between addresses in the list
       
  4403  * rar_used_count - offset where to start adding mc addresses into the RAR's
       
  4404  *
       
  4405  * The given list replaces any existing list. Clears the last 15 receive
       
  4406  * address registers and the multicast table. Uses receive address registers
       
  4407  * for the first 15 multicast addresses, and hashes the rest into the
       
  4408  * multicast table.
       
  4409  *****************************************************************************/
       
  4410 void
       
  4411 e1000_mc_addr_list_update(struct e1000_hw *hw,
       
  4412                           uint8_t *mc_addr_list,
       
  4413                           uint32_t mc_addr_count,
       
  4414                           uint32_t pad,
       
  4415                           uint32_t rar_used_count)
       
  4416 {
       
  4417     uint32_t hash_value;
       
  4418     uint32_t i;
       
  4419     uint32_t num_rar_entry;
       
  4420     uint32_t num_mta_entry;
       
  4421     
       
  4422     DEBUGFUNC("e1000_mc_addr_list_update");
       
  4423 
       
  4424     /* Set the new number of MC addresses that we are being requested to use. */
       
  4425     hw->num_mc_addrs = mc_addr_count;
       
  4426 
       
  4427     /* Clear RAR[1-15] */
       
  4428     DEBUGOUT(" Clearing RAR[1-15]\n");
       
  4429     num_rar_entry = E1000_RAR_ENTRIES;
       
  4430     for(i = rar_used_count; i < num_rar_entry; i++) {
       
  4431         E1000_WRITE_REG_ARRAY(hw, RA, (i << 1), 0);
       
  4432         E1000_WRITE_REG_ARRAY(hw, RA, ((i << 1) + 1), 0);
       
  4433     }
       
  4434 
       
  4435     /* Clear the MTA */
       
  4436     DEBUGOUT(" Clearing MTA\n");
       
  4437     num_mta_entry = E1000_NUM_MTA_REGISTERS;
       
  4438     for(i = 0; i < num_mta_entry; i++) {
       
  4439         E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
       
  4440     }
       
  4441 
       
  4442     /* Add the new addresses */
       
  4443     for(i = 0; i < mc_addr_count; i++) {
       
  4444         DEBUGOUT(" Adding the multicast addresses:\n");
       
  4445         DEBUGOUT7(" MC Addr #%d =%.2X %.2X %.2X %.2X %.2X %.2X\n", i,
       
  4446                   mc_addr_list[i * (ETH_LENGTH_OF_ADDRESS + pad)],
       
  4447                   mc_addr_list[i * (ETH_LENGTH_OF_ADDRESS + pad) + 1],
       
  4448                   mc_addr_list[i * (ETH_LENGTH_OF_ADDRESS + pad) + 2],
       
  4449                   mc_addr_list[i * (ETH_LENGTH_OF_ADDRESS + pad) + 3],
       
  4450                   mc_addr_list[i * (ETH_LENGTH_OF_ADDRESS + pad) + 4],
       
  4451                   mc_addr_list[i * (ETH_LENGTH_OF_ADDRESS + pad) + 5]);
       
  4452 
       
  4453         hash_value = e1000_hash_mc_addr(hw,
       
  4454                                         mc_addr_list +
       
  4455                                         (i * (ETH_LENGTH_OF_ADDRESS + pad)));
       
  4456 
       
  4457         DEBUGOUT1(" Hash value = 0x%03X\n", hash_value);
       
  4458 
       
  4459         /* Place this multicast address in the RAR if there is room, *
       
  4460          * else put it in the MTA
       
  4461          */
       
  4462         if (rar_used_count < num_rar_entry) {
       
  4463             e1000_rar_set(hw,
       
  4464                           mc_addr_list + (i * (ETH_LENGTH_OF_ADDRESS + pad)),
       
  4465                           rar_used_count);
       
  4466             rar_used_count++;
       
  4467         } else {
       
  4468             e1000_mta_set(hw, hash_value);
       
  4469         }
       
  4470     }
       
  4471     DEBUGOUT("MC Update Complete\n");
       
  4472 }
       
  4473 
       
  4474 /******************************************************************************
       
  4475  * Hashes an address to determine its location in the multicast table
       
  4476  *
       
  4477  * hw - Struct containing variables accessed by shared code
       
  4478  * mc_addr - the multicast address to hash
       
  4479  *****************************************************************************/
       
  4480 uint32_t
       
  4481 e1000_hash_mc_addr(struct e1000_hw *hw,
       
  4482                    uint8_t *mc_addr)
       
  4483 {
       
  4484     uint32_t hash_value = 0;
       
  4485 
       
  4486     /* The portion of the address that is used for the hash table is
       
  4487      * determined by the mc_filter_type setting.
       
  4488      */
       
  4489     switch (hw->mc_filter_type) {
       
  4490     /* [0] [1] [2] [3] [4] [5]
       
  4491      * 01  AA  00  12  34  56
       
  4492      * LSB                 MSB
       
  4493      */
       
  4494     case 0:
       
  4495         /* [47:36] i.e. 0x563 for above example address */
       
  4496         hash_value = ((mc_addr[4] >> 4) | (((uint16_t) mc_addr[5]) << 4));
       
  4497         break;
       
  4498     case 1:
       
  4499         /* [46:35] i.e. 0xAC6 for above example address */
       
  4500         hash_value = ((mc_addr[4] >> 3) | (((uint16_t) mc_addr[5]) << 5));
       
  4501         break;
       
  4502     case 2:
       
  4503         /* [45:34] i.e. 0x5D8 for above example address */
       
  4504         hash_value = ((mc_addr[4] >> 2) | (((uint16_t) mc_addr[5]) << 6));
       
  4505         break;
       
  4506     case 3:
       
  4507         /* [43:32] i.e. 0x634 for above example address */
       
  4508         hash_value = ((mc_addr[4]) | (((uint16_t) mc_addr[5]) << 8));
       
  4509         break;
       
  4510     }
       
  4511 
       
  4512     hash_value &= 0xFFF;
       
  4513 
       
  4514     return hash_value;
       
  4515 }
       
  4516 
       
  4517 /******************************************************************************
       
  4518  * Sets the bit in the multicast table corresponding to the hash value.
       
  4519  *
       
  4520  * hw - Struct containing variables accessed by shared code
       
  4521  * hash_value - Multicast address hash value
       
  4522  *****************************************************************************/
       
  4523 void
       
  4524 e1000_mta_set(struct e1000_hw *hw,
       
  4525               uint32_t hash_value)
       
  4526 {
       
  4527     uint32_t hash_bit, hash_reg;
       
  4528     uint32_t mta;
       
  4529     uint32_t temp;
       
  4530 
       
  4531     /* The MTA is a register array of 128 32-bit registers.
       
  4532      * It is treated like an array of 4096 bits.  We want to set
       
  4533      * bit BitArray[hash_value]. So we figure out what register
       
  4534      * the bit is in, read it, OR in the new bit, then write
       
  4535      * back the new value.  The register is determined by the
       
  4536      * upper 7 bits of the hash value and the bit within that
       
  4537      * register are determined by the lower 5 bits of the value.
       
  4538      */
       
  4539     hash_reg = (hash_value >> 5) & 0x7F;
       
  4540     hash_bit = hash_value & 0x1F;
       
  4541 
       
  4542     mta = E1000_READ_REG_ARRAY(hw, MTA, hash_reg);
       
  4543 
       
  4544     mta |= (1 << hash_bit);
       
  4545 
       
  4546     /* If we are on an 82544 and we are trying to write an odd offset
       
  4547      * in the MTA, save off the previous entry before writing and
       
  4548      * restore the old value after writing.
       
  4549      */
       
  4550     if((hw->mac_type == e1000_82544) && ((hash_reg & 0x1) == 1)) {
       
  4551         temp = E1000_READ_REG_ARRAY(hw, MTA, (hash_reg - 1));
       
  4552         E1000_WRITE_REG_ARRAY(hw, MTA, hash_reg, mta);
       
  4553         E1000_WRITE_REG_ARRAY(hw, MTA, (hash_reg - 1), temp);
       
  4554     } else {
       
  4555         E1000_WRITE_REG_ARRAY(hw, MTA, hash_reg, mta);
       
  4556     }
       
  4557 }
       
  4558 
       
  4559 /******************************************************************************
       
  4560  * Puts an ethernet address into a receive address register.
       
  4561  *
       
  4562  * hw - Struct containing variables accessed by shared code
       
  4563  * addr - Address to put into receive address register
       
  4564  * index - Receive address register to write
       
  4565  *****************************************************************************/
       
  4566 void
       
  4567 e1000_rar_set(struct e1000_hw *hw,
       
  4568               uint8_t *addr,
       
  4569               uint32_t index)
       
  4570 {
       
  4571     uint32_t rar_low, rar_high;
       
  4572 
       
  4573     /* HW expects these in little endian so we reverse the byte order
       
  4574      * from network order (big endian) to little endian
       
  4575      */
       
  4576     rar_low = ((uint32_t) addr[0] |
       
  4577                ((uint32_t) addr[1] << 8) |
       
  4578                ((uint32_t) addr[2] << 16) | ((uint32_t) addr[3] << 24));
       
  4579 
       
  4580     rar_high = ((uint32_t) addr[4] | ((uint32_t) addr[5] << 8) | E1000_RAH_AV);
       
  4581 
       
  4582     E1000_WRITE_REG_ARRAY(hw, RA, (index << 1), rar_low);
       
  4583     E1000_WRITE_REG_ARRAY(hw, RA, ((index << 1) + 1), rar_high);
       
  4584 }
       
  4585 
       
  4586 /******************************************************************************
       
  4587  * Writes a value to the specified offset in the VLAN filter table.
       
  4588  *
       
  4589  * hw - Struct containing variables accessed by shared code
       
  4590  * offset - Offset in VLAN filer table to write
       
  4591  * value - Value to write into VLAN filter table
       
  4592  *****************************************************************************/
       
  4593 void
       
  4594 e1000_write_vfta(struct e1000_hw *hw,
       
  4595                  uint32_t offset,
       
  4596                  uint32_t value)
       
  4597 {
       
  4598     uint32_t temp;
       
  4599 
       
  4600     if((hw->mac_type == e1000_82544) && ((offset & 0x1) == 1)) {
       
  4601         temp = E1000_READ_REG_ARRAY(hw, VFTA, (offset - 1));
       
  4602         E1000_WRITE_REG_ARRAY(hw, VFTA, offset, value);
       
  4603         E1000_WRITE_REG_ARRAY(hw, VFTA, (offset - 1), temp);
       
  4604     } else {
       
  4605         E1000_WRITE_REG_ARRAY(hw, VFTA, offset, value);
       
  4606     }
       
  4607 }
       
  4608 
       
  4609 /******************************************************************************
       
  4610  * Clears the VLAN filer table
       
  4611  *
       
  4612  * hw - Struct containing variables accessed by shared code
       
  4613  *****************************************************************************/
       
  4614 void
       
  4615 e1000_clear_vfta(struct e1000_hw *hw)
       
  4616 {
       
  4617     uint32_t offset;
       
  4618     uint32_t vfta_value = 0;
       
  4619     uint32_t vfta_offset = 0;
       
  4620     uint32_t vfta_bit_in_reg = 0;
       
  4621 
       
  4622     if (hw->mac_type == e1000_82573) {
       
  4623         if (hw->mng_cookie.vlan_id != 0) {
       
  4624             /* The VFTA is a 4096b bit-field, each identifying a single VLAN
       
  4625              * ID.  The following operations determine which 32b entry
       
  4626              * (i.e. offset) into the array we want to set the VLAN ID
       
  4627              * (i.e. bit) of the manageability unit. */
       
  4628             vfta_offset = (hw->mng_cookie.vlan_id >>
       
  4629                            E1000_VFTA_ENTRY_SHIFT) &
       
  4630                           E1000_VFTA_ENTRY_MASK;
       
  4631             vfta_bit_in_reg = 1 << (hw->mng_cookie.vlan_id &
       
  4632                                     E1000_VFTA_ENTRY_BIT_SHIFT_MASK);
       
  4633         }
       
  4634     }
       
  4635     for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
       
  4636         /* If the offset we want to clear is the same offset of the
       
  4637          * manageability VLAN ID, then clear all bits except that of the
       
  4638          * manageability unit */
       
  4639         vfta_value = (offset == vfta_offset) ? vfta_bit_in_reg : 0;
       
  4640         E1000_WRITE_REG_ARRAY(hw, VFTA, offset, vfta_value);
       
  4641     }
       
  4642 }
       
  4643 
       
  4644 int32_t
       
  4645 e1000_id_led_init(struct e1000_hw * hw)
       
  4646 {
       
  4647     uint32_t ledctl;
       
  4648     const uint32_t ledctl_mask = 0x000000FF;
       
  4649     const uint32_t ledctl_on = E1000_LEDCTL_MODE_LED_ON;
       
  4650     const uint32_t ledctl_off = E1000_LEDCTL_MODE_LED_OFF;
       
  4651     uint16_t eeprom_data, i, temp;
       
  4652     const uint16_t led_mask = 0x0F;
       
  4653 
       
  4654     DEBUGFUNC("e1000_id_led_init");
       
  4655 
       
  4656     if(hw->mac_type < e1000_82540) {
       
  4657         /* Nothing to do */
       
  4658         return E1000_SUCCESS;
       
  4659     }
       
  4660 
       
  4661     ledctl = E1000_READ_REG(hw, LEDCTL);
       
  4662     hw->ledctl_default = ledctl;
       
  4663     hw->ledctl_mode1 = hw->ledctl_default;
       
  4664     hw->ledctl_mode2 = hw->ledctl_default;
       
  4665 
       
  4666     if(e1000_read_eeprom(hw, EEPROM_ID_LED_SETTINGS, 1, &eeprom_data) < 0) {
       
  4667         DEBUGOUT("EEPROM Read Error\n");
       
  4668         return -E1000_ERR_EEPROM;
       
  4669     }
       
  4670     if((eeprom_data== ID_LED_RESERVED_0000) ||
       
  4671        (eeprom_data == ID_LED_RESERVED_FFFF)) eeprom_data = ID_LED_DEFAULT;
       
  4672     for(i = 0; i < 4; i++) {
       
  4673         temp = (eeprom_data >> (i << 2)) & led_mask;
       
  4674         switch(temp) {
       
  4675         case ID_LED_ON1_DEF2:
       
  4676         case ID_LED_ON1_ON2:
       
  4677         case ID_LED_ON1_OFF2:
       
  4678             hw->ledctl_mode1 &= ~(ledctl_mask << (i << 3));
       
  4679             hw->ledctl_mode1 |= ledctl_on << (i << 3);
       
  4680             break;
       
  4681         case ID_LED_OFF1_DEF2:
       
  4682         case ID_LED_OFF1_ON2:
       
  4683         case ID_LED_OFF1_OFF2:
       
  4684             hw->ledctl_mode1 &= ~(ledctl_mask << (i << 3));
       
  4685             hw->ledctl_mode1 |= ledctl_off << (i << 3);
       
  4686             break;
       
  4687         default:
       
  4688             /* Do nothing */
       
  4689             break;
       
  4690         }
       
  4691         switch(temp) {
       
  4692         case ID_LED_DEF1_ON2:
       
  4693         case ID_LED_ON1_ON2:
       
  4694         case ID_LED_OFF1_ON2:
       
  4695             hw->ledctl_mode2 &= ~(ledctl_mask << (i << 3));
       
  4696             hw->ledctl_mode2 |= ledctl_on << (i << 3);
       
  4697             break;
       
  4698         case ID_LED_DEF1_OFF2:
       
  4699         case ID_LED_ON1_OFF2:
       
  4700         case ID_LED_OFF1_OFF2:
       
  4701             hw->ledctl_mode2 &= ~(ledctl_mask << (i << 3));
       
  4702             hw->ledctl_mode2 |= ledctl_off << (i << 3);
       
  4703             break;
       
  4704         default:
       
  4705             /* Do nothing */
       
  4706             break;
       
  4707         }
       
  4708     }
       
  4709     return E1000_SUCCESS;
       
  4710 }
       
  4711 
       
  4712 /******************************************************************************
       
  4713  * Prepares SW controlable LED for use and saves the current state of the LED.
       
  4714  *
       
  4715  * hw - Struct containing variables accessed by shared code
       
  4716  *****************************************************************************/
       
  4717 int32_t
       
  4718 e1000_setup_led(struct e1000_hw *hw)
       
  4719 {
       
  4720     uint32_t ledctl;
       
  4721     int32_t ret_val = E1000_SUCCESS;
       
  4722 
       
  4723     DEBUGFUNC("e1000_setup_led");
       
  4724 
       
  4725     switch(hw->mac_type) {
       
  4726     case e1000_82542_rev2_0:
       
  4727     case e1000_82542_rev2_1:
       
  4728     case e1000_82543:
       
  4729     case e1000_82544:
       
  4730         /* No setup necessary */
       
  4731         break;
       
  4732     case e1000_82541:
       
  4733     case e1000_82547:
       
  4734     case e1000_82541_rev_2:
       
  4735     case e1000_82547_rev_2:
       
  4736         /* Turn off PHY Smart Power Down (if enabled) */
       
  4737         ret_val = e1000_read_phy_reg(hw, IGP01E1000_GMII_FIFO,
       
  4738                                      &hw->phy_spd_default);
       
  4739         if(ret_val)
       
  4740             return ret_val;
       
  4741         ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
       
  4742                                       (uint16_t)(hw->phy_spd_default &
       
  4743                                       ~IGP01E1000_GMII_SPD));
       
  4744         if(ret_val)
       
  4745             return ret_val;
       
  4746         /* Fall Through */
       
  4747     default:
       
  4748         if(hw->media_type == e1000_media_type_fiber) {
       
  4749             ledctl = E1000_READ_REG(hw, LEDCTL);
       
  4750             /* Save current LEDCTL settings */
       
  4751             hw->ledctl_default = ledctl;
       
  4752             /* Turn off LED0 */
       
  4753             ledctl &= ~(E1000_LEDCTL_LED0_IVRT |
       
  4754                         E1000_LEDCTL_LED0_BLINK |
       
  4755                         E1000_LEDCTL_LED0_MODE_MASK);
       
  4756             ledctl |= (E1000_LEDCTL_MODE_LED_OFF <<
       
  4757                        E1000_LEDCTL_LED0_MODE_SHIFT);
       
  4758             E1000_WRITE_REG(hw, LEDCTL, ledctl);
       
  4759         } else if(hw->media_type == e1000_media_type_copper)
       
  4760             E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_mode1);
       
  4761         break;
       
  4762     }
       
  4763 
       
  4764     return E1000_SUCCESS;
       
  4765 }
       
  4766 
       
  4767 /******************************************************************************
       
  4768  * Restores the saved state of the SW controlable LED.
       
  4769  *
       
  4770  * hw - Struct containing variables accessed by shared code
       
  4771  *****************************************************************************/
       
  4772 int32_t
       
  4773 e1000_cleanup_led(struct e1000_hw *hw)
       
  4774 {
       
  4775     int32_t ret_val = E1000_SUCCESS;
       
  4776 
       
  4777     DEBUGFUNC("e1000_cleanup_led");
       
  4778 
       
  4779     switch(hw->mac_type) {
       
  4780     case e1000_82542_rev2_0:
       
  4781     case e1000_82542_rev2_1:
       
  4782     case e1000_82543:
       
  4783     case e1000_82544:
       
  4784         /* No cleanup necessary */
       
  4785         break;
       
  4786     case e1000_82541:
       
  4787     case e1000_82547:
       
  4788     case e1000_82541_rev_2:
       
  4789     case e1000_82547_rev_2:
       
  4790         /* Turn on PHY Smart Power Down (if previously enabled) */
       
  4791         ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO,
       
  4792                                       hw->phy_spd_default);
       
  4793         if(ret_val)
       
  4794             return ret_val;
       
  4795         /* Fall Through */
       
  4796     default:
       
  4797         /* Restore LEDCTL settings */
       
  4798         E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_default);
       
  4799         break;
       
  4800     }
       
  4801 
       
  4802     return E1000_SUCCESS;
       
  4803 }
       
  4804 
       
  4805 /******************************************************************************
       
  4806  * Turns on the software controllable LED
       
  4807  *
       
  4808  * hw - Struct containing variables accessed by shared code
       
  4809  *****************************************************************************/
       
  4810 int32_t
       
  4811 e1000_led_on(struct e1000_hw *hw)
       
  4812 {
       
  4813     uint32_t ctrl = E1000_READ_REG(hw, CTRL);
       
  4814 
       
  4815     DEBUGFUNC("e1000_led_on");
       
  4816 
       
  4817     switch(hw->mac_type) {
       
  4818     case e1000_82542_rev2_0:
       
  4819     case e1000_82542_rev2_1:
       
  4820     case e1000_82543:
       
  4821         /* Set SW Defineable Pin 0 to turn on the LED */
       
  4822         ctrl |= E1000_CTRL_SWDPIN0;
       
  4823         ctrl |= E1000_CTRL_SWDPIO0;
       
  4824         break;
       
  4825     case e1000_82544:
       
  4826         if(hw->media_type == e1000_media_type_fiber) {
       
  4827             /* Set SW Defineable Pin 0 to turn on the LED */
       
  4828             ctrl |= E1000_CTRL_SWDPIN0;
       
  4829             ctrl |= E1000_CTRL_SWDPIO0;
       
  4830         } else {
       
  4831             /* Clear SW Defineable Pin 0 to turn on the LED */
       
  4832             ctrl &= ~E1000_CTRL_SWDPIN0;
       
  4833             ctrl |= E1000_CTRL_SWDPIO0;
       
  4834         }
       
  4835         break;
       
  4836     default:
       
  4837         if(hw->media_type == e1000_media_type_fiber) {
       
  4838             /* Clear SW Defineable Pin 0 to turn on the LED */
       
  4839             ctrl &= ~E1000_CTRL_SWDPIN0;
       
  4840             ctrl |= E1000_CTRL_SWDPIO0;
       
  4841         } else if(hw->media_type == e1000_media_type_copper) {
       
  4842             E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_mode2);
       
  4843             return E1000_SUCCESS;
       
  4844         }
       
  4845         break;
       
  4846     }
       
  4847 
       
  4848     E1000_WRITE_REG(hw, CTRL, ctrl);
       
  4849 
       
  4850     return E1000_SUCCESS;
       
  4851 }
       
  4852 
       
  4853 /******************************************************************************
       
  4854  * Turns off the software controllable LED
       
  4855  *
       
  4856  * hw - Struct containing variables accessed by shared code
       
  4857  *****************************************************************************/
       
  4858 int32_t
       
  4859 e1000_led_off(struct e1000_hw *hw)
       
  4860 {
       
  4861     uint32_t ctrl = E1000_READ_REG(hw, CTRL);
       
  4862 
       
  4863     DEBUGFUNC("e1000_led_off");
       
  4864 
       
  4865     switch(hw->mac_type) {
       
  4866     case e1000_82542_rev2_0:
       
  4867     case e1000_82542_rev2_1:
       
  4868     case e1000_82543:
       
  4869         /* Clear SW Defineable Pin 0 to turn off the LED */
       
  4870         ctrl &= ~E1000_CTRL_SWDPIN0;
       
  4871         ctrl |= E1000_CTRL_SWDPIO0;
       
  4872         break;
       
  4873     case e1000_82544:
       
  4874         if(hw->media_type == e1000_media_type_fiber) {
       
  4875             /* Clear SW Defineable Pin 0 to turn off the LED */
       
  4876             ctrl &= ~E1000_CTRL_SWDPIN0;
       
  4877             ctrl |= E1000_CTRL_SWDPIO0;
       
  4878         } else {
       
  4879             /* Set SW Defineable Pin 0 to turn off the LED */
       
  4880             ctrl |= E1000_CTRL_SWDPIN0;
       
  4881             ctrl |= E1000_CTRL_SWDPIO0;
       
  4882         }
       
  4883         break;
       
  4884     default:
       
  4885         if(hw->media_type == e1000_media_type_fiber) {
       
  4886             /* Set SW Defineable Pin 0 to turn off the LED */
       
  4887             ctrl |= E1000_CTRL_SWDPIN0;
       
  4888             ctrl |= E1000_CTRL_SWDPIO0;
       
  4889         } else if(hw->media_type == e1000_media_type_copper) {
       
  4890             E1000_WRITE_REG(hw, LEDCTL, hw->ledctl_mode1);
       
  4891             return E1000_SUCCESS;
       
  4892         }
       
  4893         break;
       
  4894     }
       
  4895 
       
  4896     E1000_WRITE_REG(hw, CTRL, ctrl);
       
  4897 
       
  4898     return E1000_SUCCESS;
       
  4899 }
       
  4900 
       
  4901 /******************************************************************************
       
  4902  * Clears all hardware statistics counters.
       
  4903  *
       
  4904  * hw - Struct containing variables accessed by shared code
       
  4905  *****************************************************************************/
       
  4906 void
       
  4907 e1000_clear_hw_cntrs(struct e1000_hw *hw)
       
  4908 {
       
  4909     volatile uint32_t temp;
       
  4910 
       
  4911     temp = E1000_READ_REG(hw, CRCERRS);
       
  4912     temp = E1000_READ_REG(hw, SYMERRS);
       
  4913     temp = E1000_READ_REG(hw, MPC);
       
  4914     temp = E1000_READ_REG(hw, SCC);
       
  4915     temp = E1000_READ_REG(hw, ECOL);
       
  4916     temp = E1000_READ_REG(hw, MCC);
       
  4917     temp = E1000_READ_REG(hw, LATECOL);
       
  4918     temp = E1000_READ_REG(hw, COLC);
       
  4919     temp = E1000_READ_REG(hw, DC);
       
  4920     temp = E1000_READ_REG(hw, SEC);
       
  4921     temp = E1000_READ_REG(hw, RLEC);
       
  4922     temp = E1000_READ_REG(hw, XONRXC);
       
  4923     temp = E1000_READ_REG(hw, XONTXC);
       
  4924     temp = E1000_READ_REG(hw, XOFFRXC);
       
  4925     temp = E1000_READ_REG(hw, XOFFTXC);
       
  4926     temp = E1000_READ_REG(hw, FCRUC);
       
  4927     temp = E1000_READ_REG(hw, PRC64);
       
  4928     temp = E1000_READ_REG(hw, PRC127);
       
  4929     temp = E1000_READ_REG(hw, PRC255);
       
  4930     temp = E1000_READ_REG(hw, PRC511);
       
  4931     temp = E1000_READ_REG(hw, PRC1023);
       
  4932     temp = E1000_READ_REG(hw, PRC1522);
       
  4933     temp = E1000_READ_REG(hw, GPRC);
       
  4934     temp = E1000_READ_REG(hw, BPRC);
       
  4935     temp = E1000_READ_REG(hw, MPRC);
       
  4936     temp = E1000_READ_REG(hw, GPTC);
       
  4937     temp = E1000_READ_REG(hw, GORCL);
       
  4938     temp = E1000_READ_REG(hw, GORCH);
       
  4939     temp = E1000_READ_REG(hw, GOTCL);
       
  4940     temp = E1000_READ_REG(hw, GOTCH);
       
  4941     temp = E1000_READ_REG(hw, RNBC);
       
  4942     temp = E1000_READ_REG(hw, RUC);
       
  4943     temp = E1000_READ_REG(hw, RFC);
       
  4944     temp = E1000_READ_REG(hw, ROC);
       
  4945     temp = E1000_READ_REG(hw, RJC);
       
  4946     temp = E1000_READ_REG(hw, TORL);
       
  4947     temp = E1000_READ_REG(hw, TORH);
       
  4948     temp = E1000_READ_REG(hw, TOTL);
       
  4949     temp = E1000_READ_REG(hw, TOTH);
       
  4950     temp = E1000_READ_REG(hw, TPR);
       
  4951     temp = E1000_READ_REG(hw, TPT);
       
  4952     temp = E1000_READ_REG(hw, PTC64);
       
  4953     temp = E1000_READ_REG(hw, PTC127);
       
  4954     temp = E1000_READ_REG(hw, PTC255);
       
  4955     temp = E1000_READ_REG(hw, PTC511);
       
  4956     temp = E1000_READ_REG(hw, PTC1023);
       
  4957     temp = E1000_READ_REG(hw, PTC1522);
       
  4958     temp = E1000_READ_REG(hw, MPTC);
       
  4959     temp = E1000_READ_REG(hw, BPTC);
       
  4960 
       
  4961     if(hw->mac_type < e1000_82543) return;
       
  4962 
       
  4963     temp = E1000_READ_REG(hw, ALGNERRC);
       
  4964     temp = E1000_READ_REG(hw, RXERRC);
       
  4965     temp = E1000_READ_REG(hw, TNCRS);
       
  4966     temp = E1000_READ_REG(hw, CEXTERR);
       
  4967     temp = E1000_READ_REG(hw, TSCTC);
       
  4968     temp = E1000_READ_REG(hw, TSCTFC);
       
  4969 
       
  4970     if(hw->mac_type <= e1000_82544) return;
       
  4971 
       
  4972     temp = E1000_READ_REG(hw, MGTPRC);
       
  4973     temp = E1000_READ_REG(hw, MGTPDC);
       
  4974     temp = E1000_READ_REG(hw, MGTPTC);
       
  4975 
       
  4976     if(hw->mac_type <= e1000_82547_rev_2) return;
       
  4977 
       
  4978     temp = E1000_READ_REG(hw, IAC);
       
  4979     temp = E1000_READ_REG(hw, ICRXOC);
       
  4980     temp = E1000_READ_REG(hw, ICRXPTC);
       
  4981     temp = E1000_READ_REG(hw, ICRXATC);
       
  4982     temp = E1000_READ_REG(hw, ICTXPTC);
       
  4983     temp = E1000_READ_REG(hw, ICTXATC);
       
  4984     temp = E1000_READ_REG(hw, ICTXQEC);
       
  4985     temp = E1000_READ_REG(hw, ICTXQMTC);
       
  4986     temp = E1000_READ_REG(hw, ICRXDMTC);
       
  4987 
       
  4988 }
       
  4989 
       
  4990 /******************************************************************************
       
  4991  * Resets Adaptive IFS to its default state.
       
  4992  *
       
  4993  * hw - Struct containing variables accessed by shared code
       
  4994  *
       
  4995  * Call this after e1000_init_hw. You may override the IFS defaults by setting
       
  4996  * hw->ifs_params_forced to TRUE. However, you must initialize hw->
       
  4997  * current_ifs_val, ifs_min_val, ifs_max_val, ifs_step_size, and ifs_ratio
       
  4998  * before calling this function.
       
  4999  *****************************************************************************/
       
  5000 void
       
  5001 e1000_reset_adaptive(struct e1000_hw *hw)
       
  5002 {
       
  5003     DEBUGFUNC("e1000_reset_adaptive");
       
  5004 
       
  5005     if(hw->adaptive_ifs) {
       
  5006         if(!hw->ifs_params_forced) {
       
  5007             hw->current_ifs_val = 0;
       
  5008             hw->ifs_min_val = IFS_MIN;
       
  5009             hw->ifs_max_val = IFS_MAX;
       
  5010             hw->ifs_step_size = IFS_STEP;
       
  5011             hw->ifs_ratio = IFS_RATIO;
       
  5012         }
       
  5013         hw->in_ifs_mode = FALSE;
       
  5014         E1000_WRITE_REG(hw, AIT, 0);
       
  5015     } else {
       
  5016         DEBUGOUT("Not in Adaptive IFS mode!\n");
       
  5017     }
       
  5018 }
       
  5019 
       
  5020 /******************************************************************************
       
  5021  * Called during the callback/watchdog routine to update IFS value based on
       
  5022  * the ratio of transmits to collisions.
       
  5023  *
       
  5024  * hw - Struct containing variables accessed by shared code
       
  5025  * tx_packets - Number of transmits since last callback
       
  5026  * total_collisions - Number of collisions since last callback
       
  5027  *****************************************************************************/
       
  5028 void
       
  5029 e1000_update_adaptive(struct e1000_hw *hw)
       
  5030 {
       
  5031     DEBUGFUNC("e1000_update_adaptive");
       
  5032 
       
  5033     if(hw->adaptive_ifs) {
       
  5034         if((hw->collision_delta * hw->ifs_ratio) > hw->tx_packet_delta) {
       
  5035             if(hw->tx_packet_delta > MIN_NUM_XMITS) {
       
  5036                 hw->in_ifs_mode = TRUE;
       
  5037                 if(hw->current_ifs_val < hw->ifs_max_val) {
       
  5038                     if(hw->current_ifs_val == 0)
       
  5039                         hw->current_ifs_val = hw->ifs_min_val;
       
  5040                     else
       
  5041                         hw->current_ifs_val += hw->ifs_step_size;
       
  5042                     E1000_WRITE_REG(hw, AIT, hw->current_ifs_val);
       
  5043                 }
       
  5044             }
       
  5045         } else {
       
  5046             if(hw->in_ifs_mode && (hw->tx_packet_delta <= MIN_NUM_XMITS)) {
       
  5047                 hw->current_ifs_val = 0;
       
  5048                 hw->in_ifs_mode = FALSE;
       
  5049                 E1000_WRITE_REG(hw, AIT, 0);
       
  5050             }
       
  5051         }
       
  5052     } else {
       
  5053         DEBUGOUT("Not in Adaptive IFS mode!\n");
       
  5054     }
       
  5055 }
       
  5056 
       
  5057 /******************************************************************************
       
  5058  * Adjusts the statistic counters when a frame is accepted by TBI_ACCEPT
       
  5059  *
       
  5060  * hw - Struct containing variables accessed by shared code
       
  5061  * frame_len - The length of the frame in question
       
  5062  * mac_addr - The Ethernet destination address of the frame in question
       
  5063  *****************************************************************************/
       
  5064 void
       
  5065 e1000_tbi_adjust_stats(struct e1000_hw *hw,
       
  5066                        struct e1000_hw_stats *stats,
       
  5067                        uint32_t frame_len,
       
  5068                        uint8_t *mac_addr)
       
  5069 {
       
  5070     uint64_t carry_bit;
       
  5071 
       
  5072     /* First adjust the frame length. */
       
  5073     frame_len--;
       
  5074     /* We need to adjust the statistics counters, since the hardware
       
  5075      * counters overcount this packet as a CRC error and undercount
       
  5076      * the packet as a good packet
       
  5077      */
       
  5078     /* This packet should not be counted as a CRC error.    */
       
  5079     stats->crcerrs--;
       
  5080     /* This packet does count as a Good Packet Received.    */
       
  5081     stats->gprc++;
       
  5082 
       
  5083     /* Adjust the Good Octets received counters             */
       
  5084     carry_bit = 0x80000000 & stats->gorcl;
       
  5085     stats->gorcl += frame_len;
       
  5086     /* If the high bit of Gorcl (the low 32 bits of the Good Octets
       
  5087      * Received Count) was one before the addition,
       
  5088      * AND it is zero after, then we lost the carry out,
       
  5089      * need to add one to Gorch (Good Octets Received Count High).
       
  5090      * This could be simplified if all environments supported
       
  5091      * 64-bit integers.
       
  5092      */
       
  5093     if(carry_bit && ((stats->gorcl & 0x80000000) == 0))
       
  5094         stats->gorch++;
       
  5095     /* Is this a broadcast or multicast?  Check broadcast first,
       
  5096      * since the test for a multicast frame will test positive on
       
  5097      * a broadcast frame.
       
  5098      */
       
  5099     if((mac_addr[0] == (uint8_t) 0xff) && (mac_addr[1] == (uint8_t) 0xff))
       
  5100         /* Broadcast packet */
       
  5101         stats->bprc++;
       
  5102     else if(*mac_addr & 0x01)
       
  5103         /* Multicast packet */
       
  5104         stats->mprc++;
       
  5105 
       
  5106     if(frame_len == hw->max_frame_size) {
       
  5107         /* In this case, the hardware has overcounted the number of
       
  5108          * oversize frames.
       
  5109          */
       
  5110         if(stats->roc > 0)
       
  5111             stats->roc--;
       
  5112     }
       
  5113 
       
  5114     /* Adjust the bin counters when the extra byte put the frame in the
       
  5115      * wrong bin. Remember that the frame_len was adjusted above.
       
  5116      */
       
  5117     if(frame_len == 64) {
       
  5118         stats->prc64++;
       
  5119         stats->prc127--;
       
  5120     } else if(frame_len == 127) {
       
  5121         stats->prc127++;
       
  5122         stats->prc255--;
       
  5123     } else if(frame_len == 255) {
       
  5124         stats->prc255++;
       
  5125         stats->prc511--;
       
  5126     } else if(frame_len == 511) {
       
  5127         stats->prc511++;
       
  5128         stats->prc1023--;
       
  5129     } else if(frame_len == 1023) {
       
  5130         stats->prc1023++;
       
  5131         stats->prc1522--;
       
  5132     } else if(frame_len == 1522) {
       
  5133         stats->prc1522++;
       
  5134     }
       
  5135 }
       
  5136 
       
  5137 /******************************************************************************
       
  5138  * Gets the current PCI bus type, speed, and width of the hardware
       
  5139  *
       
  5140  * hw - Struct containing variables accessed by shared code
       
  5141  *****************************************************************************/
       
  5142 void
       
  5143 e1000_get_bus_info(struct e1000_hw *hw)
       
  5144 {
       
  5145     uint32_t status;
       
  5146 
       
  5147     switch (hw->mac_type) {
       
  5148     case e1000_82542_rev2_0:
       
  5149     case e1000_82542_rev2_1:
       
  5150         hw->bus_type = e1000_bus_type_unknown;
       
  5151         hw->bus_speed = e1000_bus_speed_unknown;
       
  5152         hw->bus_width = e1000_bus_width_unknown;
       
  5153         break;
       
  5154     case e1000_82573:
       
  5155         hw->bus_type = e1000_bus_type_pci_express;
       
  5156         hw->bus_speed = e1000_bus_speed_2500;
       
  5157         hw->bus_width = e1000_bus_width_pciex_4;
       
  5158         break;
       
  5159     default:
       
  5160         status = E1000_READ_REG(hw, STATUS);
       
  5161         hw->bus_type = (status & E1000_STATUS_PCIX_MODE) ?
       
  5162                        e1000_bus_type_pcix : e1000_bus_type_pci;
       
  5163 
       
  5164         if(hw->device_id == E1000_DEV_ID_82546EB_QUAD_COPPER) {
       
  5165             hw->bus_speed = (hw->bus_type == e1000_bus_type_pci) ?
       
  5166                             e1000_bus_speed_66 : e1000_bus_speed_120;
       
  5167         } else if(hw->bus_type == e1000_bus_type_pci) {
       
  5168             hw->bus_speed = (status & E1000_STATUS_PCI66) ?
       
  5169                             e1000_bus_speed_66 : e1000_bus_speed_33;
       
  5170         } else {
       
  5171             switch (status & E1000_STATUS_PCIX_SPEED) {
       
  5172             case E1000_STATUS_PCIX_SPEED_66:
       
  5173                 hw->bus_speed = e1000_bus_speed_66;
       
  5174                 break;
       
  5175             case E1000_STATUS_PCIX_SPEED_100:
       
  5176                 hw->bus_speed = e1000_bus_speed_100;
       
  5177                 break;
       
  5178             case E1000_STATUS_PCIX_SPEED_133:
       
  5179                 hw->bus_speed = e1000_bus_speed_133;
       
  5180                 break;
       
  5181             default:
       
  5182                 hw->bus_speed = e1000_bus_speed_reserved;
       
  5183                 break;
       
  5184             }
       
  5185         }
       
  5186         hw->bus_width = (status & E1000_STATUS_BUS64) ?
       
  5187                         e1000_bus_width_64 : e1000_bus_width_32;
       
  5188         break;
       
  5189     }
       
  5190 }
       
  5191 /******************************************************************************
       
  5192  * Reads a value from one of the devices registers using port I/O (as opposed
       
  5193  * memory mapped I/O). Only 82544 and newer devices support port I/O.
       
  5194  *
       
  5195  * hw - Struct containing variables accessed by shared code
       
  5196  * offset - offset to read from
       
  5197  *****************************************************************************/
       
  5198 uint32_t
       
  5199 e1000_read_reg_io(struct e1000_hw *hw,
       
  5200                   uint32_t offset)
       
  5201 {
       
  5202     unsigned long io_addr = hw->io_base;
       
  5203     unsigned long io_data = hw->io_base + 4;
       
  5204 
       
  5205     e1000_io_write(hw, io_addr, offset);
       
  5206     return e1000_io_read(hw, io_data);
       
  5207 }
       
  5208 
       
  5209 /******************************************************************************
       
  5210  * Writes a value to one of the devices registers using port I/O (as opposed to
       
  5211  * memory mapped I/O). Only 82544 and newer devices support port I/O.
       
  5212  *
       
  5213  * hw - Struct containing variables accessed by shared code
       
  5214  * offset - offset to write to
       
  5215  * value - value to write
       
  5216  *****************************************************************************/
       
  5217 void
       
  5218 e1000_write_reg_io(struct e1000_hw *hw,
       
  5219                    uint32_t offset,
       
  5220                    uint32_t value)
       
  5221 {
       
  5222     unsigned long io_addr = hw->io_base;
       
  5223     unsigned long io_data = hw->io_base + 4;
       
  5224 
       
  5225     e1000_io_write(hw, io_addr, offset);
       
  5226     e1000_io_write(hw, io_data, value);
       
  5227 }
       
  5228 
       
  5229 
       
  5230 /******************************************************************************
       
  5231  * Estimates the cable length.
       
  5232  *
       
  5233  * hw - Struct containing variables accessed by shared code
       
  5234  * min_length - The estimated minimum length
       
  5235  * max_length - The estimated maximum length
       
  5236  *
       
  5237  * returns: - E1000_ERR_XXX
       
  5238  *            E1000_SUCCESS
       
  5239  *
       
  5240  * This function always returns a ranged length (minimum & maximum).
       
  5241  * So for M88 phy's, this function interprets the one value returned from the
       
  5242  * register to the minimum and maximum range.
       
  5243  * For IGP phy's, the function calculates the range by the AGC registers.
       
  5244  *****************************************************************************/
       
  5245 int32_t
       
  5246 e1000_get_cable_length(struct e1000_hw *hw,
       
  5247                        uint16_t *min_length,
       
  5248                        uint16_t *max_length)
       
  5249 {
       
  5250     int32_t ret_val;
       
  5251     uint16_t agc_value = 0;
       
  5252     uint16_t cur_agc, min_agc = IGP01E1000_AGC_LENGTH_TABLE_SIZE;
       
  5253     uint16_t i, phy_data;
       
  5254     uint16_t cable_length;
       
  5255 
       
  5256     DEBUGFUNC("e1000_get_cable_length");
       
  5257 
       
  5258     *min_length = *max_length = 0;
       
  5259 
       
  5260     /* Use old method for Phy older than IGP */
       
  5261     if(hw->phy_type == e1000_phy_m88) {
       
  5262 
       
  5263         ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
       
  5264                                      &phy_data);
       
  5265         if(ret_val)
       
  5266             return ret_val;
       
  5267         cable_length = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
       
  5268                        M88E1000_PSSR_CABLE_LENGTH_SHIFT;
       
  5269 
       
  5270         /* Convert the enum value to ranged values */
       
  5271         switch (cable_length) {
       
  5272         case e1000_cable_length_50:
       
  5273             *min_length = 0;
       
  5274             *max_length = e1000_igp_cable_length_50;
       
  5275             break;
       
  5276         case e1000_cable_length_50_80:
       
  5277             *min_length = e1000_igp_cable_length_50;
       
  5278             *max_length = e1000_igp_cable_length_80;
       
  5279             break;
       
  5280         case e1000_cable_length_80_110:
       
  5281             *min_length = e1000_igp_cable_length_80;
       
  5282             *max_length = e1000_igp_cable_length_110;
       
  5283             break;
       
  5284         case e1000_cable_length_110_140:
       
  5285             *min_length = e1000_igp_cable_length_110;
       
  5286             *max_length = e1000_igp_cable_length_140;
       
  5287             break;
       
  5288         case e1000_cable_length_140:
       
  5289             *min_length = e1000_igp_cable_length_140;
       
  5290             *max_length = e1000_igp_cable_length_170;
       
  5291             break;
       
  5292         default:
       
  5293             return -E1000_ERR_PHY;
       
  5294             break;
       
  5295         }
       
  5296     } else if(hw->phy_type == e1000_phy_igp) { /* For IGP PHY */
       
  5297         uint16_t agc_reg_array[IGP01E1000_PHY_CHANNEL_NUM] =
       
  5298                                                          {IGP01E1000_PHY_AGC_A,
       
  5299                                                           IGP01E1000_PHY_AGC_B,
       
  5300                                                           IGP01E1000_PHY_AGC_C,
       
  5301                                                           IGP01E1000_PHY_AGC_D};
       
  5302         /* Read the AGC registers for all channels */
       
  5303         for(i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
       
  5304 
       
  5305             ret_val = e1000_read_phy_reg(hw, agc_reg_array[i], &phy_data);
       
  5306             if(ret_val)
       
  5307                 return ret_val;
       
  5308 
       
  5309             cur_agc = phy_data >> IGP01E1000_AGC_LENGTH_SHIFT;
       
  5310 
       
  5311             /* Array bound check. */
       
  5312             if((cur_agc >= IGP01E1000_AGC_LENGTH_TABLE_SIZE - 1) ||
       
  5313                (cur_agc == 0))
       
  5314                 return -E1000_ERR_PHY;
       
  5315 
       
  5316             agc_value += cur_agc;
       
  5317 
       
  5318             /* Update minimal AGC value. */
       
  5319             if(min_agc > cur_agc)
       
  5320                 min_agc = cur_agc;
       
  5321         }
       
  5322 
       
  5323         /* Remove the minimal AGC result for length < 50m */
       
  5324         if(agc_value < IGP01E1000_PHY_CHANNEL_NUM * e1000_igp_cable_length_50) {
       
  5325             agc_value -= min_agc;
       
  5326 
       
  5327             /* Get the average length of the remaining 3 channels */
       
  5328             agc_value /= (IGP01E1000_PHY_CHANNEL_NUM - 1);
       
  5329         } else {
       
  5330             /* Get the average length of all the 4 channels. */
       
  5331             agc_value /= IGP01E1000_PHY_CHANNEL_NUM;
       
  5332         }
       
  5333 
       
  5334         /* Set the range of the calculated length. */
       
  5335         *min_length = ((e1000_igp_cable_length_table[agc_value] -
       
  5336                        IGP01E1000_AGC_RANGE) > 0) ?
       
  5337                        (e1000_igp_cable_length_table[agc_value] -
       
  5338                        IGP01E1000_AGC_RANGE) : 0;
       
  5339         *max_length = e1000_igp_cable_length_table[agc_value] +
       
  5340                       IGP01E1000_AGC_RANGE;
       
  5341     }
       
  5342 
       
  5343     return E1000_SUCCESS;
       
  5344 }
       
  5345 
       
  5346 /******************************************************************************
       
  5347  * Check the cable polarity
       
  5348  *
       
  5349  * hw - Struct containing variables accessed by shared code
       
  5350  * polarity - output parameter : 0 - Polarity is not reversed
       
  5351  *                               1 - Polarity is reversed.
       
  5352  *
       
  5353  * returns: - E1000_ERR_XXX
       
  5354  *            E1000_SUCCESS
       
  5355  *
       
  5356  * For phy's older then IGP, this function simply reads the polarity bit in the
       
  5357  * Phy Status register.  For IGP phy's, this bit is valid only if link speed is
       
  5358  * 10 Mbps.  If the link speed is 100 Mbps there is no polarity so this bit will
       
  5359  * return 0.  If the link speed is 1000 Mbps the polarity status is in the
       
  5360  * IGP01E1000_PHY_PCS_INIT_REG.
       
  5361  *****************************************************************************/
       
  5362 int32_t
       
  5363 e1000_check_polarity(struct e1000_hw *hw,
       
  5364                      uint16_t *polarity)
       
  5365 {
       
  5366     int32_t ret_val;
       
  5367     uint16_t phy_data;
       
  5368 
       
  5369     DEBUGFUNC("e1000_check_polarity");
       
  5370 
       
  5371     if(hw->phy_type == e1000_phy_m88) {
       
  5372         /* return the Polarity bit in the Status register. */
       
  5373         ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
       
  5374                                      &phy_data);
       
  5375         if(ret_val)
       
  5376             return ret_val;
       
  5377         *polarity = (phy_data & M88E1000_PSSR_REV_POLARITY) >>
       
  5378                     M88E1000_PSSR_REV_POLARITY_SHIFT;
       
  5379     } else if(hw->phy_type == e1000_phy_igp ||
       
  5380               hw->phy_type == e1000_phy_igp_2) {
       
  5381         /* Read the Status register to check the speed */
       
  5382         ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS,
       
  5383                                      &phy_data);
       
  5384         if(ret_val)
       
  5385             return ret_val;
       
  5386 
       
  5387         /* If speed is 1000 Mbps, must read the IGP01E1000_PHY_PCS_INIT_REG to
       
  5388          * find the polarity status */
       
  5389         if((phy_data & IGP01E1000_PSSR_SPEED_MASK) ==
       
  5390            IGP01E1000_PSSR_SPEED_1000MBPS) {
       
  5391 
       
  5392             /* Read the GIG initialization PCS register (0x00B4) */
       
  5393             ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PCS_INIT_REG,
       
  5394                                          &phy_data);
       
  5395             if(ret_val)
       
  5396                 return ret_val;
       
  5397 
       
  5398             /* Check the polarity bits */
       
  5399             *polarity = (phy_data & IGP01E1000_PHY_POLARITY_MASK) ? 1 : 0;
       
  5400         } else {
       
  5401             /* For 10 Mbps, read the polarity bit in the status register. (for
       
  5402              * 100 Mbps this bit is always 0) */
       
  5403             *polarity = phy_data & IGP01E1000_PSSR_POLARITY_REVERSED;
       
  5404         }
       
  5405     }
       
  5406     return E1000_SUCCESS;
       
  5407 }
       
  5408 
       
  5409 /******************************************************************************
       
  5410  * Check if Downshift occured
       
  5411  *
       
  5412  * hw - Struct containing variables accessed by shared code
       
  5413  * downshift - output parameter : 0 - No Downshift ocured.
       
  5414  *                                1 - Downshift ocured.
       
  5415  *
       
  5416  * returns: - E1000_ERR_XXX
       
  5417  *            E1000_SUCCESS 
       
  5418  *
       
  5419  * For phy's older then IGP, this function reads the Downshift bit in the Phy
       
  5420  * Specific Status register.  For IGP phy's, it reads the Downgrade bit in the
       
  5421  * Link Health register.  In IGP this bit is latched high, so the driver must
       
  5422  * read it immediately after link is established.
       
  5423  *****************************************************************************/
       
  5424 int32_t
       
  5425 e1000_check_downshift(struct e1000_hw *hw)
       
  5426 {
       
  5427     int32_t ret_val;
       
  5428     uint16_t phy_data;
       
  5429 
       
  5430     DEBUGFUNC("e1000_check_downshift");
       
  5431 
       
  5432     if(hw->phy_type == e1000_phy_igp || 
       
  5433         hw->phy_type == e1000_phy_igp_2) {
       
  5434         ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_LINK_HEALTH,
       
  5435                                      &phy_data);
       
  5436         if(ret_val)
       
  5437             return ret_val;
       
  5438 
       
  5439         hw->speed_downgraded = (phy_data & IGP01E1000_PLHR_SS_DOWNGRADE) ? 1 : 0;
       
  5440     } else if(hw->phy_type == e1000_phy_m88) {
       
  5441         ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS,
       
  5442                                      &phy_data);
       
  5443         if(ret_val)
       
  5444             return ret_val;
       
  5445 
       
  5446         hw->speed_downgraded = (phy_data & M88E1000_PSSR_DOWNSHIFT) >>
       
  5447                                M88E1000_PSSR_DOWNSHIFT_SHIFT;
       
  5448     }
       
  5449 
       
  5450     return E1000_SUCCESS;
       
  5451 }
       
  5452 
       
  5453 /*****************************************************************************
       
  5454  *
       
  5455  * 82541_rev_2 & 82547_rev_2 have the capability to configure the DSP when a
       
  5456  * gigabit link is achieved to improve link quality.
       
  5457  *
       
  5458  * hw: Struct containing variables accessed by shared code
       
  5459  *
       
  5460  * returns: - E1000_ERR_PHY if fail to read/write the PHY
       
  5461  *            E1000_SUCCESS at any other case.
       
  5462  *
       
  5463  ****************************************************************************/
       
  5464 
       
  5465 int32_t
       
  5466 e1000_config_dsp_after_link_change(struct e1000_hw *hw,
       
  5467                                    boolean_t link_up)
       
  5468 {
       
  5469     int32_t ret_val;
       
  5470     uint16_t phy_data, phy_saved_data, speed, duplex, i;
       
  5471     uint16_t dsp_reg_array[IGP01E1000_PHY_CHANNEL_NUM] =
       
  5472                                         {IGP01E1000_PHY_AGC_PARAM_A,
       
  5473                                         IGP01E1000_PHY_AGC_PARAM_B,
       
  5474                                         IGP01E1000_PHY_AGC_PARAM_C,
       
  5475                                         IGP01E1000_PHY_AGC_PARAM_D};
       
  5476     uint16_t min_length, max_length;
       
  5477 
       
  5478     DEBUGFUNC("e1000_config_dsp_after_link_change");
       
  5479 
       
  5480     if(hw->phy_type != e1000_phy_igp)
       
  5481         return E1000_SUCCESS;
       
  5482 
       
  5483     if(link_up) {
       
  5484         ret_val = e1000_get_speed_and_duplex(hw, &speed, &duplex);
       
  5485         if(ret_val) {
       
  5486             DEBUGOUT("Error getting link speed and duplex\n");
       
  5487             return ret_val;
       
  5488         }
       
  5489 
       
  5490         if(speed == SPEED_1000) {
       
  5491 
       
  5492             e1000_get_cable_length(hw, &min_length, &max_length);
       
  5493 
       
  5494             if((hw->dsp_config_state == e1000_dsp_config_enabled) &&
       
  5495                 min_length >= e1000_igp_cable_length_50) {
       
  5496 
       
  5497                 for(i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
       
  5498                     ret_val = e1000_read_phy_reg(hw, dsp_reg_array[i],
       
  5499                                                  &phy_data);
       
  5500                     if(ret_val)
       
  5501                         return ret_val;
       
  5502 
       
  5503                     phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
       
  5504 
       
  5505                     ret_val = e1000_write_phy_reg(hw, dsp_reg_array[i],
       
  5506                                                   phy_data);
       
  5507                     if(ret_val)
       
  5508                         return ret_val;
       
  5509                 }
       
  5510                 hw->dsp_config_state = e1000_dsp_config_activated;
       
  5511             }
       
  5512 
       
  5513             if((hw->ffe_config_state == e1000_ffe_config_enabled) &&
       
  5514                (min_length < e1000_igp_cable_length_50)) {
       
  5515 
       
  5516                 uint16_t ffe_idle_err_timeout = FFE_IDLE_ERR_COUNT_TIMEOUT_20;
       
  5517                 uint32_t idle_errs = 0;
       
  5518 
       
  5519                 /* clear previous idle error counts */
       
  5520                 ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS,
       
  5521                                              &phy_data);
       
  5522                 if(ret_val)
       
  5523                     return ret_val;
       
  5524 
       
  5525                 for(i = 0; i < ffe_idle_err_timeout; i++) {
       
  5526                     udelay(1000);
       
  5527                     ret_val = e1000_read_phy_reg(hw, PHY_1000T_STATUS,
       
  5528                                                  &phy_data);
       
  5529                     if(ret_val)
       
  5530                         return ret_val;
       
  5531 
       
  5532                     idle_errs += (phy_data & SR_1000T_IDLE_ERROR_CNT);
       
  5533                     if(idle_errs > SR_1000T_PHY_EXCESSIVE_IDLE_ERR_COUNT) {
       
  5534                         hw->ffe_config_state = e1000_ffe_config_active;
       
  5535 
       
  5536                         ret_val = e1000_write_phy_reg(hw,
       
  5537                                     IGP01E1000_PHY_DSP_FFE,
       
  5538                                     IGP01E1000_PHY_DSP_FFE_CM_CP);
       
  5539                         if(ret_val)
       
  5540                             return ret_val;
       
  5541                         break;
       
  5542                     }
       
  5543 
       
  5544                     if(idle_errs)
       
  5545                         ffe_idle_err_timeout = FFE_IDLE_ERR_COUNT_TIMEOUT_100;
       
  5546                 }
       
  5547             }
       
  5548         }
       
  5549     } else {
       
  5550         if(hw->dsp_config_state == e1000_dsp_config_activated) {
       
  5551             /* Save off the current value of register 0x2F5B to be restored at
       
  5552              * the end of the routines. */
       
  5553             ret_val = e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
       
  5554 
       
  5555             if(ret_val)
       
  5556                 return ret_val;
       
  5557 
       
  5558             /* Disable the PHY transmitter */
       
  5559             ret_val = e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
       
  5560 
       
  5561             if(ret_val)
       
  5562                 return ret_val;
       
  5563 
       
  5564             msec_delay_irq(20);
       
  5565 
       
  5566             ret_val = e1000_write_phy_reg(hw, 0x0000,
       
  5567                                           IGP01E1000_IEEE_FORCE_GIGA);
       
  5568             if(ret_val)
       
  5569                 return ret_val;
       
  5570             for(i = 0; i < IGP01E1000_PHY_CHANNEL_NUM; i++) {
       
  5571                 ret_val = e1000_read_phy_reg(hw, dsp_reg_array[i], &phy_data);
       
  5572                 if(ret_val)
       
  5573                     return ret_val;
       
  5574 
       
  5575                 phy_data &= ~IGP01E1000_PHY_EDAC_MU_INDEX;
       
  5576                 phy_data |=  IGP01E1000_PHY_EDAC_SIGN_EXT_9_BITS;
       
  5577 
       
  5578                 ret_val = e1000_write_phy_reg(hw,dsp_reg_array[i], phy_data);
       
  5579                 if(ret_val)
       
  5580                     return ret_val;
       
  5581             }
       
  5582 
       
  5583             ret_val = e1000_write_phy_reg(hw, 0x0000,
       
  5584                                           IGP01E1000_IEEE_RESTART_AUTONEG);
       
  5585             if(ret_val)
       
  5586                 return ret_val;
       
  5587 
       
  5588             msec_delay_irq(20);
       
  5589 
       
  5590             /* Now enable the transmitter */
       
  5591             ret_val = e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
       
  5592 
       
  5593             if(ret_val)
       
  5594                 return ret_val;
       
  5595 
       
  5596             hw->dsp_config_state = e1000_dsp_config_enabled;
       
  5597         }
       
  5598 
       
  5599         if(hw->ffe_config_state == e1000_ffe_config_active) {
       
  5600             /* Save off the current value of register 0x2F5B to be restored at
       
  5601              * the end of the routines. */
       
  5602             ret_val = e1000_read_phy_reg(hw, 0x2F5B, &phy_saved_data);
       
  5603 
       
  5604             if(ret_val)
       
  5605                 return ret_val;
       
  5606 
       
  5607             /* Disable the PHY transmitter */
       
  5608             ret_val = e1000_write_phy_reg(hw, 0x2F5B, 0x0003);
       
  5609 
       
  5610             if(ret_val)
       
  5611                 return ret_val;
       
  5612 
       
  5613             msec_delay_irq(20);
       
  5614 
       
  5615             ret_val = e1000_write_phy_reg(hw, 0x0000,
       
  5616                                           IGP01E1000_IEEE_FORCE_GIGA);
       
  5617             if(ret_val)
       
  5618                 return ret_val;
       
  5619             ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_DSP_FFE,
       
  5620                                           IGP01E1000_PHY_DSP_FFE_DEFAULT);
       
  5621             if(ret_val)
       
  5622                 return ret_val;
       
  5623 
       
  5624             ret_val = e1000_write_phy_reg(hw, 0x0000,
       
  5625                                           IGP01E1000_IEEE_RESTART_AUTONEG);
       
  5626             if(ret_val)
       
  5627                 return ret_val;
       
  5628 
       
  5629             msec_delay_irq(20);
       
  5630 
       
  5631             /* Now enable the transmitter */
       
  5632             ret_val = e1000_write_phy_reg(hw, 0x2F5B, phy_saved_data);
       
  5633 
       
  5634             if(ret_val)
       
  5635                 return ret_val;
       
  5636 
       
  5637             hw->ffe_config_state = e1000_ffe_config_enabled;
       
  5638         }
       
  5639     }
       
  5640     return E1000_SUCCESS;
       
  5641 }
       
  5642 
       
  5643 /*****************************************************************************
       
  5644  * Set PHY to class A mode
       
  5645  * Assumes the following operations will follow to enable the new class mode.
       
  5646  *  1. Do a PHY soft reset
       
  5647  *  2. Restart auto-negotiation or force link.
       
  5648  *
       
  5649  * hw - Struct containing variables accessed by shared code
       
  5650  ****************************************************************************/
       
  5651 static int32_t
       
  5652 e1000_set_phy_mode(struct e1000_hw *hw)
       
  5653 {
       
  5654     int32_t ret_val;
       
  5655     uint16_t eeprom_data;
       
  5656 
       
  5657     DEBUGFUNC("e1000_set_phy_mode");
       
  5658 
       
  5659     if((hw->mac_type == e1000_82545_rev_3) &&
       
  5660        (hw->media_type == e1000_media_type_copper)) {
       
  5661         ret_val = e1000_read_eeprom(hw, EEPROM_PHY_CLASS_WORD, 1, &eeprom_data);
       
  5662         if(ret_val) {
       
  5663             return ret_val;
       
  5664         }
       
  5665 
       
  5666         if((eeprom_data != EEPROM_RESERVED_WORD) &&
       
  5667            (eeprom_data & EEPROM_PHY_CLASS_A)) {
       
  5668             ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x000B);
       
  5669             if(ret_val)
       
  5670                 return ret_val;
       
  5671             ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0x8104);
       
  5672             if(ret_val)
       
  5673                 return ret_val;
       
  5674 
       
  5675             hw->phy_reset_disable = FALSE;
       
  5676         }
       
  5677     }
       
  5678 
       
  5679     return E1000_SUCCESS;
       
  5680 }
       
  5681 
       
  5682 /*****************************************************************************
       
  5683  *
       
  5684  * This function sets the lplu state according to the active flag.  When
       
  5685  * activating lplu this function also disables smart speed and vise versa.
       
  5686  * lplu will not be activated unless the device autonegotiation advertisment
       
  5687  * meets standards of either 10 or 10/100 or 10/100/1000 at all duplexes.
       
  5688  * hw: Struct containing variables accessed by shared code
       
  5689  * active - true to enable lplu false to disable lplu.
       
  5690  *
       
  5691  * returns: - E1000_ERR_PHY if fail to read/write the PHY
       
  5692  *            E1000_SUCCESS at any other case.
       
  5693  *
       
  5694  ****************************************************************************/
       
  5695 
       
  5696 int32_t
       
  5697 e1000_set_d3_lplu_state(struct e1000_hw *hw,
       
  5698                         boolean_t active)
       
  5699 {
       
  5700     int32_t ret_val;
       
  5701     uint16_t phy_data;
       
  5702     DEBUGFUNC("e1000_set_d3_lplu_state");
       
  5703 
       
  5704     if(hw->phy_type != e1000_phy_igp && hw->phy_type != e1000_phy_igp_2)
       
  5705         return E1000_SUCCESS;
       
  5706 
       
  5707     /* During driver activity LPLU should not be used or it will attain link
       
  5708      * from the lowest speeds starting from 10Mbps. The capability is used for
       
  5709      * Dx transitions and states */
       
  5710     if(hw->mac_type == e1000_82541_rev_2 || hw->mac_type == e1000_82547_rev_2) {
       
  5711         ret_val = e1000_read_phy_reg(hw, IGP01E1000_GMII_FIFO, &phy_data);
       
  5712         if(ret_val)
       
  5713             return ret_val;
       
  5714     } else {
       
  5715         ret_val = e1000_read_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, &phy_data);
       
  5716         if(ret_val)
       
  5717             return ret_val;
       
  5718     }
       
  5719 
       
  5720     if(!active) {
       
  5721         if(hw->mac_type == e1000_82541_rev_2 ||
       
  5722            hw->mac_type == e1000_82547_rev_2) {
       
  5723             phy_data &= ~IGP01E1000_GMII_FLEX_SPD;
       
  5724             ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO, phy_data);
       
  5725             if(ret_val)
       
  5726                 return ret_val;
       
  5727         } else {
       
  5728                 phy_data &= ~IGP02E1000_PM_D3_LPLU;
       
  5729                 ret_val = e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT,
       
  5730                                               phy_data);
       
  5731                 if (ret_val)
       
  5732                     return ret_val;
       
  5733         }
       
  5734 
       
  5735         /* LPLU and SmartSpeed are mutually exclusive.  LPLU is used during
       
  5736          * Dx states where the power conservation is most important.  During
       
  5737          * driver activity we should enable SmartSpeed, so performance is
       
  5738          * maintained. */
       
  5739         if (hw->smart_speed == e1000_smart_speed_on) {
       
  5740             ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
       
  5741                                          &phy_data);
       
  5742             if(ret_val)
       
  5743                 return ret_val;
       
  5744 
       
  5745             phy_data |= IGP01E1000_PSCFR_SMART_SPEED;
       
  5746             ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
       
  5747                                           phy_data);
       
  5748             if(ret_val)
       
  5749                 return ret_val;
       
  5750         } else if (hw->smart_speed == e1000_smart_speed_off) {
       
  5751             ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
       
  5752                                          &phy_data);
       
  5753 	    if (ret_val)
       
  5754                 return ret_val;
       
  5755 
       
  5756             phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
       
  5757             ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
       
  5758                                           phy_data);
       
  5759             if(ret_val)
       
  5760                 return ret_val;
       
  5761         }
       
  5762 
       
  5763     } else if((hw->autoneg_advertised == AUTONEG_ADVERTISE_SPEED_DEFAULT) ||
       
  5764               (hw->autoneg_advertised == AUTONEG_ADVERTISE_10_ALL ) ||
       
  5765               (hw->autoneg_advertised == AUTONEG_ADVERTISE_10_100_ALL)) {
       
  5766 
       
  5767         if(hw->mac_type == e1000_82541_rev_2 ||
       
  5768            hw->mac_type == e1000_82547_rev_2) {
       
  5769             phy_data |= IGP01E1000_GMII_FLEX_SPD;
       
  5770             ret_val = e1000_write_phy_reg(hw, IGP01E1000_GMII_FIFO, phy_data);
       
  5771             if(ret_val)
       
  5772                 return ret_val;
       
  5773         } else {
       
  5774                 phy_data |= IGP02E1000_PM_D3_LPLU;
       
  5775                 ret_val = e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT,
       
  5776                                               phy_data);
       
  5777                 if (ret_val)
       
  5778                     return ret_val;
       
  5779         }
       
  5780 
       
  5781         /* When LPLU is enabled we should disable SmartSpeed */
       
  5782         ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, &phy_data);
       
  5783         if(ret_val)
       
  5784             return ret_val;
       
  5785 
       
  5786         phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
       
  5787         ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, phy_data);
       
  5788         if(ret_val)
       
  5789             return ret_val;
       
  5790 
       
  5791     }
       
  5792     return E1000_SUCCESS;
       
  5793 }
       
  5794 
       
  5795 /*****************************************************************************
       
  5796  *
       
  5797  * This function sets the lplu d0 state according to the active flag.  When
       
  5798  * activating lplu this function also disables smart speed and vise versa.
       
  5799  * lplu will not be activated unless the device autonegotiation advertisment
       
  5800  * meets standards of either 10 or 10/100 or 10/100/1000 at all duplexes.
       
  5801  * hw: Struct containing variables accessed by shared code
       
  5802  * active - true to enable lplu false to disable lplu.
       
  5803  *
       
  5804  * returns: - E1000_ERR_PHY if fail to read/write the PHY
       
  5805  *            E1000_SUCCESS at any other case.
       
  5806  *
       
  5807  ****************************************************************************/
       
  5808 
       
  5809 int32_t
       
  5810 e1000_set_d0_lplu_state(struct e1000_hw *hw,
       
  5811                         boolean_t active)
       
  5812 {
       
  5813     int32_t ret_val;
       
  5814     uint16_t phy_data;
       
  5815     DEBUGFUNC("e1000_set_d0_lplu_state");
       
  5816 
       
  5817     if(hw->mac_type <= e1000_82547_rev_2)
       
  5818         return E1000_SUCCESS;
       
  5819 
       
  5820         ret_val = e1000_read_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, &phy_data);
       
  5821         if(ret_val)
       
  5822             return ret_val;
       
  5823 
       
  5824     if (!active) {
       
  5825             phy_data &= ~IGP02E1000_PM_D0_LPLU;
       
  5826             ret_val = e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, phy_data);
       
  5827             if (ret_val)
       
  5828                 return ret_val;
       
  5829 
       
  5830         /* LPLU and SmartSpeed are mutually exclusive.  LPLU is used during
       
  5831          * Dx states where the power conservation is most important.  During
       
  5832          * driver activity we should enable SmartSpeed, so performance is
       
  5833          * maintained. */
       
  5834         if (hw->smart_speed == e1000_smart_speed_on) {
       
  5835             ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
       
  5836                                          &phy_data);
       
  5837             if(ret_val)
       
  5838                 return ret_val;
       
  5839 
       
  5840             phy_data |= IGP01E1000_PSCFR_SMART_SPEED;
       
  5841             ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
       
  5842                                           phy_data);
       
  5843             if(ret_val)
       
  5844                 return ret_val;
       
  5845         } else if (hw->smart_speed == e1000_smart_speed_off) {
       
  5846             ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
       
  5847                                          &phy_data);
       
  5848 	    if (ret_val)
       
  5849                 return ret_val;
       
  5850 
       
  5851             phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
       
  5852             ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
       
  5853                                           phy_data);
       
  5854             if(ret_val)
       
  5855                 return ret_val;
       
  5856         }
       
  5857 
       
  5858 
       
  5859     } else {
       
  5860  
       
  5861             phy_data |= IGP02E1000_PM_D0_LPLU;   
       
  5862             ret_val = e1000_write_phy_reg(hw, IGP02E1000_PHY_POWER_MGMT, phy_data);
       
  5863             if (ret_val)
       
  5864                 return ret_val;
       
  5865 
       
  5866         /* When LPLU is enabled we should disable SmartSpeed */
       
  5867         ret_val = e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, &phy_data);
       
  5868         if(ret_val)
       
  5869             return ret_val;
       
  5870 
       
  5871         phy_data &= ~IGP01E1000_PSCFR_SMART_SPEED;
       
  5872         ret_val = e1000_write_phy_reg(hw, IGP01E1000_PHY_PORT_CONFIG, phy_data);
       
  5873         if(ret_val)
       
  5874             return ret_val;
       
  5875 
       
  5876     }
       
  5877     return E1000_SUCCESS;
       
  5878 }
       
  5879 
       
  5880 /******************************************************************************
       
  5881  * Change VCO speed register to improve Bit Error Rate performance of SERDES.
       
  5882  *
       
  5883  * hw - Struct containing variables accessed by shared code
       
  5884  *****************************************************************************/
       
  5885 static int32_t
       
  5886 e1000_set_vco_speed(struct e1000_hw *hw)
       
  5887 {
       
  5888     int32_t  ret_val;
       
  5889     uint16_t default_page = 0;
       
  5890     uint16_t phy_data;
       
  5891 
       
  5892     DEBUGFUNC("e1000_set_vco_speed");
       
  5893 
       
  5894     switch(hw->mac_type) {
       
  5895     case e1000_82545_rev_3:
       
  5896     case e1000_82546_rev_3:
       
  5897        break;
       
  5898     default:
       
  5899         return E1000_SUCCESS;
       
  5900     }
       
  5901 
       
  5902     /* Set PHY register 30, page 5, bit 8 to 0 */
       
  5903 
       
  5904     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, &default_page);
       
  5905     if(ret_val)
       
  5906         return ret_val;
       
  5907 
       
  5908     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0005);
       
  5909     if(ret_val)
       
  5910         return ret_val;
       
  5911 
       
  5912     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, &phy_data);
       
  5913     if(ret_val)
       
  5914         return ret_val;
       
  5915 
       
  5916     phy_data &= ~M88E1000_PHY_VCO_REG_BIT8;
       
  5917     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, phy_data);
       
  5918     if(ret_val)
       
  5919         return ret_val;
       
  5920 
       
  5921     /* Set PHY register 30, page 4, bit 11 to 1 */
       
  5922 
       
  5923     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0004);
       
  5924     if(ret_val)
       
  5925         return ret_val;
       
  5926 
       
  5927     ret_val = e1000_read_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, &phy_data);
       
  5928     if(ret_val)
       
  5929         return ret_val;
       
  5930 
       
  5931     phy_data |= M88E1000_PHY_VCO_REG_BIT11;
       
  5932     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, phy_data);
       
  5933     if(ret_val)
       
  5934         return ret_val;
       
  5935 
       
  5936     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, default_page);
       
  5937     if(ret_val)
       
  5938         return ret_val;
       
  5939 
       
  5940     return E1000_SUCCESS;
       
  5941 }
       
  5942 
       
  5943 
       
  5944 /*****************************************************************************
       
  5945  * This function reads the cookie from ARC ram.
       
  5946  *
       
  5947  * returns: - E1000_SUCCESS .
       
  5948  ****************************************************************************/
       
  5949 int32_t
       
  5950 e1000_host_if_read_cookie(struct e1000_hw * hw, uint8_t *buffer)
       
  5951 {
       
  5952     uint8_t i;
       
  5953     uint32_t offset = E1000_MNG_DHCP_COOKIE_OFFSET; 
       
  5954     uint8_t length = E1000_MNG_DHCP_COOKIE_LENGTH;
       
  5955 
       
  5956     length = (length >> 2);
       
  5957     offset = (offset >> 2);
       
  5958 
       
  5959     for (i = 0; i < length; i++) {
       
  5960         *((uint32_t *) buffer + i) =
       
  5961             E1000_READ_REG_ARRAY_DWORD(hw, HOST_IF, offset + i);
       
  5962     }
       
  5963     return E1000_SUCCESS;
       
  5964 }
       
  5965 
       
  5966 
       
  5967 /*****************************************************************************
       
  5968  * This function checks whether the HOST IF is enabled for command operaton
       
  5969  * and also checks whether the previous command is completed.
       
  5970  * It busy waits in case of previous command is not completed.
       
  5971  *
       
  5972  * returns: - E1000_ERR_HOST_INTERFACE_COMMAND in case if is not ready or 
       
  5973  *            timeout
       
  5974  *          - E1000_SUCCESS for success.
       
  5975  ****************************************************************************/
       
  5976 int32_t
       
  5977 e1000_mng_enable_host_if(struct e1000_hw * hw)
       
  5978 {
       
  5979     uint32_t hicr;
       
  5980     uint8_t i;
       
  5981 
       
  5982     /* Check that the host interface is enabled. */
       
  5983     hicr = E1000_READ_REG(hw, HICR);
       
  5984     if ((hicr & E1000_HICR_EN) == 0) {
       
  5985         DEBUGOUT("E1000_HOST_EN bit disabled.\n");
       
  5986         return -E1000_ERR_HOST_INTERFACE_COMMAND;
       
  5987     }
       
  5988     /* check the previous command is completed */
       
  5989     for (i = 0; i < E1000_MNG_DHCP_COMMAND_TIMEOUT; i++) {
       
  5990         hicr = E1000_READ_REG(hw, HICR);
       
  5991         if (!(hicr & E1000_HICR_C))
       
  5992             break;
       
  5993         msec_delay_irq(1);
       
  5994     }
       
  5995 
       
  5996     if (i == E1000_MNG_DHCP_COMMAND_TIMEOUT) { 
       
  5997         DEBUGOUT("Previous command timeout failed .\n");
       
  5998         return -E1000_ERR_HOST_INTERFACE_COMMAND;
       
  5999     }
       
  6000     return E1000_SUCCESS;
       
  6001 }
       
  6002 
       
  6003 /*****************************************************************************
       
  6004  * This function writes the buffer content at the offset given on the host if.
       
  6005  * It also does alignment considerations to do the writes in most efficient way.
       
  6006  * Also fills up the sum of the buffer in *buffer parameter.
       
  6007  *
       
  6008  * returns  - E1000_SUCCESS for success.
       
  6009  ****************************************************************************/
       
  6010 int32_t
       
  6011 e1000_mng_host_if_write(struct e1000_hw * hw, uint8_t *buffer,
       
  6012                         uint16_t length, uint16_t offset, uint8_t *sum)
       
  6013 {
       
  6014     uint8_t *tmp;
       
  6015     uint8_t *bufptr = buffer;
       
  6016     uint32_t data;
       
  6017     uint16_t remaining, i, j, prev_bytes;
       
  6018 
       
  6019     /* sum = only sum of the data and it is not checksum */
       
  6020 
       
  6021     if (length == 0 || offset + length > E1000_HI_MAX_MNG_DATA_LENGTH) {
       
  6022         return -E1000_ERR_PARAM;
       
  6023     }
       
  6024 
       
  6025     tmp = (uint8_t *)&data;
       
  6026     prev_bytes = offset & 0x3;
       
  6027     offset &= 0xFFFC;
       
  6028     offset >>= 2;
       
  6029 
       
  6030     if (prev_bytes) {
       
  6031         data = E1000_READ_REG_ARRAY_DWORD(hw, HOST_IF, offset);
       
  6032         for (j = prev_bytes; j < sizeof(uint32_t); j++) {
       
  6033             *(tmp + j) = *bufptr++;
       
  6034             *sum += *(tmp + j);
       
  6035         }
       
  6036         E1000_WRITE_REG_ARRAY_DWORD(hw, HOST_IF, offset, data);
       
  6037         length -= j - prev_bytes;
       
  6038         offset++;
       
  6039     }
       
  6040 
       
  6041     remaining = length & 0x3;
       
  6042     length -= remaining;
       
  6043 
       
  6044     /* Calculate length in DWORDs */
       
  6045     length >>= 2;
       
  6046 
       
  6047     /* The device driver writes the relevant command block into the
       
  6048      * ram area. */
       
  6049     for (i = 0; i < length; i++) {
       
  6050         for (j = 0; j < sizeof(uint32_t); j++) {
       
  6051             *(tmp + j) = *bufptr++;
       
  6052             *sum += *(tmp + j);
       
  6053         }
       
  6054 
       
  6055         E1000_WRITE_REG_ARRAY_DWORD(hw, HOST_IF, offset + i, data);
       
  6056     }
       
  6057     if (remaining) {
       
  6058         for (j = 0; j < sizeof(uint32_t); j++) {
       
  6059             if (j < remaining)
       
  6060                 *(tmp + j) = *bufptr++;
       
  6061             else
       
  6062                 *(tmp + j) = 0;
       
  6063 
       
  6064             *sum += *(tmp + j);
       
  6065         }
       
  6066         E1000_WRITE_REG_ARRAY_DWORD(hw, HOST_IF, offset + i, data);
       
  6067     }
       
  6068 
       
  6069     return E1000_SUCCESS;
       
  6070 }
       
  6071 
       
  6072 
       
  6073 /*****************************************************************************
       
  6074  * This function writes the command header after does the checksum calculation.
       
  6075  *
       
  6076  * returns  - E1000_SUCCESS for success.
       
  6077  ****************************************************************************/
       
  6078 int32_t
       
  6079 e1000_mng_write_cmd_header(struct e1000_hw * hw,
       
  6080                            struct e1000_host_mng_command_header * hdr)
       
  6081 {
       
  6082     uint16_t i;
       
  6083     uint8_t sum;
       
  6084     uint8_t *buffer;
       
  6085 
       
  6086     /* Write the whole command header structure which includes sum of
       
  6087      * the buffer */
       
  6088 
       
  6089     uint16_t length = sizeof(struct e1000_host_mng_command_header);
       
  6090 
       
  6091     sum = hdr->checksum;
       
  6092     hdr->checksum = 0;
       
  6093 
       
  6094     buffer = (uint8_t *) hdr;
       
  6095     i = length;
       
  6096     while(i--)
       
  6097         sum += buffer[i];
       
  6098 
       
  6099     hdr->checksum = 0 - sum;
       
  6100 
       
  6101     length >>= 2;
       
  6102     /* The device driver writes the relevant command block into the ram area. */
       
  6103     for (i = 0; i < length; i++)
       
  6104         E1000_WRITE_REG_ARRAY_DWORD(hw, HOST_IF, i, *((uint32_t *) hdr + i));
       
  6105 
       
  6106     return E1000_SUCCESS;
       
  6107 }
       
  6108 
       
  6109 
       
  6110 /*****************************************************************************
       
  6111  * This function indicates to ARC that a new command is pending which completes
       
  6112  * one write operation by the driver.
       
  6113  *
       
  6114  * returns  - E1000_SUCCESS for success.
       
  6115  ****************************************************************************/
       
  6116 int32_t
       
  6117 e1000_mng_write_commit(
       
  6118     struct e1000_hw * hw)
       
  6119 {
       
  6120     uint32_t hicr;
       
  6121 
       
  6122     hicr = E1000_READ_REG(hw, HICR);
       
  6123     /* Setting this bit tells the ARC that a new command is pending. */
       
  6124     E1000_WRITE_REG(hw, HICR, hicr | E1000_HICR_C);
       
  6125 
       
  6126     return E1000_SUCCESS;
       
  6127 }
       
  6128 
       
  6129 
       
  6130 /*****************************************************************************
       
  6131  * This function checks the mode of the firmware.
       
  6132  *
       
  6133  * returns  - TRUE when the mode is IAMT or FALSE.
       
  6134  ****************************************************************************/
       
  6135 boolean_t
       
  6136 e1000_check_mng_mode(
       
  6137     struct e1000_hw *hw)
       
  6138 {
       
  6139     uint32_t fwsm;
       
  6140 
       
  6141     fwsm = E1000_READ_REG(hw, FWSM);
       
  6142 
       
  6143     if((fwsm & E1000_FWSM_MODE_MASK) ==
       
  6144         (E1000_MNG_IAMT_MODE << E1000_FWSM_MODE_SHIFT))
       
  6145         return TRUE;
       
  6146 
       
  6147     return FALSE;
       
  6148 }
       
  6149 
       
  6150 
       
  6151 /*****************************************************************************
       
  6152  * This function writes the dhcp info .
       
  6153  ****************************************************************************/
       
  6154 int32_t
       
  6155 e1000_mng_write_dhcp_info(struct e1000_hw * hw, uint8_t *buffer,
       
  6156 			  uint16_t length)
       
  6157 {
       
  6158     int32_t ret_val;
       
  6159     struct e1000_host_mng_command_header hdr;
       
  6160 
       
  6161     hdr.command_id = E1000_MNG_DHCP_TX_PAYLOAD_CMD;
       
  6162     hdr.command_length = length;
       
  6163     hdr.reserved1 = 0;
       
  6164     hdr.reserved2 = 0;
       
  6165     hdr.checksum = 0;
       
  6166 
       
  6167     ret_val = e1000_mng_enable_host_if(hw);
       
  6168     if (ret_val == E1000_SUCCESS) {
       
  6169         ret_val = e1000_mng_host_if_write(hw, buffer, length, sizeof(hdr),
       
  6170                                           &(hdr.checksum));
       
  6171         if (ret_val == E1000_SUCCESS) {
       
  6172             ret_val = e1000_mng_write_cmd_header(hw, &hdr);
       
  6173             if (ret_val == E1000_SUCCESS)
       
  6174                 ret_val = e1000_mng_write_commit(hw);
       
  6175         }
       
  6176     }
       
  6177     return ret_val;
       
  6178 }
       
  6179 
       
  6180 
       
  6181 /*****************************************************************************
       
  6182  * This function calculates the checksum.
       
  6183  *
       
  6184  * returns  - checksum of buffer contents.
       
  6185  ****************************************************************************/
       
  6186 uint8_t
       
  6187 e1000_calculate_mng_checksum(char *buffer, uint32_t length)
       
  6188 {
       
  6189     uint8_t sum = 0;
       
  6190     uint32_t i;
       
  6191 
       
  6192     if (!buffer)
       
  6193         return 0;
       
  6194 
       
  6195     for (i=0; i < length; i++)
       
  6196         sum += buffer[i];
       
  6197 
       
  6198     return (uint8_t) (0 - sum);
       
  6199 }
       
  6200 
       
  6201 /*****************************************************************************
       
  6202  * This function checks whether tx pkt filtering needs to be enabled or not.
       
  6203  *
       
  6204  * returns  - TRUE for packet filtering or FALSE.
       
  6205  ****************************************************************************/
       
  6206 boolean_t
       
  6207 e1000_enable_tx_pkt_filtering(struct e1000_hw *hw)
       
  6208 {
       
  6209     /* called in init as well as watchdog timer functions */
       
  6210 
       
  6211     int32_t ret_val, checksum;
       
  6212     boolean_t tx_filter = FALSE;
       
  6213     struct e1000_host_mng_dhcp_cookie *hdr = &(hw->mng_cookie);
       
  6214     uint8_t *buffer = (uint8_t *) &(hw->mng_cookie);
       
  6215 
       
  6216     if (e1000_check_mng_mode(hw)) {
       
  6217         ret_val = e1000_mng_enable_host_if(hw);
       
  6218         if (ret_val == E1000_SUCCESS) {
       
  6219             ret_val = e1000_host_if_read_cookie(hw, buffer);
       
  6220             if (ret_val == E1000_SUCCESS) {
       
  6221                 checksum = hdr->checksum;
       
  6222                 hdr->checksum = 0;
       
  6223                 if ((hdr->signature == E1000_IAMT_SIGNATURE) &&
       
  6224                     checksum == e1000_calculate_mng_checksum((char *)buffer,
       
  6225                                                E1000_MNG_DHCP_COOKIE_LENGTH)) {
       
  6226                     if (hdr->status &
       
  6227                         E1000_MNG_DHCP_COOKIE_STATUS_PARSING_SUPPORT)
       
  6228                         tx_filter = TRUE;
       
  6229                 } else
       
  6230                     tx_filter = TRUE;
       
  6231             } else
       
  6232                 tx_filter = TRUE;
       
  6233         }
       
  6234     }
       
  6235 
       
  6236     hw->tx_pkt_filtering = tx_filter;
       
  6237     return tx_filter;
       
  6238 }
       
  6239 
       
  6240 /******************************************************************************
       
  6241  * Verifies the hardware needs to allow ARPs to be processed by the host
       
  6242  *
       
  6243  * hw - Struct containing variables accessed by shared code
       
  6244  *
       
  6245  * returns: - TRUE/FALSE
       
  6246  *
       
  6247  *****************************************************************************/
       
  6248 uint32_t
       
  6249 e1000_enable_mng_pass_thru(struct e1000_hw *hw)
       
  6250 {
       
  6251     uint32_t manc;
       
  6252     uint32_t fwsm, factps;
       
  6253 
       
  6254     if (hw->asf_firmware_present) {
       
  6255         manc = E1000_READ_REG(hw, MANC);
       
  6256 
       
  6257         if (!(manc & E1000_MANC_RCV_TCO_EN) ||
       
  6258             !(manc & E1000_MANC_EN_MAC_ADDR_FILTER))
       
  6259             return FALSE;
       
  6260         if (e1000_arc_subsystem_valid(hw) == TRUE) {
       
  6261             fwsm = E1000_READ_REG(hw, FWSM);
       
  6262             factps = E1000_READ_REG(hw, FACTPS);
       
  6263 
       
  6264             if (((fwsm & E1000_FWSM_MODE_MASK) ==
       
  6265                 (e1000_mng_mode_pt << E1000_FWSM_MODE_SHIFT)) &&
       
  6266                 (factps & E1000_FACTPS_MNGCG))
       
  6267                 return TRUE;
       
  6268         } else
       
  6269             if ((manc & E1000_MANC_SMBUS_EN) && !(manc & E1000_MANC_ASF_EN))
       
  6270                 return TRUE;
       
  6271     }
       
  6272     return FALSE;
       
  6273 }
       
  6274 
       
  6275 static int32_t
       
  6276 e1000_polarity_reversal_workaround(struct e1000_hw *hw)
       
  6277 {
       
  6278     int32_t ret_val;
       
  6279     uint16_t mii_status_reg;
       
  6280     uint16_t i;
       
  6281 
       
  6282     /* Polarity reversal workaround for forced 10F/10H links. */
       
  6283 
       
  6284     /* Disable the transmitter on the PHY */
       
  6285 
       
  6286     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0019);
       
  6287     if(ret_val)
       
  6288         return ret_val;
       
  6289     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFFFF);
       
  6290     if(ret_val)
       
  6291         return ret_val;
       
  6292 
       
  6293     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0000);
       
  6294     if(ret_val)
       
  6295         return ret_val;
       
  6296 
       
  6297     /* This loop will early-out if the NO link condition has been met. */
       
  6298     for(i = PHY_FORCE_TIME; i > 0; i--) {
       
  6299         /* Read the MII Status Register and wait for Link Status bit
       
  6300          * to be clear.
       
  6301          */
       
  6302 
       
  6303         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
       
  6304         if(ret_val)
       
  6305             return ret_val;
       
  6306 
       
  6307         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
       
  6308         if(ret_val)
       
  6309             return ret_val;
       
  6310 
       
  6311         if((mii_status_reg & ~MII_SR_LINK_STATUS) == 0) break;
       
  6312         msec_delay_irq(100);
       
  6313     }
       
  6314 
       
  6315     /* Recommended delay time after link has been lost */
       
  6316     msec_delay_irq(1000);
       
  6317 
       
  6318     /* Now we will re-enable th transmitter on the PHY */
       
  6319 
       
  6320     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0019);
       
  6321     if(ret_val)
       
  6322         return ret_val;
       
  6323     msec_delay_irq(50);
       
  6324     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFFF0);
       
  6325     if(ret_val)
       
  6326         return ret_val;
       
  6327     msec_delay_irq(50);
       
  6328     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xFF00);
       
  6329     if(ret_val)
       
  6330         return ret_val;
       
  6331     msec_delay_irq(50);
       
  6332     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_GEN_CONTROL, 0x0000);
       
  6333     if(ret_val)
       
  6334         return ret_val;
       
  6335 
       
  6336     ret_val = e1000_write_phy_reg(hw, M88E1000_PHY_PAGE_SELECT, 0x0000);
       
  6337     if(ret_val)
       
  6338         return ret_val;
       
  6339 
       
  6340     /* This loop will early-out if the link condition has been met. */
       
  6341     for(i = PHY_FORCE_TIME; i > 0; i--) {
       
  6342         /* Read the MII Status Register and wait for Link Status bit
       
  6343          * to be set.
       
  6344          */
       
  6345 
       
  6346         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
       
  6347         if(ret_val)
       
  6348             return ret_val;
       
  6349 
       
  6350         ret_val = e1000_read_phy_reg(hw, PHY_STATUS, &mii_status_reg);
       
  6351         if(ret_val)
       
  6352             return ret_val;
       
  6353 
       
  6354         if(mii_status_reg & MII_SR_LINK_STATUS) break;
       
  6355         msec_delay_irq(100);
       
  6356     }
       
  6357     return E1000_SUCCESS;
       
  6358 }
       
  6359 
       
  6360 /***************************************************************************
       
  6361  *
       
  6362  * Disables PCI-Express master access.
       
  6363  *
       
  6364  * hw: Struct containing variables accessed by shared code
       
  6365  *
       
  6366  * returns: - none.
       
  6367  *
       
  6368  ***************************************************************************/
       
  6369 void
       
  6370 e1000_set_pci_express_master_disable(struct e1000_hw *hw)
       
  6371 {
       
  6372     uint32_t ctrl;
       
  6373 
       
  6374     DEBUGFUNC("e1000_set_pci_express_master_disable");
       
  6375 
       
  6376     if (hw->bus_type != e1000_bus_type_pci_express)
       
  6377         return;
       
  6378 
       
  6379     ctrl = E1000_READ_REG(hw, CTRL);
       
  6380     ctrl |= E1000_CTRL_GIO_MASTER_DISABLE;
       
  6381     E1000_WRITE_REG(hw, CTRL, ctrl);
       
  6382 }
       
  6383 
       
  6384 /***************************************************************************
       
  6385  *
       
  6386  * Enables PCI-Express master access.
       
  6387  *
       
  6388  * hw: Struct containing variables accessed by shared code
       
  6389  *
       
  6390  * returns: - none.
       
  6391  *
       
  6392  ***************************************************************************/
       
  6393 void
       
  6394 e1000_enable_pciex_master(struct e1000_hw *hw)
       
  6395 {
       
  6396     uint32_t ctrl;
       
  6397 
       
  6398     DEBUGFUNC("e1000_enable_pciex_master");
       
  6399 
       
  6400     if (hw->bus_type != e1000_bus_type_pci_express)
       
  6401         return;
       
  6402 
       
  6403     ctrl = E1000_READ_REG(hw, CTRL);
       
  6404     ctrl &= ~E1000_CTRL_GIO_MASTER_DISABLE;
       
  6405     E1000_WRITE_REG(hw, CTRL, ctrl);
       
  6406 }
       
  6407 
       
  6408 /*******************************************************************************
       
  6409  *
       
  6410  * Disables PCI-Express master access and verifies there are no pending requests
       
  6411  *
       
  6412  * hw: Struct containing variables accessed by shared code
       
  6413  *
       
  6414  * returns: - E1000_ERR_MASTER_REQUESTS_PENDING if master disable bit hasn't
       
  6415  *            caused the master requests to be disabled.
       
  6416  *            E1000_SUCCESS master requests disabled.
       
  6417  *
       
  6418  ******************************************************************************/
       
  6419 int32_t
       
  6420 e1000_disable_pciex_master(struct e1000_hw *hw)
       
  6421 {
       
  6422     int32_t timeout = MASTER_DISABLE_TIMEOUT;   /* 80ms */
       
  6423 
       
  6424     DEBUGFUNC("e1000_disable_pciex_master");
       
  6425 
       
  6426     if (hw->bus_type != e1000_bus_type_pci_express)
       
  6427         return E1000_SUCCESS;
       
  6428 
       
  6429     e1000_set_pci_express_master_disable(hw);
       
  6430 
       
  6431     while(timeout) {
       
  6432         if(!(E1000_READ_REG(hw, STATUS) & E1000_STATUS_GIO_MASTER_ENABLE))
       
  6433             break;
       
  6434         else
       
  6435             udelay(100);
       
  6436         timeout--;
       
  6437     }
       
  6438 
       
  6439     if(!timeout) {
       
  6440         DEBUGOUT("Master requests are pending.\n");
       
  6441         return -E1000_ERR_MASTER_REQUESTS_PENDING;
       
  6442     }
       
  6443 
       
  6444     return E1000_SUCCESS;
       
  6445 }
       
  6446 
       
  6447 /*******************************************************************************
       
  6448  *
       
  6449  * Check for EEPROM Auto Read bit done.
       
  6450  *
       
  6451  * hw: Struct containing variables accessed by shared code
       
  6452  *
       
  6453  * returns: - E1000_ERR_RESET if fail to reset MAC
       
  6454  *            E1000_SUCCESS at any other case.
       
  6455  *
       
  6456  ******************************************************************************/
       
  6457 int32_t
       
  6458 e1000_get_auto_rd_done(struct e1000_hw *hw)
       
  6459 {
       
  6460     int32_t timeout = AUTO_READ_DONE_TIMEOUT;
       
  6461 
       
  6462     DEBUGFUNC("e1000_get_auto_rd_done");
       
  6463 
       
  6464     switch (hw->mac_type) {
       
  6465     default:
       
  6466         msec_delay(5);
       
  6467         break;
       
  6468     case e1000_82573:
       
  6469         while(timeout) {
       
  6470             if (E1000_READ_REG(hw, EECD) & E1000_EECD_AUTO_RD) break;
       
  6471             else msec_delay(1);
       
  6472             timeout--;
       
  6473         }
       
  6474 
       
  6475         if(!timeout) {
       
  6476             DEBUGOUT("Auto read by HW from EEPROM has not completed.\n");
       
  6477             return -E1000_ERR_RESET;
       
  6478         }
       
  6479         break;
       
  6480     }
       
  6481 
       
  6482     return E1000_SUCCESS;
       
  6483 }
       
  6484 
       
  6485 /***************************************************************************
       
  6486  * Checks if the PHY configuration is done
       
  6487  *
       
  6488  * hw: Struct containing variables accessed by shared code
       
  6489  *
       
  6490  * returns: - E1000_ERR_RESET if fail to reset MAC
       
  6491  *            E1000_SUCCESS at any other case.
       
  6492  *
       
  6493  ***************************************************************************/
       
  6494 int32_t
       
  6495 e1000_get_phy_cfg_done(struct e1000_hw *hw)
       
  6496 {
       
  6497     DEBUGFUNC("e1000_get_phy_cfg_done");
       
  6498 
       
  6499     /* Simply wait for 10ms */
       
  6500     msec_delay(10);
       
  6501 
       
  6502     return E1000_SUCCESS;
       
  6503 }
       
  6504 
       
  6505 /***************************************************************************
       
  6506  *
       
  6507  * Using the combination of SMBI and SWESMBI semaphore bits when resetting
       
  6508  * adapter or Eeprom access.
       
  6509  *
       
  6510  * hw: Struct containing variables accessed by shared code
       
  6511  *
       
  6512  * returns: - E1000_ERR_EEPROM if fail to access EEPROM.
       
  6513  *            E1000_SUCCESS at any other case.
       
  6514  *
       
  6515  ***************************************************************************/
       
  6516 int32_t
       
  6517 e1000_get_hw_eeprom_semaphore(struct e1000_hw *hw)
       
  6518 {
       
  6519     int32_t timeout;
       
  6520     uint32_t swsm;
       
  6521 
       
  6522     DEBUGFUNC("e1000_get_hw_eeprom_semaphore");
       
  6523 
       
  6524     if(!hw->eeprom_semaphore_present)
       
  6525         return E1000_SUCCESS;
       
  6526 
       
  6527 
       
  6528     /* Get the FW semaphore. */
       
  6529     timeout = hw->eeprom.word_size + 1;
       
  6530     while(timeout) {
       
  6531         swsm = E1000_READ_REG(hw, SWSM);
       
  6532         swsm |= E1000_SWSM_SWESMBI;
       
  6533         E1000_WRITE_REG(hw, SWSM, swsm);
       
  6534         /* if we managed to set the bit we got the semaphore. */
       
  6535         swsm = E1000_READ_REG(hw, SWSM);
       
  6536         if(swsm & E1000_SWSM_SWESMBI)
       
  6537             break;
       
  6538 
       
  6539         udelay(50);
       
  6540         timeout--;
       
  6541     }
       
  6542 
       
  6543     if(!timeout) {
       
  6544         /* Release semaphores */
       
  6545         e1000_put_hw_eeprom_semaphore(hw);
       
  6546         DEBUGOUT("Driver can't access the Eeprom - SWESMBI bit is set.\n");
       
  6547         return -E1000_ERR_EEPROM;
       
  6548     }
       
  6549 
       
  6550     return E1000_SUCCESS;
       
  6551 }
       
  6552 
       
  6553 /***************************************************************************
       
  6554  * This function clears HW semaphore bits.
       
  6555  *
       
  6556  * hw: Struct containing variables accessed by shared code
       
  6557  *
       
  6558  * returns: - None.
       
  6559  *
       
  6560  ***************************************************************************/
       
  6561 void
       
  6562 e1000_put_hw_eeprom_semaphore(struct e1000_hw *hw)
       
  6563 {
       
  6564     uint32_t swsm;
       
  6565 
       
  6566     DEBUGFUNC("e1000_put_hw_eeprom_semaphore");
       
  6567 
       
  6568     if(!hw->eeprom_semaphore_present)
       
  6569         return;
       
  6570 
       
  6571     swsm = E1000_READ_REG(hw, SWSM);
       
  6572     /* Release both semaphores. */
       
  6573     swsm &= ~(E1000_SWSM_SMBI | E1000_SWSM_SWESMBI);
       
  6574     E1000_WRITE_REG(hw, SWSM, swsm);
       
  6575 }
       
  6576 
       
  6577 /******************************************************************************
       
  6578  * Checks if PHY reset is blocked due to SOL/IDER session, for example.
       
  6579  * Returning E1000_BLK_PHY_RESET isn't necessarily an error.  But it's up to
       
  6580  * the caller to figure out how to deal with it.
       
  6581  *
       
  6582  * hw - Struct containing variables accessed by shared code
       
  6583  *
       
  6584  * returns: - E1000_BLK_PHY_RESET
       
  6585  *            E1000_SUCCESS
       
  6586  *
       
  6587  *****************************************************************************/
       
  6588 int32_t
       
  6589 e1000_check_phy_reset_block(struct e1000_hw *hw)
       
  6590 {
       
  6591     uint32_t manc = 0;
       
  6592     if(hw->mac_type > e1000_82547_rev_2)
       
  6593         manc = E1000_READ_REG(hw, MANC);
       
  6594     return (manc & E1000_MANC_BLK_PHY_RST_ON_IDE) ?
       
  6595 	    E1000_BLK_PHY_RESET : E1000_SUCCESS;
       
  6596 }
       
  6597 
       
  6598 uint8_t
       
  6599 e1000_arc_subsystem_valid(struct e1000_hw *hw)
       
  6600 {
       
  6601     uint32_t fwsm;
       
  6602 
       
  6603     /* On 8257x silicon, registers in the range of 0x8800 - 0x8FFC
       
  6604      * may not be provided a DMA clock when no manageability features are
       
  6605      * enabled.  We do not want to perform any reads/writes to these registers
       
  6606      * if this is the case.  We read FWSM to determine the manageability mode.
       
  6607      */
       
  6608     switch (hw->mac_type) {
       
  6609     case e1000_82573:
       
  6610         fwsm = E1000_READ_REG(hw, FWSM);
       
  6611         if((fwsm & E1000_FWSM_MODE_MASK) != 0)
       
  6612             return TRUE;
       
  6613         break;
       
  6614     default:
       
  6615         break;
       
  6616     }
       
  6617     return FALSE;
       
  6618 }
       
  6619 
       
  6620 
       
  6621