Author: jfv
Date: Mon Mar  4 23:07:40 2013
New Revision: 247822
URL: http://svnweb.freebsd.org/changeset/base/247822

Log:
  First, sync to internal shared code, and then
  
  Fixes:
        - flow control - don't override user value on re-init
        - fix to make 1G optics work correctly
        - change to interrupt enabling - some bits were incorrect
          for certain hardware.
        - certain stats fixes, remove a duplicate increment of
          ierror, thanks to Scott Long for pointing these out.
        - shared code link interface changed, requiring some
          core code changes to accomodate this.
        - add an m_adj() to ETHER_ALIGN on the recieve side, this
          was requested by Mike Karels, thanks Mike.
        - Multicast code corrections also thanks to Mike Karels.

Modified:
  head/sys/dev/ixgbe/LICENSE
  head/sys/dev/ixgbe/ixgbe.c
  head/sys/dev/ixgbe/ixgbe_82598.c
  head/sys/dev/ixgbe/ixgbe_82599.c
  head/sys/dev/ixgbe/ixgbe_82599.h
  head/sys/dev/ixgbe/ixgbe_api.c
  head/sys/dev/ixgbe/ixgbe_api.h
  head/sys/dev/ixgbe/ixgbe_common.c
  head/sys/dev/ixgbe/ixgbe_common.h
  head/sys/dev/ixgbe/ixgbe_mbx.h
  head/sys/dev/ixgbe/ixgbe_osdep.h
  head/sys/dev/ixgbe/ixgbe_phy.c
  head/sys/dev/ixgbe/ixgbe_phy.h
  head/sys/dev/ixgbe/ixgbe_type.h
  head/sys/dev/ixgbe/ixgbe_vf.c
  head/sys/dev/ixgbe/ixgbe_vf.h
  head/sys/dev/ixgbe/ixgbe_x540.c
  head/sys/dev/ixgbe/ixgbe_x540.h
  head/sys/dev/ixgbe/ixv.c

Modified: head/sys/dev/ixgbe/LICENSE
==============================================================================
--- head/sys/dev/ixgbe/LICENSE  Mon Mar  4 22:41:49 2013        (r247821)
+++ head/sys/dev/ixgbe/LICENSE  Mon Mar  4 23:07:40 2013        (r247822)
@@ -1,6 +1,6 @@
 /******************************************************************************
 
-  Copyright (c) 2001-2011, Intel Corporation 
+  Copyright (c) 2001-2013, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 

Modified: head/sys/dev/ixgbe/ixgbe.c
==============================================================================
--- head/sys/dev/ixgbe/ixgbe.c  Mon Mar  4 22:41:49 2013        (r247821)
+++ head/sys/dev/ixgbe/ixgbe.c  Mon Mar  4 23:07:40 2013        (r247822)
@@ -1,6 +1,6 @@
 /******************************************************************************
 
-  Copyright (c) 2001-2012, Intel Corporation 
+  Copyright (c) 2001-2013, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 
@@ -47,7 +47,7 @@ int             ixgbe_display_debug_stat
 /*********************************************************************
  *  Driver version
  *********************************************************************/
-char ixgbe_driver_version[] = "2.5.0";
+char ixgbe_driver_version[] = "2.5.7 - HEAD";
 
 /*********************************************************************
  *  PCI Device ID Table
@@ -83,7 +83,7 @@ static ixgbe_vendor_info_t ixgbe_vendor_
        {IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_SFP_SF2, 0, 0, 0},
        {IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_SFP_FCOE, 0, 0, 0},
        {IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599EN_SFP, 0, 0, 0},
-       {IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_X540T1, 0, 0, 0},
+       {IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_SFP_SF_QP, 0, 0, 0},
        {IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_X540T, 0, 0, 0},
        /* required last entry */
        {0, 0, 0, 0, 0}
@@ -216,7 +216,6 @@ static device_method_t ixgbe_methods[] =
        DEVMETHOD(device_attach, ixgbe_attach),
        DEVMETHOD(device_detach, ixgbe_detach),
        DEVMETHOD(device_shutdown, ixgbe_shutdown),
-
        DEVMETHOD_END
 };
 
@@ -596,6 +595,9 @@ ixgbe_attach(device_t dev)
                    "PCIE, or x4 PCIE 2 slot is required.\n");
         }
 
+       /* Set an initial default flow control value */
+       adapter->fc =  ixgbe_fc_full;
+
        /* let hardware know driver is loaded */
        ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT);
        ctrl_ext |= IXGBE_CTRL_EXT_DRV_LOAD;
@@ -1310,7 +1312,7 @@ ixgbe_init_locked(struct adapter *adapte
                        tmp = IXGBE_LOW_DV(frame);
                hw->fc.low_water[0] = IXGBE_BT2KB(tmp);
                
-               adapter->fc = hw->fc.requested_mode = ixgbe_fc_full;
+               hw->fc.requested_mode = adapter->fc;
                hw->fc.pause_time = IXGBE_FC_PAUSE;
                hw->fc.send_xon = TRUE;
        }
