root/dev/pci/ixgb_hw.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ixgb_mac_reset
  2. ixgb_adapter_stop
  3. ixgb_identify_xpak_vendor
  4. ixgb_identify_phy
  5. ixgb_init_hw
  6. ixgb_init_rx_addrs
  7. ixgb_mc_addr_list_update
  8. ixgb_hash_mc_addr
  9. ixgb_mta_set
  10. ixgb_rar_set
  11. ixgb_write_vfta
  12. ixgb_clear_vfta
  13. ixgb_setup_fc
  14. ixgb_read_phy_reg
  15. ixgb_write_phy_reg
  16. ixgb_check_for_link
  17. ixgb_check_for_bad_link
  18. ixgb_clear_hw_cntrs
  19. ixgb_led_on
  20. ixgb_led_off
  21. ixgb_get_bus_info
  22. mac_addr_valid
  23. ixgb_link_reset
  24. ixgb_optics_reset

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

/* [<][>][^][v][top][bottom][index][help] */