@@ -1680,7 +1682,7 @@ ixgbe_media_status(struct ifnet * ifp, s
                        ifmr->ifm_active |= IFM_100_TX | IFM_FDX;
                        break;
                case IXGBE_LINK_SPEED_1GB_FULL:
-                       ifmr->ifm_active |= adapter->optics | IFM_FDX;
+                       ifmr->ifm_active |= IFM_1000_SX | IFM_FDX;
                        break;
                case IXGBE_LINK_SPEED_10GB_FULL:
                        ifmr->ifm_active |= adapter->optics | IFM_FDX;
@@ -1932,18 +1934,6 @@ ixgbe_set_multi(struct adapter *adapter)
        bzero(mta, sizeof(u8) * IXGBE_ETH_LENGTH_OF_ADDRESS *
            MAX_NUM_MULTICAST_ADDRESSES);
 
-       fctrl = IXGBE_READ_REG(&adapter->hw, IXGBE_FCTRL);
-       fctrl |= (IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
-       if (ifp->if_flags & IFF_PROMISC)
-               fctrl |= (IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
-       else if (ifp->if_flags & IFF_ALLMULTI) {
-               fctrl |= IXGBE_FCTRL_MPE;
-               fctrl &= ~IXGBE_FCTRL_UPE;
-       } else
-               fctrl &= ~(IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
-       
-       IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCTRL, fctrl);
-
 #if __FreeBSD_version < 800000
        IF_ADDR_LOCK(ifp);
 #else
@@ -1952,6 +1942,8 @@ ixgbe_set_multi(struct adapter *adapter)
        TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
                if (ifma->ifma_addr->sa_family != AF_LINK)
                        continue;
+               if (mcnt == MAX_NUM_MULTICAST_ADDRESSES)
+                       break;
                bcopy(LLADDR((struct sockaddr_dl *) ifma->ifma_addr),
                    &mta[mcnt * IXGBE_ETH_LENGTH_OF_ADDRESS],
                    IXGBE_ETH_LENGTH_OF_ADDRESS);
@@ -1963,9 +1955,24 @@ ixgbe_set_multi(struct adapter *adapter)
        if_maddr_runlock(ifp);
 #endif
 
-       update_ptr = mta;
-       ixgbe_update_mc_addr_list(&adapter->hw,
-           update_ptr, mcnt, ixgbe_mc_array_itr, TRUE);
+       fctrl = IXGBE_READ_REG(&adapter->hw, IXGBE_FCTRL);
+       fctrl |= (IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
+       if (ifp->if_flags & IFF_PROMISC)
+               fctrl |= (IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
+       else if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES ||
+           ifp->if_flags & IFF_ALLMULTI) {
+               fctrl |= IXGBE_FCTRL_MPE;
+               fctrl &= ~IXGBE_FCTRL_UPE;
+       } else
+               fctrl &= ~(IXGBE_FCTRL_UPE | IXGBE_FCTRL_MPE);
+       
+       IXGBE_WRITE_REG(&adapter->hw, IXGBE_FCTRL, fctrl);
+
+       if (mcnt < MAX_NUM_MULTICAST_ADDRESSES) {
+               update_ptr = mta;
+               ixgbe_update_mc_addr_list(&adapter->hw,
+                   update_ptr, mcnt, ixgbe_mc_array_itr, TRUE);
+       }
 
        return;
 }
@@ -2172,7 +2179,7 @@ ixgbe_setup_optics(struct adapter *adapt
 {
        struct ixgbe_hw *hw = &adapter->hw;
        int             layer;
-       
+
        layer = ixgbe_get_supported_physical_layer(hw);
 
        if (layer & IXGBE_PHYSICAL_LAYER_10GBASE_T) {
@@ -2651,7 +2658,7 @@ ixgbe_config_link(struct adapter *adapte
                        taskqueue_enqueue(adapter->tq, &adapter->mod_task);
        } else {
                if (hw->mac.ops.check_link)
-                       err = ixgbe_check_link(hw, &autoneg,
+                       err = ixgbe_check_link(hw, &adapter->link_speed,
                            &adapter->link_up, FALSE);
                if (err)
                        goto out;
@@ -2662,8 +2669,8 @@ ixgbe_config_link(struct adapter *adapte
                if (err)
                        goto out;
                if (hw->mac.ops.setup_link)
-                       err = hw->mac.ops.setup_link(hw, autoneg,
-                           negotiate, adapter->link_up);
+                       err = hw->mac.ops.setup_link(hw,
+                           autoneg, adapter->link_up);
        }
 out:
        return;
@@ -3713,6 +3720,8 @@ ixgbe_refresh_mbufs(struct rx_ring *rxr,
                            M_PKTHDR, rxr->mbuf_sz);
                        if (mp == NULL)
                                goto update;
+                       if (adapter->max_frame_size <= (MCLBYTES - ETHER_ALIGN))
+                               m_adj(mp, ETHER_ALIGN);
                } else
                        mp = rxbuf->buf;
 
@@ -4408,7 +4417,6 @@ ixgbe_rxeof(struct ix_queue *que)
                /* Make sure bad packets are discarded */
                if (((staterr & IXGBE_RXDADV_ERR_FRAME_ERR_MASK) != 0) ||
                    (rxr->discard)) {
-                       ifp->if_ierrors++;
                        rxr->rx_discarded++;
                        if (eop)
                                rxr->discard = FALSE;
@@ -4734,14 +4742,25 @@ ixgbe_enable_intr(struct adapter *adapte
        /* Enable Fan Failure detection */
        if (hw->device_id == IXGBE_DEV_ID_82598AT)
                    mask |= IXGBE_EIMS_GPI_SDP1;
-       else {
-                   mask |= IXGBE_EIMS_ECC;
-                   mask |= IXGBE_EIMS_GPI_SDP0;
-                   mask |= IXGBE_EIMS_GPI_SDP1;
-                   mask |= IXGBE_EIMS_GPI_SDP2;
+
+       switch (adapter->hw.mac.type) {
+               case ixgbe_mac_82599EB:
+                       mask |= IXGBE_EIMS_ECC;
+                       mask |= IXGBE_EIMS_GPI_SDP0;
+                       mask |= IXGBE_EIMS_GPI_SDP1;
+                       mask |= IXGBE_EIMS_GPI_SDP2;
+#ifdef IXGBE_FDIR
+                       mask |= IXGBE_EIMS_FLOW_DIR;
+#endif
+                       break;
+               case ixgbe_mac_X540:
+                       mask |= IXGBE_EIMS_ECC;
 #ifdef IXGBE_FDIR
-                   mask |= IXGBE_EIMS_FLOW_DIR;
+                       mask |= IXGBE_EIMS_FLOW_DIR;
 #endif
+               /* falls through */
+               default:
+                       break;
        }
 
        IXGBE_WRITE_REG(hw, IXGBE_EIMS, mask);
@@ -4969,7 +4988,7 @@ ixgbe_handle_msf(void *context, int pend
        if ((!autoneg) && (hw->mac.ops.get_link_capabilities))
                hw->mac.ops.get_link_capabilities(hw, &autoneg, &negotiate);
        if (hw->mac.ops.setup_link)
-               hw->mac.ops.setup_link(hw, autoneg, negotiate, TRUE);
+               hw->mac.ops.setup_link(hw, autoneg, TRUE);
        return;
 }
 
@@ -5013,6 +5032,11 @@ ixgbe_update_stats_counters(struct adapt
        adapter->stats.errbc += IXGBE_READ_REG(hw, IXGBE_ERRBC);
        adapter->stats.mspdc += IXGBE_READ_REG(hw, IXGBE_MSPDC);
 
+       /*
+       ** Note: these are for the 8 possible traffic classes,
+       **       which in current implementation is unused,
+       **       therefore only 0 should read real data.
+       */
        for (int i = 0; i < 8; i++) {
                u32 mp;
                mp = IXGBE_READ_REG(hw, IXGBE_MPC(i));
@@ -5022,13 +5046,20 @@ ixgbe_update_stats_counters(struct adapt
                adapter->stats.mpc[i] += mp;
                /* Running comprehensive total for stats display */
                total_missed_rx += adapter->stats.mpc[i];
-               if (hw->mac.type == ixgbe_mac_82598EB)
+               if (hw->mac.type == ixgbe_mac_82598EB) {
                        adapter->stats.rnbc[i] +=
                            IXGBE_READ_REG(hw, IXGBE_RNBC(i));
+                       adapter->stats.qbtc[i] +=
+                           IXGBE_READ_REG(hw, IXGBE_QBTC(i));
+                       adapter->stats.qbrc[i] +=
+                           IXGBE_READ_REG(hw, IXGBE_QBRC(i));
+                       adapter->stats.pxonrxc[i] +=
+                           IXGBE_READ_REG(hw, IXGBE_PXONRXC(i));
+               } else
+                       adapter->stats.pxonrxc[i] +=
+                           IXGBE_READ_REG(hw, IXGBE_PXONRXCNT(i));
                adapter->stats.pxontxc[i] +=
                    IXGBE_READ_REG(hw, IXGBE_PXONTXC(i));
-               adapter->stats.pxonrxc[i] +=
-                   IXGBE_READ_REG(hw, IXGBE_PXONRXC(i));
                adapter->stats.pxofftxc[i] +=
                    IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i));
                adapter->stats.pxoffrxc[i] +=
@@ -5039,12 +5070,6 @@ ixgbe_update_stats_counters(struct adapt
        for (int i = 0; i < 16; i++) {
                adapter->stats.qprc[i] += IXGBE_READ_REG(hw, IXGBE_QPRC(i));
                adapter->stats.qptc[i] += IXGBE_READ_REG(hw, IXGBE_QPTC(i));
-               adapter->stats.qbrc[i] += IXGBE_READ_REG(hw, IXGBE_QBRC(i));
-               adapter->stats.qbrc[i] += 
-                   ((u64)IXGBE_READ_REG(hw, IXGBE_QBRC(i)) << 32);
-               adapter->stats.qbtc[i] += IXGBE_READ_REG(hw, IXGBE_QBTC(i));
-               adapter->stats.qbtc[i] +=
-                   ((u64)IXGBE_READ_REG(hw, IXGBE_QBTC(i)) << 32);
                adapter->stats.qprdc[i] += IXGBE_READ_REG(hw, IXGBE_QPRDC(i));
        }
        adapter->stats.mlfc += IXGBE_READ_REG(hw, IXGBE_MLFC);
@@ -5141,8 +5166,8 @@ ixgbe_update_stats_counters(struct adapt
        ifp->if_collisions = 0;
 
        /* Rx Errors */
-       ifp->if_ierrors = total_missed_rx + adapter->stats.crcerrs +
-               adapter->stats.rlec;
+       ifp->if_iqdrops = total_missed_rx;
+       ifp->if_ierrors = adapter->stats.crcerrs + adapter->stats.rlec;
 }
 
 /** ixgbe_sysctl_tdh_handler - Handler function
@@ -5528,10 +5553,13 @@ ixgbe_set_flowcntl(SYSCTL_HANDLER_ARGS)
                                ixgbe_disable_rx_drop(adapter);
                        break;
                case ixgbe_fc_none:
-               default:
                        adapter->hw.fc.requested_mode = ixgbe_fc_none;
                        if (adapter->num_queues > 1)
                                ixgbe_enable_rx_drop(adapter);
+                       break;
+               default:
+                       adapter->fc = last;
+                       return (EINVAL);
        }
        /* Don't autoneg if forcing a value */
        adapter->hw.fc.disable_fc_autoneg = TRUE;
@@ -5560,7 +5588,7 @@ ixgbe_set_advertise(SYSCTL_HANDLER_ARGS)
        last = adapter->advertise;
 
        error = sysctl_handle_int(oidp, &adapter->advertise, 0, req);
-       if ((error) || (adapter->advertise == -1))
+       if ((error) || (req->newptr == NULL))
                return (error);
 
        if (adapter->advertise == last) /* no change */
@@ -5568,11 +5596,11 @@ ixgbe_set_advertise(SYSCTL_HANDLER_ARGS)
 
        if (!((hw->phy.media_type == ixgbe_media_type_copper) ||
             (hw->phy.multispeed_fiber)))
-               return (error);
+               return (EINVAL);
 
        if ((adapter->advertise == 2) && (hw->mac.type != ixgbe_mac_X540)) {
                device_printf(dev, "Set Advertise: 100Mb on X540 only\n");
-               return (error);
+               return (EINVAL);
        }
 
        if (adapter->advertise == 1)
@@ -5582,11 +5610,13 @@ ixgbe_set_advertise(SYSCTL_HANDLER_ARGS)
        else if (adapter->advertise == 3)
                 speed = IXGBE_LINK_SPEED_1GB_FULL |
                        IXGBE_LINK_SPEED_10GB_FULL;
-       else /* bogus value */
-               return (error);
+       else {  /* bogus value */
+               adapter->advertise = last;
+               return (EINVAL);
+       }
 
        hw->mac.autotry_restart = TRUE;
-       hw->mac.ops.setup_link(hw, speed, TRUE, TRUE);
+       hw->mac.ops.setup_link(hw, speed, TRUE);
 
        return (error);
 }

Modified: head/sys/dev/ixgbe/ixgbe_82598.c
==============================================================================
--- head/sys/dev/ixgbe/ixgbe_82598.c    Mon Mar  4 22:41:49 2013        
(r247821)
+++ head/sys/dev/ixgbe/ixgbe_82598.c    Mon Mar  4 23:07:40 2013        
(r247822)
@@ -1,6 +1,6 @@
 /******************************************************************************
 
-  Copyright (c) 2001-2012, Intel Corporation 
+  Copyright (c) 2001-2013, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 
@@ -49,18 +49,17 @@ static s32 ixgbe_check_mac_link_82598(st
                                      bool link_up_wait_to_complete);
 static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
                                      ixgbe_link_speed speed,
-                                     bool autoneg,
                                      bool autoneg_wait_to_complete);
 static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
                                         ixgbe_link_speed speed,
-                                        bool autoneg,
                                         bool autoneg_wait_to_complete);
 static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw);
 static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
 static s32 ixgbe_clear_vfta_82598(struct ixgbe_hw *hw);
 static void ixgbe_set_rxpba_82598(struct ixgbe_hw *hw, int num_pb,
                                  u32 headroom, int strategy);
-
+static s32 ixgbe_read_i2c_sff8472_82598(struct ixgbe_hw *hw, u8 byte_offset,
+                                       u8 *sff8472_data);
 /**
  *  ixgbe_set_pcie_completion_timeout - set pci-e completion timeout
  *  @hw: pointer to the HW structure
@@ -155,6 +154,7 @@ s32 ixgbe_init_ops_82598(struct ixgbe_hw
 
        /* SFP+ Module */
        phy->ops.read_i2c_eeprom = &ixgbe_read_i2c_eeprom_82598;
+       phy->ops.read_i2c_sff8472 = &ixgbe_read_i2c_sff8472_82598;
 
        /* Link */
        mac->ops.check_link = &ixgbe_check_mac_link_82598;
@@ -712,15 +712,15 @@ out:
  *  ixgbe_setup_mac_link_82598 - Set MAC link speed
  *  @hw: pointer to hardware structure
  *  @speed: new link speed
- *  @autoneg: TRUE if autonegotiation enabled
  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
  *
  *  Set the link speed in the AUTOC register and restarts link.
  **/
 static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
-                                     ixgbe_link_speed speed, bool autoneg,
+                                     ixgbe_link_speed speed,
                                      bool autoneg_wait_to_complete)
 {
+       bool autoneg = FALSE;
        s32 status = IXGBE_SUCCESS;
        ixgbe_link_speed link_capabilities = IXGBE_LINK_SPEED_UNKNOWN;
        u32 curr_autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
@@ -766,14 +766,12 @@ static s32 ixgbe_setup_mac_link_82598(st
  *  ixgbe_setup_copper_link_82598 - Set the PHY autoneg advertised field
  *  @hw: pointer to hardware structure
  *  @speed: new link speed
- *  @autoneg: TRUE if autonegotiation enabled
  *  @autoneg_wait_to_complete: TRUE if waiting is needed to complete
  *
  *  Sets the link speed in the AUTOC register in the MAC and restarts link.
  **/
 static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
                                         ixgbe_link_speed speed,
-                                        bool autoneg,
                                         bool autoneg_wait_to_complete)
 {
        s32 status;
@@ -781,7 +779,7 @@ static s32 ixgbe_setup_copper_link_82598
        DEBUGFUNC("ixgbe_setup_copper_link_82598");
 
        /* Setup the PHY according to input speed */
-       status = hw->phy.ops.setup_link_speed(hw, speed, autoneg,
+       status = hw->phy.ops.setup_link_speed(hw, speed,
                                              autoneg_wait_to_complete);
        /* Set up MAC */
        ixgbe_start_mac_link_82598(hw, autoneg_wait_to_complete);
@@ -1102,15 +1100,16 @@ s32 ixgbe_write_analog_reg8_82598(struct
 }
 
 /**
- *  ixgbe_read_i2c_eeprom_82598 - Reads 8 bit word over I2C interface.
+ *  ixgbe_read_i2c_phy_82598 - Reads 8 bit word over I2C interface.
  *  @hw: pointer to hardware structure
- *  @byte_offset: EEPROM byte offset to read
+ *  @dev_addr: address to read from
+ *  @byte_offset: byte offset to read from dev_addr
  *  @eeprom_data: value read
  *
  *  Performs 8 byte read operation to SFP module's EEPROM over I2C interface.
  **/
-s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
-                               u8 *eeprom_data)
+static s32 ixgbe_read_i2c_phy_82598(struct ixgbe_hw *hw, u8 dev_addr,
+                                   u8 byte_offset, u8 *eeprom_data)
 {
        s32 status = IXGBE_SUCCESS;
        u16 sfp_addr = 0;
@@ -1118,7 +1117,7 @@ s32 ixgbe_read_i2c_eeprom_82598(struct i
        u16 sfp_stat = 0;
        u32 i;
 
-       DEBUGFUNC("ixgbe_read_i2c_eeprom_82598");
+       DEBUGFUNC("ixgbe_read_i2c_phy_82598");
 
        if (hw->phy.type == ixgbe_phy_nl) {
                /*
@@ -1126,7 +1125,7 @@ s32 ixgbe_read_i2c_eeprom_82598(struct i
                 * 0xC30D. These registers are used to talk to the SFP+
                 * module's EEPROM through the SDA/SCL (I2C) interface.
                 */
-               sfp_addr = (IXGBE_I2C_EEPROM_DEV_ADDR << 8) + byte_offset;
+               sfp_addr = (dev_addr << 8) + byte_offset;
                sfp_addr = (sfp_addr | IXGBE_I2C_EEPROM_READ_MASK);
                hw->phy.ops.write_reg(hw,
                                      IXGBE_MDIO_PMA_PMD_SDA_SCL_ADDR,
@@ -1158,7 +1157,6 @@ s32 ixgbe_read_i2c_eeprom_82598(struct i
                *eeprom_data = (u8)(sfp_data >> 8);
        } else {
                status = IXGBE_ERR_PHY;
-               goto out;
        }
 
 out:
@@ -1166,6 +1164,36 @@ out:
 }
 
 /**
+ *  ixgbe_read_i2c_eeprom_82598 - Reads 8 bit word over I2C interface.
+ *  @hw: pointer to hardware structure
+ *  @byte_offset: EEPROM byte offset to read
+ *  @eeprom_data: value read
+ *
+ *  Performs 8 byte read operation to SFP module's EEPROM over I2C interface.
+ **/
+s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
+                               u8 *eeprom_data)
+{
+       return ixgbe_read_i2c_phy_82598(hw, IXGBE_I2C_EEPROM_DEV_ADDR,
+                                       byte_offset, eeprom_data);
+}
+
+/**
+ *  ixgbe_read_i2c_sff8472_82598 - Reads 8 bit word over I2C interface.
+ *  @hw: pointer to hardware structure
+ *  @byte_offset: byte offset at address 0xA2
+ *  @eeprom_data: value read
+ *
+ *  Performs 8 byte read operation to SFP module's SFF-8472 data over I2C
+ **/
+static s32 ixgbe_read_i2c_sff8472_82598(struct ixgbe_hw *hw, u8 byte_offset,
+                                       u8 *sff8472_data)
+{
+       return ixgbe_read_i2c_phy_82598(hw, IXGBE_I2C_EEPROM_DEV_ADDR2,
+                                       byte_offset, sff8472_data);
+}
+
+/**
  *  ixgbe_get_supported_physical_layer_82598 - Returns physical layer type
  *  @hw: pointer to hardware structure
  *

Modified: head/sys/dev/ixgbe/ixgbe_82599.c
==============================================================================
--- head/sys/dev/ixgbe/ixgbe_82599.c    Mon Mar  4 22:41:49 2013        
(r247821)
+++ head/sys/dev/ixgbe/ixgbe_82599.c    Mon Mar  4 23:07:40 2013        
(r247822)
@@ -1,6 +1,6 @@
 /******************************************************************************
 
-  Copyright (c) 2001-2012, Intel Corporation 
+  Copyright (c) 2001-2013, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 
@@ -40,7 +40,6 @@
 
 static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
                                         ixgbe_link_speed speed,
-                                        bool autoneg,
                                         bool autoneg_wait_to_complete);
 static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw);
 static s32 ixgbe_read_eeprom_82599(struct ixgbe_hw *hw,
@@ -48,14 +47,37 @@ static s32 ixgbe_read_eeprom_82599(struc
 static s32 ixgbe_read_eeprom_buffer_82599(struct ixgbe_hw *hw, u16 offset,
                                          u16 words, u16 *data);
 
+static bool ixgbe_mng_enabled(struct ixgbe_hw *hw)
+{
+       u32 fwsm, manc, factps;
+
+       fwsm = IXGBE_READ_REG(hw, IXGBE_FWSM);
+       if ((fwsm & IXGBE_FWSM_MODE_MASK) != IXGBE_FWSM_FW_MODE_PT)
+               return FALSE;
+
+       manc = IXGBE_READ_REG(hw, IXGBE_MANC);
+       if (!(manc & IXGBE_MANC_RCV_TCO_EN))
+               return FALSE;
+
+       factps = IXGBE_READ_REG(hw, IXGBE_FACTPS);
+       if (factps & IXGBE_FACTPS_MNGCG)
+               return FALSE;
+
+       return TRUE;
+}
+
 void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw)
 {
        struct ixgbe_mac_info *mac = &hw->mac;
 
        DEBUGFUNC("ixgbe_init_mac_link_ops_82599");
 
-       /* enable the laser control functions for SFP+ fiber */
-       if (mac->ops.get_media_type(hw) == ixgbe_media_type_fiber) {
+       /*
+        * enable the laser control functions for SFP+ fiber
+        * and MNG not enabled
+        */
+       if ((mac->ops.get_media_type(hw) == ixgbe_media_type_fiber) &&
+           !(ixgbe_mng_enabled(hw))) {
                mac->ops.disable_tx_laser =
                                       &ixgbe_disable_tx_laser_multispeed_fiber;
                mac->ops.enable_tx_laser =
@@ -135,9 +157,8 @@ init_phy_ops_out:
 s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw)
 {
        s32 ret_val = IXGBE_SUCCESS;
-       u32 reg_anlp1 = 0;
-       u32 i = 0;
        u16 list_offset, data_offset, data_value;
+       bool got_lock = FALSE;
 
        DEBUGFUNC("ixgbe_setup_sfp_modules_82599");
 
@@ -171,28 +192,39 @@ s32 ixgbe_setup_sfp_modules_82599(struct
                /* Delay obtaining semaphore again to allow FW access */
                msec_delay(hw->eeprom.semaphore_delay);
 
-               /* Now restart DSP by setting Restart_AN and clearing LMS */
-               IXGBE_WRITE_REG(hw, IXGBE_AUTOC, ((IXGBE_READ_REG(hw,
-                               IXGBE_AUTOC) & ~IXGBE_AUTOC_LMS_MASK) |
-                               IXGBE_AUTOC_AN_RESTART));
-
-               /* Wait for AN to leave state 0 */
-               for (i = 0; i < 10; i++) {
-                       msec_delay(4);
-                       reg_anlp1 = IXGBE_READ_REG(hw, IXGBE_ANLP1);
-                       if (reg_anlp1 & IXGBE_ANLP1_AN_STATE_MASK)
-                               break;
+               /* Need SW/FW semaphore around AUTOC writes if LESM on,
+                * likewise reset_pipeline requires lock as it also writes
+                * AUTOC.
+                */
+               if (ixgbe_verify_lesm_fw_enabled_82599(hw)) {
+                       ret_val = hw->mac.ops.acquire_swfw_sync(hw,
+                                                       IXGBE_GSSR_MAC_CSR_SM);
+                       if (ret_val != IXGBE_SUCCESS) {
+                               ret_val = IXGBE_ERR_SWFW_SYNC;
+                               goto setup_sfp_out;
+                       }
+
+                       got_lock = TRUE;
+               }
+
+               /* Restart DSP and set SFI mode */
+               IXGBE_WRITE_REG(hw, IXGBE_AUTOC, ((hw->mac.orig_autoc) |
+                               IXGBE_AUTOC_LMS_10G_SERIAL));
+               hw->mac.cached_autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
+               ret_val = ixgbe_reset_pipeline_82599(hw);
+
+               if (got_lock) {
+                       hw->mac.ops.release_swfw_sync(hw,
+                                                     IXGBE_GSSR_MAC_CSR_SM);
+                       got_lock = FALSE;
                }
-               if (!(reg_anlp1 & IXGBE_ANLP1_AN_STATE_MASK)) {
+
+               if (ret_val) {
                        DEBUGOUT("sfp module setup not complete\n");
                        ret_val = IXGBE_ERR_SFP_SETUP_NOT_COMPLETE;
                        goto setup_sfp_out;
                }
 
-               /* Restart DSP by setting Restart_AN and return to SFI mode */
-               IXGBE_WRITE_REG(hw, IXGBE_AUTOC, (IXGBE_READ_REG(hw,
-                               IXGBE_AUTOC) | IXGBE_AUTOC_LMS_10G_SERIAL |
-                               IXGBE_AUTOC_AN_RESTART));
        }
 
 setup_sfp_out:
@@ -216,7 +248,7 @@ s32 ixgbe_init_ops_82599(struct ixgbe_hw
 
        DEBUGFUNC("ixgbe_init_ops_82599");
 
-       ret_val = ixgbe_init_phy_ops_generic(hw);
+       ixgbe_init_phy_ops_generic(hw);
        ret_val = ixgbe_init_ops_generic(hw);
 
        /* PHY */
@@ -289,13 +321,13 @@ s32 ixgbe_init_ops_82599(struct ixgbe_hw
  *  ixgbe_get_link_capabilities_82599 - Determines link capabilities
  *  @hw: pointer to hardware structure
  *  @speed: pointer to link speed
- *  @negotiation: TRUE when autoneg or autotry is enabled
+ *  @autoneg: TRUE when autoneg or autotry is enabled
  *
  *  Determines the link capabilities by reading the AUTOC register.
  **/
 s32 ixgbe_get_link_capabilities_82599(struct ixgbe_hw *hw,
                                      ixgbe_link_speed *speed,
-                                     bool *negotiation)
+                                     bool *autoneg)
 {
        s32 status = IXGBE_SUCCESS;
        u32 autoc = 0;
@@ -309,7 +341,7 @@ s32 ixgbe_get_link_capabilities_82599(st
            hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
            hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1) {
                *speed = IXGBE_LINK_SPEED_1GB_FULL;
-               *negotiation = TRUE;
+               *autoneg = TRUE;
                goto out;
        }
 
@@ -326,22 +358,22 @@ s32 ixgbe_get_link_capabilities_82599(st
        switch (autoc & IXGBE_AUTOC_LMS_MASK) {
        case IXGBE_AUTOC_LMS_1G_LINK_NO_AN:
                *speed = IXGBE_LINK_SPEED_1GB_FULL;
-               *negotiation = FALSE;
+               *autoneg = FALSE;
                break;
 
        case IXGBE_AUTOC_LMS_10G_LINK_NO_AN:
                *speed = IXGBE_LINK_SPEED_10GB_FULL;
-               *negotiation = FALSE;
+               *autoneg = FALSE;
                break;
 
        case IXGBE_AUTOC_LMS_1G_AN:
                *speed = IXGBE_LINK_SPEED_1GB_FULL;
-               *negotiation = TRUE;
+               *autoneg = TRUE;
                break;
 
        case IXGBE_AUTOC_LMS_10G_SERIAL:
                *speed = IXGBE_LINK_SPEED_10GB_FULL;
-               *negotiation = FALSE;
+               *autoneg = FALSE;
                break;
 
        case IXGBE_AUTOC_LMS_KX4_KX_KR:
@@ -353,7 +385,7 @@ s32 ixgbe_get_link_capabilities_82599(st
                        *speed |= IXGBE_LINK_SPEED_10GB_FULL;
                if (autoc & IXGBE_AUTOC_KX_SUPP)
                        *speed |= IXGBE_LINK_SPEED_1GB_FULL;
-               *negotiation = TRUE;
+               *autoneg = TRUE;
                break;
 
        case IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII:
@@ -364,12 +396,12 @@ s32 ixgbe_get_link_capabilities_82599(st
                        *speed |= IXGBE_LINK_SPEED_10GB_FULL;
                if (autoc & IXGBE_AUTOC_KX_SUPP)
                        *speed |= IXGBE_LINK_SPEED_1GB_FULL;
-               *negotiation = TRUE;
+               *autoneg = TRUE;
                break;
 
        case IXGBE_AUTOC_LMS_SGMII_1G_100M:
                *speed = IXGBE_LINK_SPEED_1GB_FULL | IXGBE_LINK_SPEED_100_FULL;
-               *negotiation = FALSE;
+               *autoneg = FALSE;
                break;
 
        default:
@@ -381,7 +413,7 @@ s32 ixgbe_get_link_capabilities_82599(st
        if (hw->phy.multispeed_fiber) {
                *speed |= IXGBE_LINK_SPEED_10GB_FULL |
                          IXGBE_LINK_SPEED_1GB_FULL;
-               *negotiation = TRUE;
+               *autoneg = TRUE;
        }
 
 out:
@@ -424,6 +456,7 @@ enum ixgbe_media_type ixgbe_get_media_ty
        case IXGBE_DEV_ID_82599_SFP_FCOE:
        case IXGBE_DEV_ID_82599_SFP_EM:
        case IXGBE_DEV_ID_82599_SFP_SF2:
+       case IXGBE_DEV_ID_82599_SFP_SF_QP:
        case IXGBE_DEV_ID_82599EN_SFP:
                media_type = ixgbe_media_type_fiber;
                break;
@@ -433,6 +466,10 @@ enum ixgbe_media_type ixgbe_get_media_ty
        case IXGBE_DEV_ID_82599_T3_LOM:
                media_type = ixgbe_media_type_copper;
                break;
+       case IXGBE_DEV_ID_82599_BYPASS:
+               media_type = ixgbe_media_type_fiber_fixed;
+               hw->phy.multispeed_fiber = TRUE;
+               break;
        default:
                media_type = ixgbe_media_type_unknown;
                break;
@@ -456,17 +493,32 @@ s32 ixgbe_start_mac_link_82599(struct ix
        u32 links_reg;
        u32 i;
        s32 status = IXGBE_SUCCESS;
+       bool got_lock = FALSE;
 
        DEBUGFUNC("ixgbe_start_mac_link_82599");
 
 
+       /*  reset_pipeline requires us to hold this lock as it writes to
+        *  AUTOC.
+        */
+       if (ixgbe_verify_lesm_fw_enabled_82599(hw)) {
+               status = hw->mac.ops.acquire_swfw_sync(hw,
+                                                      IXGBE_GSSR_MAC_CSR_SM);
+               if (status != IXGBE_SUCCESS)
+                       goto out;
+
+               got_lock = TRUE;
+       }
+
        /* Restart link */
-       autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
-       autoc_reg |= IXGBE_AUTOC_AN_RESTART;
-       IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
+       ixgbe_reset_pipeline_82599(hw);
+
+       if (got_lock)
+               hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_MAC_CSR_SM);
 
        /* Only poll for autoneg to complete if specified to do so */
        if (autoneg_wait_to_complete) {
+               autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
                if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
                     IXGBE_AUTOC_LMS_KX4_KX_KR ||
                    (autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
@@ -490,6 +542,7 @@ s32 ixgbe_start_mac_link_82599(struct ix
        /* Add delay to filter out noises during initial link setup */
        msec_delay(50);
 
+out:
        return status;
 }
 
@@ -555,16 +608,84 @@ void ixgbe_flap_tx_laser_multispeed_fibe
 }
 
 /**
+ *  ixgbe_set_fiber_fixed_speed - Set module link speed for fixed fiber
+ *  @hw: pointer to hardware structure
+ *  @speed: link speed to set
+ *
+ *  We set the module speed differently for fixed fiber.  For other
+ *  multi-speed devices we don't have an error value so here if we
+ *  detect an error we just log it and exit.
+ */
+static void ixgbe_set_fiber_fixed_speed(struct ixgbe_hw *hw,
+                                       ixgbe_link_speed speed)
+{
+       s32 status;
+       u8 rs, eeprom_data;
+
+       switch (speed) {
+       case IXGBE_LINK_SPEED_10GB_FULL:
+               /* one bit mask same as setting on */
+               rs = IXGBE_SFF_SOFT_RS_SELECT_10G;
+               break;
+       case IXGBE_LINK_SPEED_1GB_FULL:
+               rs = IXGBE_SFF_SOFT_RS_SELECT_1G;
+               break;
+       default:
+               DEBUGOUT("Invalid fixed module speed\n");
+               return;
+       }
+
+       /* Set RS0 */
+       status = hw->phy.ops.read_i2c_byte(hw, IXGBE_SFF_SFF_8472_OSCB,
+                                          IXGBE_I2C_EEPROM_DEV_ADDR2,
+                                          &eeprom_data);
+       if (status) {
+               DEBUGOUT("Failed to read Rx Rate Select RS0\n");
+               goto out;
+       }
+
+       eeprom_data = (eeprom_data & ~IXGBE_SFF_SOFT_RS_SELECT_MASK) & rs;
+
+       status = hw->phy.ops.write_i2c_byte(hw, IXGBE_SFF_SFF_8472_OSCB,
+                                           IXGBE_I2C_EEPROM_DEV_ADDR2,
+                                           eeprom_data);
+       if (status) {
+               DEBUGOUT("Failed to write Rx Rate Select RS0\n");
+               goto out;
+       }
+
+       /* Set RS1 */
+       status = hw->phy.ops.read_i2c_byte(hw, IXGBE_SFF_SFF_8472_ESCB,
+                                          IXGBE_I2C_EEPROM_DEV_ADDR2,
+                                          &eeprom_data);
+       if (status) {
+               DEBUGOUT("Failed to read Rx Rate Select RS1\n");
+               goto out;
+       }
+
+       eeprom_data = (eeprom_data & ~IXGBE_SFF_SOFT_RS_SELECT_MASK) & rs;
+
+       status = hw->phy.ops.write_i2c_byte(hw, IXGBE_SFF_SFF_8472_ESCB,
+                                           IXGBE_I2C_EEPROM_DEV_ADDR2,
+                                           eeprom_data);
+       if (status) {
+               DEBUGOUT("Failed to write Rx Rate Select RS1\n");
+               goto out;
+       }
+out:
+       return;
+}
+
+/**
  *  ixgbe_setup_mac_link_multispeed_fiber - Set MAC link speed
  *  @hw: pointer to hardware structure
  *  @speed: new link speed
- *  @autoneg: TRUE if autonegotiation enabled
  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
  *
  *  Set the link speed in the AUTOC register and restarts link.
  **/
 s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
-                                    ixgbe_link_speed speed, bool autoneg,
+                                    ixgbe_link_speed speed,
                                     bool autoneg_wait_to_complete)
 {
        s32 status = IXGBE_SUCCESS;
@@ -573,13 +694,12 @@ s32 ixgbe_setup_mac_link_multispeed_fibe
        u32 speedcnt = 0;
        u32 esdp_reg = IXGBE_READ_REG(hw, IXGBE_ESDP);
        u32 i = 0;
-       bool link_up = FALSE;
-       bool negotiation;
+       bool autoneg, link_up = FALSE;
 
        DEBUGFUNC("ixgbe_setup_mac_link_multispeed_fiber");
 
        /* Mask off requested but non-supported speeds */
-       status = ixgbe_get_link_capabilities(hw, &link_speed, &negotiation);
+       status = ixgbe_get_link_capabilities(hw, &link_speed, &autoneg);
        if (status != IXGBE_SUCCESS)
                return status;
 
@@ -602,16 +722,20 @@ s32 ixgbe_setup_mac_link_multispeed_fibe
                        goto out;
 
                /* Set the module link speed */
-               esdp_reg |= (IXGBE_ESDP_SDP5_DIR | IXGBE_ESDP_SDP5);
-               IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
-               IXGBE_WRITE_FLUSH(hw);
+               if (hw->phy.media_type == ixgbe_media_type_fiber_fixed) {
+                       ixgbe_set_fiber_fixed_speed(hw,
+                                                   IXGBE_LINK_SPEED_10GB_FULL);
+               } else {
+                       esdp_reg |= (IXGBE_ESDP_SDP5_DIR | IXGBE_ESDP_SDP5);
+                       IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
+                       IXGBE_WRITE_FLUSH(hw);
+               }
 
                /* Allow module to change analog characteristics (1G->10G) */
                msec_delay(40);
 
                status = ixgbe_setup_mac_link_82599(hw,
                                                    IXGBE_LINK_SPEED_10GB_FULL,
-                                                   autoneg,
                                                    autoneg_wait_to_complete);
                if (status != IXGBE_SUCCESS)
                        return status;
@@ -653,17 +777,21 @@ s32 ixgbe_setup_mac_link_multispeed_fibe
                        goto out;
 
                /* Set the module link speed */
-               esdp_reg &= ~IXGBE_ESDP_SDP5;
-               esdp_reg |= IXGBE_ESDP_SDP5_DIR;
-               IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
-               IXGBE_WRITE_FLUSH(hw);
+               if (hw->phy.media_type == ixgbe_media_type_fiber_fixed) {
+                       ixgbe_set_fiber_fixed_speed(hw,
+                                                   IXGBE_LINK_SPEED_1GB_FULL);
+               } else {
+                       esdp_reg &= ~IXGBE_ESDP_SDP5;
+                       esdp_reg |= IXGBE_ESDP_SDP5_DIR;
+                       IXGBE_WRITE_REG(hw, IXGBE_ESDP, esdp_reg);
+                       IXGBE_WRITE_FLUSH(hw);
+               }
 
                /* Allow module to change analog characteristics (10G->1G) */
                msec_delay(40);
 
                status = ixgbe_setup_mac_link_82599(hw,
                                                    IXGBE_LINK_SPEED_1GB_FULL,
-                                                   autoneg,
                                                    autoneg_wait_to_complete);
                if (status != IXGBE_SUCCESS)
                        return status;
@@ -690,7 +818,7 @@ s32 ixgbe_setup_mac_link_multispeed_fibe
         */
        if (speedcnt > 1)
                status = ixgbe_setup_mac_link_multispeed_fiber(hw,
-                       highest_link_speed, autoneg, autoneg_wait_to_complete);
+                       highest_link_speed, autoneg_wait_to_complete);
 
 out:
        /* Set autoneg_advertised value based on input link speed */
@@ -709,13 +837,12 @@ out:
  *  ixgbe_setup_mac_link_smartspeed - Set MAC link speed using SmartSpeed
  *  @hw: pointer to hardware structure
  *  @speed: new link speed
- *  @autoneg: TRUE if autonegotiation enabled
  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
  *
  *  Implements the Intel SmartSpeed algorithm.
  **/
 s32 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
-                                   ixgbe_link_speed speed, bool autoneg,
+                                   ixgbe_link_speed speed,
                                    bool autoneg_wait_to_complete)
 {
        s32 status = IXGBE_SUCCESS;
@@ -748,7 +875,7 @@ s32 ixgbe_setup_mac_link_smartspeed(stru
        /* First, try to get link with full advertisement */
        hw->phy.smart_speed_active = FALSE;
        for (j = 0; j < IXGBE_SMARTSPEED_MAX_RETRIES; j++) {
-               status = ixgbe_setup_mac_link_82599(hw, speed, autoneg,
+               status = ixgbe_setup_mac_link_82599(hw, speed,
                                                    autoneg_wait_to_complete);
                if (status != IXGBE_SUCCESS)
                        goto out;
@@ -783,7 +910,7 @@ s32 ixgbe_setup_mac_link_smartspeed(stru
 
        /* Turn SmartSpeed on to disable KR support */
        hw->phy.smart_speed_active = TRUE;
-       status = ixgbe_setup_mac_link_82599(hw, speed, autoneg,
+       status = ixgbe_setup_mac_link_82599(hw, speed,
                                            autoneg_wait_to_complete);
        if (status != IXGBE_SUCCESS)
                goto out;
@@ -808,7 +935,7 @@ s32 ixgbe_setup_mac_link_smartspeed(stru
 
        /* We didn't get link.  Turn SmartSpeed back off. */
        hw->phy.smart_speed_active = FALSE;
-       status = ixgbe_setup_mac_link_82599(hw, speed, autoneg,
+       status = ixgbe_setup_mac_link_82599(hw, speed,
                                            autoneg_wait_to_complete);
 
 out:
@@ -822,32 +949,30 @@ out:
  *  ixgbe_setup_mac_link_82599 - Set MAC link speed
  *  @hw: pointer to hardware structure
  *  @speed: new link speed
- *  @autoneg: TRUE if autonegotiation enabled
  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
  *
  *  Set the link speed in the AUTOC register and restarts link.
  **/
 s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
-                              ixgbe_link_speed speed, bool autoneg,
+                              ixgbe_link_speed speed,
                               bool autoneg_wait_to_complete)
 {
+       bool autoneg = FALSE;

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to