19ca4041bSJack F Vogel /****************************************************************************** 27282444bSPedro F. Giffuni SPDX-License-Identifier: BSD-3-Clause 313705f88SJack F Vogel 48eb6488eSEric Joyner Copyright (c) 2001-2017, Intel Corporation 513705f88SJack F Vogel All rights reserved. 613705f88SJack F Vogel 713705f88SJack F Vogel Redistribution and use in source and binary forms, with or without 813705f88SJack F Vogel modification, are permitted provided that the following conditions are met: 913705f88SJack F Vogel 1013705f88SJack F Vogel 1. Redistributions of source code must retain the above copyright notice, 1113705f88SJack F Vogel this list of conditions and the following disclaimer. 1213705f88SJack F Vogel 1313705f88SJack F Vogel 2. Redistributions in binary form must reproduce the above copyright 1413705f88SJack F Vogel notice, this list of conditions and the following disclaimer in the 1513705f88SJack F Vogel documentation and/or other materials provided with the distribution. 1613705f88SJack F Vogel 1713705f88SJack F Vogel 3. Neither the name of the Intel Corporation nor the names of its 1813705f88SJack F Vogel contributors may be used to endorse or promote products derived from 1913705f88SJack F Vogel this software without specific prior written permission. 2013705f88SJack F Vogel 2113705f88SJack F Vogel THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2213705f88SJack F Vogel AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2313705f88SJack F Vogel IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2413705f88SJack F Vogel ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 2513705f88SJack F Vogel LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2613705f88SJack F Vogel CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2713705f88SJack F Vogel SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2813705f88SJack F Vogel INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2913705f88SJack F Vogel CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 3013705f88SJack F Vogel ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3113705f88SJack F Vogel POSSIBILITY OF SUCH DAMAGE. 3213705f88SJack F Vogel 339ca4041bSJack F Vogel ******************************************************************************/ 3413705f88SJack F Vogel /*$FreeBSD$*/ 3513705f88SJack F Vogel 3613705f88SJack F Vogel #include "ixgbe_api.h" 3713705f88SJack F Vogel #include "ixgbe_common.h" 3813705f88SJack F Vogel 39a9ca1c79SSean Bruno #define IXGBE_EMPTY_PARAM 40a9ca1c79SSean Bruno 416f37f232SEric Joyner static const u32 ixgbe_mvals_base[IXGBE_MVALS_IDX_LIMIT] = { 42a9ca1c79SSean Bruno IXGBE_MVALS_INIT(IXGBE_EMPTY_PARAM) 436f37f232SEric Joyner }; 446f37f232SEric Joyner 456f37f232SEric Joyner static const u32 ixgbe_mvals_X540[IXGBE_MVALS_IDX_LIMIT] = { 466f37f232SEric Joyner IXGBE_MVALS_INIT(_X540) 476f37f232SEric Joyner }; 486f37f232SEric Joyner 496f37f232SEric Joyner static const u32 ixgbe_mvals_X550[IXGBE_MVALS_IDX_LIMIT] = { 506f37f232SEric Joyner IXGBE_MVALS_INIT(_X550) 516f37f232SEric Joyner }; 526f37f232SEric Joyner 536f37f232SEric Joyner static const u32 ixgbe_mvals_X550EM_x[IXGBE_MVALS_IDX_LIMIT] = { 546f37f232SEric Joyner IXGBE_MVALS_INIT(_X550EM_x) 556f37f232SEric Joyner }; 566f37f232SEric Joyner 578eb6488eSEric Joyner static const u32 ixgbe_mvals_X550EM_a[IXGBE_MVALS_IDX_LIMIT] = { 588eb6488eSEric Joyner IXGBE_MVALS_INIT(_X550EM_a) 598eb6488eSEric Joyner }; 608eb6488eSEric Joyner 6113705f88SJack F Vogel /** 62fd75b91dSJack F Vogel * ixgbe_dcb_get_rtrup2tc - read rtrup2tc reg 63fd75b91dSJack F Vogel * @hw: pointer to hardware structure 64fd75b91dSJack F Vogel * @map: pointer to u8 arr for returning map 65fd75b91dSJack F Vogel * 66fd75b91dSJack F Vogel * Read the rtrup2tc HW register and resolve its content into map 67fd75b91dSJack F Vogel **/ 68fd75b91dSJack F Vogel void ixgbe_dcb_get_rtrup2tc(struct ixgbe_hw *hw, u8 *map) 69fd75b91dSJack F Vogel { 70fd75b91dSJack F Vogel if (hw->mac.ops.get_rtrup2tc) 71fd75b91dSJack F Vogel hw->mac.ops.get_rtrup2tc(hw, map); 72fd75b91dSJack F Vogel } 73fd75b91dSJack F Vogel 74fd75b91dSJack F Vogel /** 7513705f88SJack F Vogel * ixgbe_init_shared_code - Initialize the shared code 7613705f88SJack F Vogel * @hw: pointer to hardware structure 7713705f88SJack F Vogel * 7813705f88SJack F Vogel * This will assign function pointers and assign the MAC type and PHY code. 7913705f88SJack F Vogel * Does not touch the hardware. This function must be called prior to any 8013705f88SJack F Vogel * other function in the shared code. The ixgbe_hw structure should be 8113705f88SJack F Vogel * memset to 0 prior to calling this function. The following fields in 8213705f88SJack F Vogel * hw structure should be filled in prior to calling this function: 8313705f88SJack F Vogel * hw_addr, back, device_id, vendor_id, subsystem_device_id, 8413705f88SJack F Vogel * subsystem_vendor_id, and revision_id 8513705f88SJack F Vogel **/ 8613705f88SJack F Vogel s32 ixgbe_init_shared_code(struct ixgbe_hw *hw) 8713705f88SJack F Vogel { 883ec35e52SJack F Vogel s32 status; 8913705f88SJack F Vogel 902969bf0eSJack F Vogel DEBUGFUNC("ixgbe_init_shared_code"); 912969bf0eSJack F Vogel 9213705f88SJack F Vogel /* 933ec35e52SJack F Vogel * Set the mac type 943ec35e52SJack F Vogel */ 953ec35e52SJack F Vogel ixgbe_set_mac_type(hw); 963ec35e52SJack F Vogel 973ec35e52SJack F Vogel switch (hw->mac.type) { 983ec35e52SJack F Vogel case ixgbe_mac_82598EB: 999ca4041bSJack F Vogel status = ixgbe_init_ops_82598(hw); 10013705f88SJack F Vogel break; 1010ac6dfecSJack F Vogel case ixgbe_mac_82599EB: 1020ac6dfecSJack F Vogel status = ixgbe_init_ops_82599(hw); 1030ac6dfecSJack F Vogel break; 10485d0a26eSJack F Vogel case ixgbe_mac_X540: 10585d0a26eSJack F Vogel status = ixgbe_init_ops_X540(hw); 10685d0a26eSJack F Vogel break; 107758cc3dcSJack F Vogel case ixgbe_mac_X550: 108758cc3dcSJack F Vogel status = ixgbe_init_ops_X550(hw); 109758cc3dcSJack F Vogel break; 110758cc3dcSJack F Vogel case ixgbe_mac_X550EM_x: 1118eb6488eSEric Joyner status = ixgbe_init_ops_X550EM_x(hw); 112758cc3dcSJack F Vogel break; 1138eb6488eSEric Joyner case ixgbe_mac_X550EM_a: 1148eb6488eSEric Joyner status = ixgbe_init_ops_X550EM_a(hw); 115758cc3dcSJack F Vogel break; 11613705f88SJack F Vogel default: 11713705f88SJack F Vogel status = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 11813705f88SJack F Vogel break; 11913705f88SJack F Vogel } 120a9ca1c79SSean Bruno hw->mac.max_link_up_time = IXGBE_LINK_UP_TIME; 12113705f88SJack F Vogel 12213705f88SJack F Vogel return status; 12313705f88SJack F Vogel } 12413705f88SJack F Vogel 12513705f88SJack F Vogel /** 1263ec35e52SJack F Vogel * ixgbe_set_mac_type - Sets MAC type 1273ec35e52SJack F Vogel * @hw: pointer to the HW structure 1283ec35e52SJack F Vogel * 1293ec35e52SJack F Vogel * This function sets the mac type of the adapter based on the 1303ec35e52SJack F Vogel * vendor ID and device ID stored in the hw structure. 1313ec35e52SJack F Vogel **/ 1323ec35e52SJack F Vogel s32 ixgbe_set_mac_type(struct ixgbe_hw *hw) 1333ec35e52SJack F Vogel { 1343ec35e52SJack F Vogel s32 ret_val = IXGBE_SUCCESS; 1353ec35e52SJack F Vogel 1369ca4041bSJack F Vogel DEBUGFUNC("ixgbe_set_mac_type\n"); 1373ec35e52SJack F Vogel 138fd75b91dSJack F Vogel if (hw->vendor_id != IXGBE_INTEL_VENDOR_ID) { 139fd75b91dSJack F Vogel ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED, 140fd75b91dSJack F Vogel "Unsupported vendor id: %x", hw->vendor_id); 141fd75b91dSJack F Vogel return IXGBE_ERR_DEVICE_NOT_SUPPORTED; 142fd75b91dSJack F Vogel } 143fd75b91dSJack F Vogel 1446f37f232SEric Joyner hw->mvals = ixgbe_mvals_base; 1456f37f232SEric Joyner 1463ec35e52SJack F Vogel switch (hw->device_id) { 1471b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598: 1480ac6dfecSJack F Vogel case IXGBE_DEV_ID_82598_BX: 1493ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_SINGLE_PORT: 1503ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_DUAL_PORT: 1519ca4041bSJack F Vogel case IXGBE_DEV_ID_82598AT: 1522969bf0eSJack F Vogel case IXGBE_DEV_ID_82598AT2: 1533ec35e52SJack F Vogel case IXGBE_DEV_ID_82598EB_CX4: 1549ca4041bSJack F Vogel case IXGBE_DEV_ID_82598_CX4_DUAL_PORT: 1551b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_DA_DUAL_PORT: 1561b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM: 1579ca4041bSJack F Vogel case IXGBE_DEV_ID_82598EB_XF_LR: 1581b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598EB_SFP_LOM: 1593ec35e52SJack F Vogel hw->mac.type = ixgbe_mac_82598EB; 1603ec35e52SJack F Vogel break; 1610ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_KX4: 1622969bf0eSJack F Vogel case IXGBE_DEV_ID_82599_KX4_MEZZ: 163d8602bb9SJack F Vogel case IXGBE_DEV_ID_82599_XAUI_LOM: 1642969bf0eSJack F Vogel case IXGBE_DEV_ID_82599_COMBO_BACKPLANE: 16585d0a26eSJack F Vogel case IXGBE_DEV_ID_82599_KR: 1660ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_SFP: 1671a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_BACKPLANE_FCOE: 1681a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_SFP_FCOE: 16985d0a26eSJack F Vogel case IXGBE_DEV_ID_82599_SFP_EM: 170a621e3c8SJack F Vogel case IXGBE_DEV_ID_82599_SFP_SF2: 1710ecc2ff0SJack F Vogel case IXGBE_DEV_ID_82599_SFP_SF_QP: 172758cc3dcSJack F Vogel case IXGBE_DEV_ID_82599_QSFP_SF_QP: 17385d0a26eSJack F Vogel case IXGBE_DEV_ID_82599EN_SFP: 1740ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_CX4: 1750ecc2ff0SJack F Vogel case IXGBE_DEV_ID_82599_BYPASS: 176c0014855SJack F Vogel case IXGBE_DEV_ID_82599_T3_LOM: 1770ac6dfecSJack F Vogel hw->mac.type = ixgbe_mac_82599EB; 1780ac6dfecSJack F Vogel break; 17985d0a26eSJack F Vogel case IXGBE_DEV_ID_X540T: 180758cc3dcSJack F Vogel case IXGBE_DEV_ID_X540T1: 1810ecc2ff0SJack F Vogel case IXGBE_DEV_ID_X540_BYPASS: 18285d0a26eSJack F Vogel hw->mac.type = ixgbe_mac_X540; 1836f37f232SEric Joyner hw->mvals = ixgbe_mvals_X540; 18485d0a26eSJack F Vogel break; 185758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550T: 186a9ca1c79SSean Bruno case IXGBE_DEV_ID_X550T1: 187758cc3dcSJack F Vogel hw->mac.type = ixgbe_mac_X550; 1886f37f232SEric Joyner hw->mvals = ixgbe_mvals_X550; 189758cc3dcSJack F Vogel break; 190758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550EM_X_KX4: 191758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550EM_X_KR: 192758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550EM_X_10G_T: 193758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550EM_X_1G_T: 194758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550EM_X_SFP: 1958eb6488eSEric Joyner case IXGBE_DEV_ID_X550EM_X_XFI: 196758cc3dcSJack F Vogel hw->mac.type = ixgbe_mac_X550EM_x; 1976f37f232SEric Joyner hw->mvals = ixgbe_mvals_X550EM_x; 198758cc3dcSJack F Vogel break; 1998eb6488eSEric Joyner case IXGBE_DEV_ID_X550EM_A_KR: 2008eb6488eSEric Joyner case IXGBE_DEV_ID_X550EM_A_KR_L: 2018eb6488eSEric Joyner case IXGBE_DEV_ID_X550EM_A_SFP_N: 2028eb6488eSEric Joyner case IXGBE_DEV_ID_X550EM_A_SGMII: 2038eb6488eSEric Joyner case IXGBE_DEV_ID_X550EM_A_SGMII_L: 2048eb6488eSEric Joyner case IXGBE_DEV_ID_X550EM_A_1G_T: 2058eb6488eSEric Joyner case IXGBE_DEV_ID_X550EM_A_1G_T_L: 2068eb6488eSEric Joyner case IXGBE_DEV_ID_X550EM_A_10G_T: 2078eb6488eSEric Joyner case IXGBE_DEV_ID_X550EM_A_QSFP: 2088eb6488eSEric Joyner case IXGBE_DEV_ID_X550EM_A_QSFP_N: 2098eb6488eSEric Joyner case IXGBE_DEV_ID_X550EM_A_SFP: 2108eb6488eSEric Joyner hw->mac.type = ixgbe_mac_X550EM_a; 2118eb6488eSEric Joyner hw->mvals = ixgbe_mvals_X550EM_a; 212758cc3dcSJack F Vogel break; 2133ec35e52SJack F Vogel default: 2143ec35e52SJack F Vogel ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 215fd75b91dSJack F Vogel ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED, 216fd75b91dSJack F Vogel "Unsupported device id: %x", 217fd75b91dSJack F Vogel hw->device_id); 2183ec35e52SJack F Vogel break; 2193ec35e52SJack F Vogel } 2203ec35e52SJack F Vogel 2219ca4041bSJack F Vogel DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n", 2229ca4041bSJack F Vogel hw->mac.type, ret_val); 2233ec35e52SJack F Vogel return ret_val; 2243ec35e52SJack F Vogel } 2253ec35e52SJack F Vogel 2263ec35e52SJack F Vogel /** 22713705f88SJack F Vogel * ixgbe_init_hw - Initialize the hardware 22813705f88SJack F Vogel * @hw: pointer to hardware structure 22913705f88SJack F Vogel * 23013705f88SJack F Vogel * Initialize the hardware by resetting and then starting the hardware 23113705f88SJack F Vogel **/ 23213705f88SJack F Vogel s32 ixgbe_init_hw(struct ixgbe_hw *hw) 23313705f88SJack F Vogel { 2349ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw), 23513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 23613705f88SJack F Vogel } 23713705f88SJack F Vogel 23813705f88SJack F Vogel /** 23913705f88SJack F Vogel * ixgbe_reset_hw - Performs a hardware reset 24013705f88SJack F Vogel * @hw: pointer to hardware structure 24113705f88SJack F Vogel * 24213705f88SJack F Vogel * Resets the hardware by resetting the transmit and receive units, masks and 24313705f88SJack F Vogel * clears all interrupts, performs a PHY reset, and performs a MAC reset 24413705f88SJack F Vogel **/ 24513705f88SJack F Vogel s32 ixgbe_reset_hw(struct ixgbe_hw *hw) 24613705f88SJack F Vogel { 2479ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw), 24813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 24913705f88SJack F Vogel } 25013705f88SJack F Vogel 25113705f88SJack F Vogel /** 2529ca4041bSJack F Vogel * ixgbe_start_hw - Prepares hardware for Rx/Tx 25313705f88SJack F Vogel * @hw: pointer to hardware structure 25413705f88SJack F Vogel * 25513705f88SJack F Vogel * Starts the hardware by filling the bus info structure and media type, 25613705f88SJack F Vogel * clears all on chip counters, initializes receive address registers, 25713705f88SJack F Vogel * multicast table, VLAN filter table, calls routine to setup link and 25813705f88SJack F Vogel * flow control settings, and leaves transmit and receive units disabled 25913705f88SJack F Vogel * and uninitialized. 26013705f88SJack F Vogel **/ 26113705f88SJack F Vogel s32 ixgbe_start_hw(struct ixgbe_hw *hw) 26213705f88SJack F Vogel { 2639ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw), 26413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 26513705f88SJack F Vogel } 26613705f88SJack F Vogel 26713705f88SJack F Vogel /** 268c0014855SJack F Vogel * ixgbe_enable_relaxed_ordering - Enables tx relaxed ordering, 269c0014855SJack F Vogel * which is disabled by default in ixgbe_start_hw(); 270c0014855SJack F Vogel * 271c0014855SJack F Vogel * @hw: pointer to hardware structure 272c0014855SJack F Vogel * 273c0014855SJack F Vogel * Enable relaxed ordering; 274c0014855SJack F Vogel **/ 275c0014855SJack F Vogel void ixgbe_enable_relaxed_ordering(struct ixgbe_hw *hw) 276c0014855SJack F Vogel { 277c0014855SJack F Vogel if (hw->mac.ops.enable_relaxed_ordering) 278c0014855SJack F Vogel hw->mac.ops.enable_relaxed_ordering(hw); 279c0014855SJack F Vogel } 280c0014855SJack F Vogel 281c0014855SJack F Vogel /** 28213705f88SJack F Vogel * ixgbe_clear_hw_cntrs - Clear hardware counters 28313705f88SJack F Vogel * @hw: pointer to hardware structure 28413705f88SJack F Vogel * 28513705f88SJack F Vogel * Clears all hardware statistics counters by reading them from the hardware 28613705f88SJack F Vogel * Statistics counters are clear on read. 28713705f88SJack F Vogel **/ 28813705f88SJack F Vogel s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw) 28913705f88SJack F Vogel { 2909ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw), 29113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 29213705f88SJack F Vogel } 29313705f88SJack F Vogel 29413705f88SJack F Vogel /** 29513705f88SJack F Vogel * ixgbe_get_media_type - Get media type 29613705f88SJack F Vogel * @hw: pointer to hardware structure 29713705f88SJack F Vogel * 29813705f88SJack F Vogel * Returns the media type (fiber, copper, backplane) 29913705f88SJack F Vogel **/ 30013705f88SJack F Vogel enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw) 30113705f88SJack F Vogel { 3029ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw), 30313705f88SJack F Vogel ixgbe_media_type_unknown); 30413705f88SJack F Vogel } 30513705f88SJack F Vogel 30613705f88SJack F Vogel /** 30713705f88SJack F Vogel * ixgbe_get_mac_addr - Get MAC address 30813705f88SJack F Vogel * @hw: pointer to hardware structure 30913705f88SJack F Vogel * @mac_addr: Adapter MAC address 31013705f88SJack F Vogel * 31113705f88SJack F Vogel * Reads the adapter's MAC address from the first Receive Address Register 3129ca4041bSJack F Vogel * (RAR0) A reset of the adapter must have been performed prior to calling 3139ca4041bSJack F Vogel * this function in order for the MAC address to have been loaded from the 3149ca4041bSJack F Vogel * EEPROM into RAR0 31513705f88SJack F Vogel **/ 31613705f88SJack F Vogel s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr) 31713705f88SJack F Vogel { 3189ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr, 31913705f88SJack F Vogel (hw, mac_addr), IXGBE_NOT_IMPLEMENTED); 32013705f88SJack F Vogel } 32113705f88SJack F Vogel 32213705f88SJack F Vogel /** 3230ac6dfecSJack F Vogel * ixgbe_get_san_mac_addr - Get SAN MAC address 3240ac6dfecSJack F Vogel * @hw: pointer to hardware structure 3250ac6dfecSJack F Vogel * @san_mac_addr: SAN MAC address 3260ac6dfecSJack F Vogel * 3270ac6dfecSJack F Vogel * Reads the SAN MAC address from the EEPROM, if it's available. This is 3280ac6dfecSJack F Vogel * per-port, so set_lan_id() must be called before reading the addresses. 3290ac6dfecSJack F Vogel **/ 3300ac6dfecSJack F Vogel s32 ixgbe_get_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr) 3310ac6dfecSJack F Vogel { 3320ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_san_mac_addr, 3330ac6dfecSJack F Vogel (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED); 3340ac6dfecSJack F Vogel } 3350ac6dfecSJack F Vogel 3360ac6dfecSJack F Vogel /** 3370ac6dfecSJack F Vogel * ixgbe_set_san_mac_addr - Write a SAN MAC address 3380ac6dfecSJack F Vogel * @hw: pointer to hardware structure 3390ac6dfecSJack F Vogel * @san_mac_addr: SAN MAC address 3400ac6dfecSJack F Vogel * 3410ac6dfecSJack F Vogel * Writes A SAN MAC address to the EEPROM. 3420ac6dfecSJack F Vogel **/ 3430ac6dfecSJack F Vogel s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr) 3440ac6dfecSJack F Vogel { 3450ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_san_mac_addr, 3460ac6dfecSJack F Vogel (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED); 3470ac6dfecSJack F Vogel } 3480ac6dfecSJack F Vogel 3490ac6dfecSJack F Vogel /** 3500ac6dfecSJack F Vogel * ixgbe_get_device_caps - Get additional device capabilities 3510ac6dfecSJack F Vogel * @hw: pointer to hardware structure 3520ac6dfecSJack F Vogel * @device_caps: the EEPROM word for device capabilities 3530ac6dfecSJack F Vogel * 3540ac6dfecSJack F Vogel * Reads the extra device capabilities from the EEPROM 3550ac6dfecSJack F Vogel **/ 3560ac6dfecSJack F Vogel s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps) 3570ac6dfecSJack F Vogel { 3580ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_device_caps, 3590ac6dfecSJack F Vogel (hw, device_caps), IXGBE_NOT_IMPLEMENTED); 3600ac6dfecSJack F Vogel } 3610ac6dfecSJack F Vogel 3620ac6dfecSJack F Vogel /** 3632969bf0eSJack F Vogel * ixgbe_get_wwn_prefix - Get alternative WWNN/WWPN prefix from the EEPROM 3642969bf0eSJack F Vogel * @hw: pointer to hardware structure 3652969bf0eSJack F Vogel * @wwnn_prefix: the alternative WWNN prefix 3662969bf0eSJack F Vogel * @wwpn_prefix: the alternative WWPN prefix 3672969bf0eSJack F Vogel * 3682969bf0eSJack F Vogel * This function will read the EEPROM from the alternative SAN MAC address 3692969bf0eSJack F Vogel * block to check the support for the alternative WWNN/WWPN prefix support. 3702969bf0eSJack F Vogel **/ 3712969bf0eSJack F Vogel s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix, 3722969bf0eSJack F Vogel u16 *wwpn_prefix) 3732969bf0eSJack F Vogel { 3742969bf0eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_wwn_prefix, 3752969bf0eSJack F Vogel (hw, wwnn_prefix, wwpn_prefix), 3762969bf0eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 3772969bf0eSJack F Vogel } 3782969bf0eSJack F Vogel 3792969bf0eSJack F Vogel /** 3801a4e3449SJack F Vogel * ixgbe_get_fcoe_boot_status - Get FCOE boot status from EEPROM 3811a4e3449SJack F Vogel * @hw: pointer to hardware structure 3821a4e3449SJack F Vogel * @bs: the fcoe boot status 3831a4e3449SJack F Vogel * 3841a4e3449SJack F Vogel * This function will read the FCOE boot status from the iSCSI FCOE block 3851a4e3449SJack F Vogel **/ 3861a4e3449SJack F Vogel s32 ixgbe_get_fcoe_boot_status(struct ixgbe_hw *hw, u16 *bs) 3871a4e3449SJack F Vogel { 3881a4e3449SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_fcoe_boot_status, 3891a4e3449SJack F Vogel (hw, bs), 3901a4e3449SJack F Vogel IXGBE_NOT_IMPLEMENTED); 3911a4e3449SJack F Vogel } 3921a4e3449SJack F Vogel 3931a4e3449SJack F Vogel /** 39413705f88SJack F Vogel * ixgbe_get_bus_info - Set PCI bus info 39513705f88SJack F Vogel * @hw: pointer to hardware structure 39613705f88SJack F Vogel * 39713705f88SJack F Vogel * Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure 39813705f88SJack F Vogel **/ 39913705f88SJack F Vogel s32 ixgbe_get_bus_info(struct ixgbe_hw *hw) 40013705f88SJack F Vogel { 4019ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw), 40213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 40313705f88SJack F Vogel } 40413705f88SJack F Vogel 40513705f88SJack F Vogel /** 4069ca4041bSJack F Vogel * ixgbe_get_num_of_tx_queues - Get Tx queues 40713705f88SJack F Vogel * @hw: pointer to hardware structure 40813705f88SJack F Vogel * 40913705f88SJack F Vogel * Returns the number of transmit queues for the given adapter. 41013705f88SJack F Vogel **/ 41113705f88SJack F Vogel u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw) 41213705f88SJack F Vogel { 4139ca4041bSJack F Vogel return hw->mac.max_tx_queues; 41413705f88SJack F Vogel } 41513705f88SJack F Vogel 41613705f88SJack F Vogel /** 4179ca4041bSJack F Vogel * ixgbe_get_num_of_rx_queues - Get Rx queues 41813705f88SJack F Vogel * @hw: pointer to hardware structure 41913705f88SJack F Vogel * 42013705f88SJack F Vogel * Returns the number of receive queues for the given adapter. 42113705f88SJack F Vogel **/ 42213705f88SJack F Vogel u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw) 42313705f88SJack F Vogel { 4249ca4041bSJack F Vogel return hw->mac.max_rx_queues; 42513705f88SJack F Vogel } 42613705f88SJack F Vogel 42713705f88SJack F Vogel /** 4289ca4041bSJack F Vogel * ixgbe_stop_adapter - Disable Rx/Tx units 42913705f88SJack F Vogel * @hw: pointer to hardware structure 43013705f88SJack F Vogel * 43113705f88SJack F Vogel * Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts, 43213705f88SJack F Vogel * disables transmit and receive units. The adapter_stopped flag is used by 43313705f88SJack F Vogel * the shared code and drivers to determine if the adapter is in a stopped 43413705f88SJack F Vogel * state and should not touch the hardware. 43513705f88SJack F Vogel **/ 43613705f88SJack F Vogel s32 ixgbe_stop_adapter(struct ixgbe_hw *hw) 43713705f88SJack F Vogel { 4389ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw), 43913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 44013705f88SJack F Vogel } 44113705f88SJack F Vogel 44213705f88SJack F Vogel /** 4431a4e3449SJack F Vogel * ixgbe_read_pba_string - Reads part number string from EEPROM 4441a4e3449SJack F Vogel * @hw: pointer to hardware structure 4451a4e3449SJack F Vogel * @pba_num: stores the part number string from the EEPROM 4461a4e3449SJack F Vogel * @pba_num_size: part number string buffer length 4471a4e3449SJack F Vogel * 4481a4e3449SJack F Vogel * Reads the part number string from the EEPROM. 4491a4e3449SJack F Vogel **/ 4501a4e3449SJack F Vogel s32 ixgbe_read_pba_string(struct ixgbe_hw *hw, u8 *pba_num, u32 pba_num_size) 4511a4e3449SJack F Vogel { 4521a4e3449SJack F Vogel return ixgbe_read_pba_string_generic(hw, pba_num, pba_num_size); 4531a4e3449SJack F Vogel } 4541a4e3449SJack F Vogel 4551a4e3449SJack F Vogel /** 4569ca4041bSJack F Vogel * ixgbe_read_pba_num - Reads part number from EEPROM 4579ca4041bSJack F Vogel * @hw: pointer to hardware structure 4589ca4041bSJack F Vogel * @pba_num: stores the part number from the EEPROM 4599ca4041bSJack F Vogel * 4609ca4041bSJack F Vogel * Reads the part number from the EEPROM. 4619ca4041bSJack F Vogel **/ 4629ca4041bSJack F Vogel s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num) 4639ca4041bSJack F Vogel { 4649ca4041bSJack F Vogel return ixgbe_read_pba_num_generic(hw, pba_num); 4659ca4041bSJack F Vogel } 4669ca4041bSJack F Vogel 4679ca4041bSJack F Vogel /** 46813705f88SJack F Vogel * ixgbe_identify_phy - Get PHY type 46913705f88SJack F Vogel * @hw: pointer to hardware structure 47013705f88SJack F Vogel * 47113705f88SJack F Vogel * Determines the physical layer module found on the current adapter. 47213705f88SJack F Vogel **/ 47313705f88SJack F Vogel s32 ixgbe_identify_phy(struct ixgbe_hw *hw) 47413705f88SJack F Vogel { 47513705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 47613705f88SJack F Vogel 47713705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 4781a4e3449SJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.identify, (hw), 47913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 48013705f88SJack F Vogel } 48113705f88SJack F Vogel 48213705f88SJack F Vogel return status; 48313705f88SJack F Vogel } 48413705f88SJack F Vogel 48513705f88SJack F Vogel /** 48613705f88SJack F Vogel * ixgbe_reset_phy - Perform a PHY reset 48713705f88SJack F Vogel * @hw: pointer to hardware structure 48813705f88SJack F Vogel **/ 48913705f88SJack F Vogel s32 ixgbe_reset_phy(struct ixgbe_hw *hw) 49013705f88SJack F Vogel { 49113705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 49213705f88SJack F Vogel 49313705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 4941b6e0dbaSJack F Vogel if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS) 49513705f88SJack F Vogel status = IXGBE_ERR_PHY; 49613705f88SJack F Vogel } 49713705f88SJack F Vogel 49813705f88SJack F Vogel if (status == IXGBE_SUCCESS) { 4999ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw), 50013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 50113705f88SJack F Vogel } 50213705f88SJack F Vogel return status; 50313705f88SJack F Vogel } 50413705f88SJack F Vogel 50513705f88SJack F Vogel /** 5069ca4041bSJack F Vogel * ixgbe_get_phy_firmware_version - 5079ca4041bSJack F Vogel * @hw: pointer to hardware structure 5089ca4041bSJack F Vogel * @firmware_version: pointer to firmware version 5099ca4041bSJack F Vogel **/ 5109ca4041bSJack F Vogel s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version) 5119ca4041bSJack F Vogel { 5129ca4041bSJack F Vogel s32 status = IXGBE_SUCCESS; 5139ca4041bSJack F Vogel 5149ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version, 5159ca4041bSJack F Vogel (hw, firmware_version), 5169ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 5179ca4041bSJack F Vogel return status; 5189ca4041bSJack F Vogel } 5199ca4041bSJack F Vogel 5209ca4041bSJack F Vogel /** 52113705f88SJack F Vogel * ixgbe_read_phy_reg - Read PHY register 52213705f88SJack F Vogel * @hw: pointer to hardware structure 52313705f88SJack F Vogel * @reg_addr: 32 bit address of PHY register to read 5247d48aa4cSEric Joyner * @device_type: type of device you want to communicate with 52513705f88SJack F Vogel * @phy_data: Pointer to read data from PHY register 52613705f88SJack F Vogel * 52713705f88SJack F Vogel * Reads a value from a specified PHY register 52813705f88SJack F Vogel **/ 52913705f88SJack F Vogel s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 53013705f88SJack F Vogel u16 *phy_data) 53113705f88SJack F Vogel { 5320ac6dfecSJack F Vogel if (hw->phy.id == 0) 5330ac6dfecSJack F Vogel ixgbe_identify_phy(hw); 5340ac6dfecSJack F Vogel 5359ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr, 5369ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 53713705f88SJack F Vogel } 53813705f88SJack F Vogel 53913705f88SJack F Vogel /** 54013705f88SJack F Vogel * ixgbe_write_phy_reg - Write PHY register 54113705f88SJack F Vogel * @hw: pointer to hardware structure 54213705f88SJack F Vogel * @reg_addr: 32 bit PHY register to write 5437d48aa4cSEric Joyner * @device_type: type of device you want to communicate with 54413705f88SJack F Vogel * @phy_data: Data to write to the PHY register 54513705f88SJack F Vogel * 54613705f88SJack F Vogel * Writes a value to specified PHY register 54713705f88SJack F Vogel **/ 54813705f88SJack F Vogel s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 54913705f88SJack F Vogel u16 phy_data) 55013705f88SJack F Vogel { 5510ac6dfecSJack F Vogel if (hw->phy.id == 0) 5520ac6dfecSJack F Vogel ixgbe_identify_phy(hw); 5530ac6dfecSJack F Vogel 5549ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr, 5559ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 55613705f88SJack F Vogel } 55713705f88SJack F Vogel 5589ca4041bSJack F Vogel /** 5599ca4041bSJack F Vogel * ixgbe_setup_phy_link - Restart PHY autoneg 5609ca4041bSJack F Vogel * @hw: pointer to hardware structure 5619ca4041bSJack F Vogel * 5629ca4041bSJack F Vogel * Restart autonegotiation and PHY and waits for completion. 5639ca4041bSJack F Vogel **/ 5649ca4041bSJack F Vogel s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw) 5659ca4041bSJack F Vogel { 5669ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw), 56713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 56813705f88SJack F Vogel } 5699ca4041bSJack F Vogel 5709ca4041bSJack F Vogel /** 571758cc3dcSJack F Vogel * ixgbe_setup_internal_phy - Configure integrated PHY 572758cc3dcSJack F Vogel * @hw: pointer to hardware structure 573758cc3dcSJack F Vogel * 574758cc3dcSJack F Vogel * Reconfigure the integrated PHY in order to enable talk to the external PHY. 575758cc3dcSJack F Vogel * Returns success if not implemented, since nothing needs to be done in this 576758cc3dcSJack F Vogel * case. 577758cc3dcSJack F Vogel */ 578758cc3dcSJack F Vogel s32 ixgbe_setup_internal_phy(struct ixgbe_hw *hw) 579758cc3dcSJack F Vogel { 580758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_internal_link, (hw), 581758cc3dcSJack F Vogel IXGBE_SUCCESS); 582758cc3dcSJack F Vogel } 583758cc3dcSJack F Vogel 584758cc3dcSJack F Vogel /** 5859ca4041bSJack F Vogel * ixgbe_check_phy_link - Determine link and speed status 5869ca4041bSJack F Vogel * @hw: pointer to hardware structure 5877d48aa4cSEric Joyner * @speed: link speed 5887d48aa4cSEric Joyner * @link_up: TRUE when link is up 5899ca4041bSJack F Vogel * 5909ca4041bSJack F Vogel * Reads a PHY register to determine if link is up and the current speed for 5919ca4041bSJack F Vogel * the PHY. 5929ca4041bSJack F Vogel **/ 5939ca4041bSJack F Vogel s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 5949ca4041bSJack F Vogel bool *link_up) 5959ca4041bSJack F Vogel { 5969ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed, 5979ca4041bSJack F Vogel link_up), IXGBE_NOT_IMPLEMENTED); 5989ca4041bSJack F Vogel } 5999ca4041bSJack F Vogel 6009ca4041bSJack F Vogel /** 6019ca4041bSJack F Vogel * ixgbe_setup_phy_link_speed - Set auto advertise 6029ca4041bSJack F Vogel * @hw: pointer to hardware structure 6039ca4041bSJack F Vogel * @speed: new link speed 6047d48aa4cSEric Joyner * @autoneg_wait_to_complete: TRUE when waiting for completion is needed 6059ca4041bSJack F Vogel * 6069ca4041bSJack F Vogel * Sets the auto advertised capabilities 6079ca4041bSJack F Vogel **/ 6089ca4041bSJack F Vogel s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed, 6099ca4041bSJack F Vogel bool autoneg_wait_to_complete) 6109ca4041bSJack F Vogel { 6119ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_link_speed, (hw, speed, 6120ecc2ff0SJack F Vogel autoneg_wait_to_complete), 6139ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 61413705f88SJack F Vogel } 61513705f88SJack F Vogel 61613705f88SJack F Vogel /** 617758cc3dcSJack F Vogel * ixgbe_set_phy_power - Control the phy power state 618758cc3dcSJack F Vogel * @hw: pointer to hardware structure 619758cc3dcSJack F Vogel * @on: TRUE for on, FALSE for off 620758cc3dcSJack F Vogel */ 621758cc3dcSJack F Vogel s32 ixgbe_set_phy_power(struct ixgbe_hw *hw, bool on) 622758cc3dcSJack F Vogel { 623758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.set_phy_power, (hw, on), 624758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 625758cc3dcSJack F Vogel } 626758cc3dcSJack F Vogel 627758cc3dcSJack F Vogel /** 62813705f88SJack F Vogel * ixgbe_check_link - Get link and speed status 62913705f88SJack F Vogel * @hw: pointer to hardware structure 6307d48aa4cSEric Joyner * @speed: pointer to link speed 6317d48aa4cSEric Joyner * @link_up: TRUE when link is up 6327d48aa4cSEric Joyner * @link_up_wait_to_complete: bool used to wait for link up or not 63313705f88SJack F Vogel * 63413705f88SJack F Vogel * Reads the links register to determine if link is up and the current speed 63513705f88SJack F Vogel **/ 63613705f88SJack F Vogel s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 6379ca4041bSJack F Vogel bool *link_up, bool link_up_wait_to_complete) 63813705f88SJack F Vogel { 6399ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.check_link, (hw, speed, 6409ca4041bSJack F Vogel link_up, link_up_wait_to_complete), 64113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 64213705f88SJack F Vogel } 64313705f88SJack F Vogel 64413705f88SJack F Vogel /** 6451a4e3449SJack F Vogel * ixgbe_disable_tx_laser - Disable Tx laser 6461a4e3449SJack F Vogel * @hw: pointer to hardware structure 6471a4e3449SJack F Vogel * 6481a4e3449SJack F Vogel * If the driver needs to disable the laser on SFI optics. 6491a4e3449SJack F Vogel **/ 6501a4e3449SJack F Vogel void ixgbe_disable_tx_laser(struct ixgbe_hw *hw) 6511a4e3449SJack F Vogel { 6521a4e3449SJack F Vogel if (hw->mac.ops.disable_tx_laser) 6531a4e3449SJack F Vogel hw->mac.ops.disable_tx_laser(hw); 6541a4e3449SJack F Vogel } 6551a4e3449SJack F Vogel 6561a4e3449SJack F Vogel /** 6571a4e3449SJack F Vogel * ixgbe_enable_tx_laser - Enable Tx laser 6581a4e3449SJack F Vogel * @hw: pointer to hardware structure 6591a4e3449SJack F Vogel * 6601a4e3449SJack F Vogel * If the driver needs to enable the laser on SFI optics. 6611a4e3449SJack F Vogel **/ 6621a4e3449SJack F Vogel void ixgbe_enable_tx_laser(struct ixgbe_hw *hw) 6631a4e3449SJack F Vogel { 6641a4e3449SJack F Vogel if (hw->mac.ops.enable_tx_laser) 6651a4e3449SJack F Vogel hw->mac.ops.enable_tx_laser(hw); 6661a4e3449SJack F Vogel } 6671a4e3449SJack F Vogel 6681a4e3449SJack F Vogel /** 6691a4e3449SJack F Vogel * ixgbe_flap_tx_laser - flap Tx laser to start autotry process 6701a4e3449SJack F Vogel * @hw: pointer to hardware structure 6711a4e3449SJack F Vogel * 6721a4e3449SJack F Vogel * When the driver changes the link speeds that it can support then 6731a4e3449SJack F Vogel * flap the tx laser to alert the link partner to start autotry 6741a4e3449SJack F Vogel * process on its end. 6751a4e3449SJack F Vogel **/ 6761a4e3449SJack F Vogel void ixgbe_flap_tx_laser(struct ixgbe_hw *hw) 6771a4e3449SJack F Vogel { 6781a4e3449SJack F Vogel if (hw->mac.ops.flap_tx_laser) 6791a4e3449SJack F Vogel hw->mac.ops.flap_tx_laser(hw); 6801a4e3449SJack F Vogel } 6811a4e3449SJack F Vogel 6821a4e3449SJack F Vogel /** 6832969bf0eSJack F Vogel * ixgbe_setup_link - Set link speed 68413705f88SJack F Vogel * @hw: pointer to hardware structure 68513705f88SJack F Vogel * @speed: new link speed 6867d48aa4cSEric Joyner * @autoneg_wait_to_complete: TRUE when waiting for completion is needed 68713705f88SJack F Vogel * 6882969bf0eSJack F Vogel * Configures link settings. Restarts the link. 6892969bf0eSJack F Vogel * Performs autonegotiation if needed. 69013705f88SJack F Vogel **/ 6912969bf0eSJack F Vogel s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed, 69213705f88SJack F Vogel bool autoneg_wait_to_complete) 69313705f88SJack F Vogel { 6942969bf0eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw, speed, 6950ecc2ff0SJack F Vogel autoneg_wait_to_complete), 69613705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 69713705f88SJack F Vogel } 69813705f88SJack F Vogel 69913705f88SJack F Vogel /** 700758cc3dcSJack F Vogel * ixgbe_setup_mac_link - Set link speed 701758cc3dcSJack F Vogel * @hw: pointer to hardware structure 702758cc3dcSJack F Vogel * @speed: new link speed 7037d48aa4cSEric Joyner * @autoneg_wait_to_complete: TRUE when waiting for completion is needed 704758cc3dcSJack F Vogel * 705758cc3dcSJack F Vogel * Configures link settings. Restarts the link. 706758cc3dcSJack F Vogel * Performs autonegotiation if needed. 707758cc3dcSJack F Vogel **/ 708758cc3dcSJack F Vogel s32 ixgbe_setup_mac_link(struct ixgbe_hw *hw, ixgbe_link_speed speed, 709758cc3dcSJack F Vogel bool autoneg_wait_to_complete) 710758cc3dcSJack F Vogel { 711758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_mac_link, (hw, speed, 712758cc3dcSJack F Vogel autoneg_wait_to_complete), 713758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 714758cc3dcSJack F Vogel } 715758cc3dcSJack F Vogel 716758cc3dcSJack F Vogel /** 7179ca4041bSJack F Vogel * ixgbe_get_link_capabilities - Returns link capabilities 71813705f88SJack F Vogel * @hw: pointer to hardware structure 7197d48aa4cSEric Joyner * @speed: link speed capabilities 7207d48aa4cSEric Joyner * @autoneg: TRUE when autoneg or autotry is enabled 72113705f88SJack F Vogel * 7229ca4041bSJack F Vogel * Determines the link capabilities of the current configuration. 72313705f88SJack F Vogel **/ 7249ca4041bSJack F Vogel s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 72513705f88SJack F Vogel bool *autoneg) 72613705f88SJack F Vogel { 7279ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw, 7289ca4041bSJack F Vogel speed, autoneg), IXGBE_NOT_IMPLEMENTED); 72913705f88SJack F Vogel } 73013705f88SJack F Vogel 73113705f88SJack F Vogel /** 7329ca4041bSJack F Vogel * ixgbe_led_on - Turn on LEDs 73313705f88SJack F Vogel * @hw: pointer to hardware structure 73413705f88SJack F Vogel * @index: led number to turn on 73513705f88SJack F Vogel * 73613705f88SJack F Vogel * Turns on the software controllable LEDs. 73713705f88SJack F Vogel **/ 73813705f88SJack F Vogel s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index) 73913705f88SJack F Vogel { 7409ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index), 74113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 74213705f88SJack F Vogel } 74313705f88SJack F Vogel 74413705f88SJack F Vogel /** 7459ca4041bSJack F Vogel * ixgbe_led_off - Turn off LEDs 74613705f88SJack F Vogel * @hw: pointer to hardware structure 74713705f88SJack F Vogel * @index: led number to turn off 74813705f88SJack F Vogel * 74913705f88SJack F Vogel * Turns off the software controllable LEDs. 75013705f88SJack F Vogel **/ 75113705f88SJack F Vogel s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index) 75213705f88SJack F Vogel { 7539ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index), 75413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 75513705f88SJack F Vogel } 75613705f88SJack F Vogel 75713705f88SJack F Vogel /** 7589ca4041bSJack F Vogel * ixgbe_blink_led_start - Blink LEDs 75913705f88SJack F Vogel * @hw: pointer to hardware structure 76013705f88SJack F Vogel * @index: led number to blink 76113705f88SJack F Vogel * 76213705f88SJack F Vogel * Blink LED based on index. 76313705f88SJack F Vogel **/ 76413705f88SJack F Vogel s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index) 76513705f88SJack F Vogel { 7669ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index), 76713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 76813705f88SJack F Vogel } 76913705f88SJack F Vogel 77013705f88SJack F Vogel /** 7719ca4041bSJack F Vogel * ixgbe_blink_led_stop - Stop blinking LEDs 77213705f88SJack F Vogel * @hw: pointer to hardware structure 7737d48aa4cSEric Joyner * @index: led number to stop 77413705f88SJack F Vogel * 77513705f88SJack F Vogel * Stop blinking LED based on index. 77613705f88SJack F Vogel **/ 77713705f88SJack F Vogel s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index) 77813705f88SJack F Vogel { 7799ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index), 78013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 78113705f88SJack F Vogel } 78213705f88SJack F Vogel 78313705f88SJack F Vogel /** 7849ca4041bSJack F Vogel * ixgbe_init_eeprom_params - Initialize EEPROM parameters 78513705f88SJack F Vogel * @hw: pointer to hardware structure 78613705f88SJack F Vogel * 78713705f88SJack F Vogel * Initializes the EEPROM parameters ixgbe_eeprom_info within the 78813705f88SJack F Vogel * ixgbe_hw struct in order to set up EEPROM access. 78913705f88SJack F Vogel **/ 79013705f88SJack F Vogel s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw) 79113705f88SJack F Vogel { 7929ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw), 79313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 79413705f88SJack F Vogel } 79513705f88SJack F Vogel 79613705f88SJack F Vogel 79713705f88SJack F Vogel /** 79813705f88SJack F Vogel * ixgbe_write_eeprom - Write word to EEPROM 79913705f88SJack F Vogel * @hw: pointer to hardware structure 80013705f88SJack F Vogel * @offset: offset within the EEPROM to be written to 80113705f88SJack F Vogel * @data: 16 bit word to be written to the EEPROM 80213705f88SJack F Vogel * 80313705f88SJack F Vogel * Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not 80413705f88SJack F Vogel * called after this function, the EEPROM will most likely contain an 80513705f88SJack F Vogel * invalid checksum. 80613705f88SJack F Vogel **/ 80713705f88SJack F Vogel s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data) 80813705f88SJack F Vogel { 8099ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data), 81013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 81113705f88SJack F Vogel } 81213705f88SJack F Vogel 81313705f88SJack F Vogel /** 81485d0a26eSJack F Vogel * ixgbe_write_eeprom_buffer - Write word(s) to EEPROM 81585d0a26eSJack F Vogel * @hw: pointer to hardware structure 81685d0a26eSJack F Vogel * @offset: offset within the EEPROM to be written to 81785d0a26eSJack F Vogel * @data: 16 bit word(s) to be written to the EEPROM 81885d0a26eSJack F Vogel * @words: number of words 81985d0a26eSJack F Vogel * 82085d0a26eSJack F Vogel * Writes 16 bit word(s) to EEPROM. If ixgbe_eeprom_update_checksum is not 82185d0a26eSJack F Vogel * called after this function, the EEPROM will most likely contain an 82285d0a26eSJack F Vogel * invalid checksum. 82385d0a26eSJack F Vogel **/ 82485d0a26eSJack F Vogel s32 ixgbe_write_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, u16 words, 82585d0a26eSJack F Vogel u16 *data) 82685d0a26eSJack F Vogel { 82785d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.write_buffer, 82885d0a26eSJack F Vogel (hw, offset, words, data), 82985d0a26eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 83085d0a26eSJack F Vogel } 83185d0a26eSJack F Vogel 83285d0a26eSJack F Vogel /** 83313705f88SJack F Vogel * ixgbe_read_eeprom - Read word from EEPROM 83413705f88SJack F Vogel * @hw: pointer to hardware structure 83513705f88SJack F Vogel * @offset: offset within the EEPROM to be read 83613705f88SJack F Vogel * @data: read 16 bit value from EEPROM 83713705f88SJack F Vogel * 83813705f88SJack F Vogel * Reads 16 bit value from EEPROM 83913705f88SJack F Vogel **/ 84013705f88SJack F Vogel s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data) 84113705f88SJack F Vogel { 8429ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data), 84313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 84413705f88SJack F Vogel } 84513705f88SJack F Vogel 84613705f88SJack F Vogel /** 84785d0a26eSJack F Vogel * ixgbe_read_eeprom_buffer - Read word(s) from EEPROM 84885d0a26eSJack F Vogel * @hw: pointer to hardware structure 84985d0a26eSJack F Vogel * @offset: offset within the EEPROM to be read 85085d0a26eSJack F Vogel * @data: read 16 bit word(s) from EEPROM 85185d0a26eSJack F Vogel * @words: number of words 85285d0a26eSJack F Vogel * 85385d0a26eSJack F Vogel * Reads 16 bit word(s) from EEPROM 85485d0a26eSJack F Vogel **/ 85585d0a26eSJack F Vogel s32 ixgbe_read_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, 85685d0a26eSJack F Vogel u16 words, u16 *data) 85785d0a26eSJack F Vogel { 85885d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.read_buffer, 85985d0a26eSJack F Vogel (hw, offset, words, data), 86085d0a26eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 86185d0a26eSJack F Vogel } 86285d0a26eSJack F Vogel 86385d0a26eSJack F Vogel /** 86413705f88SJack F Vogel * ixgbe_validate_eeprom_checksum - Validate EEPROM checksum 86513705f88SJack F Vogel * @hw: pointer to hardware structure 86613705f88SJack F Vogel * @checksum_val: calculated checksum 86713705f88SJack F Vogel * 86813705f88SJack F Vogel * Performs checksum calculation and validates the EEPROM checksum 86913705f88SJack F Vogel **/ 87013705f88SJack F Vogel s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val) 87113705f88SJack F Vogel { 8729ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum, 87313705f88SJack F Vogel (hw, checksum_val), IXGBE_NOT_IMPLEMENTED); 87413705f88SJack F Vogel } 87513705f88SJack F Vogel 87613705f88SJack F Vogel /** 87713705f88SJack F Vogel * ixgbe_eeprom_update_checksum - Updates the EEPROM checksum 87813705f88SJack F Vogel * @hw: pointer to hardware structure 87913705f88SJack F Vogel **/ 88013705f88SJack F Vogel s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw) 88113705f88SJack F Vogel { 8829ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw), 88313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 88413705f88SJack F Vogel } 88513705f88SJack F Vogel 88613705f88SJack F Vogel /** 8870ac6dfecSJack F Vogel * ixgbe_insert_mac_addr - Find a RAR for this mac address 8880ac6dfecSJack F Vogel * @hw: pointer to hardware structure 8890ac6dfecSJack F Vogel * @addr: Address to put into receive address register 8900ac6dfecSJack F Vogel * @vmdq: VMDq pool to assign 8910ac6dfecSJack F Vogel * 8920ac6dfecSJack F Vogel * Puts an ethernet address into a receive address register, or 893363089d8SPedro F. Giffuni * finds the rar that it is already in; adds to the pool list 8940ac6dfecSJack F Vogel **/ 8950ac6dfecSJack F Vogel s32 ixgbe_insert_mac_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq) 8960ac6dfecSJack F Vogel { 8970ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.insert_mac_addr, 8980ac6dfecSJack F Vogel (hw, addr, vmdq), 8990ac6dfecSJack F Vogel IXGBE_NOT_IMPLEMENTED); 9000ac6dfecSJack F Vogel } 9010ac6dfecSJack F Vogel 9020ac6dfecSJack F Vogel /** 9039ca4041bSJack F Vogel * ixgbe_set_rar - Set Rx address register 90413705f88SJack F Vogel * @hw: pointer to hardware structure 90513705f88SJack F Vogel * @index: Receive address register to write 9069ca4041bSJack F Vogel * @addr: Address to put into receive address register 9079ca4041bSJack F Vogel * @vmdq: VMDq "set" 90813705f88SJack F Vogel * @enable_addr: set flag that address is active 90913705f88SJack F Vogel * 91013705f88SJack F Vogel * Puts an ethernet address into a receive address register. 91113705f88SJack F Vogel **/ 9129ca4041bSJack F Vogel s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq, 91313705f88SJack F Vogel u32 enable_addr) 91413705f88SJack F Vogel { 9159ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq, 91613705f88SJack F Vogel enable_addr), IXGBE_NOT_IMPLEMENTED); 91713705f88SJack F Vogel } 91813705f88SJack F Vogel 91913705f88SJack F Vogel /** 9205b7f4cedSJack F Vogel * ixgbe_clear_rar - Clear Rx address register 9215b7f4cedSJack F Vogel * @hw: pointer to hardware structure 9225b7f4cedSJack F Vogel * @index: Receive address register to write 9235b7f4cedSJack F Vogel * 9245b7f4cedSJack F Vogel * Puts an ethernet address into a receive address register. 9255b7f4cedSJack F Vogel **/ 9265b7f4cedSJack F Vogel s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index) 9275b7f4cedSJack F Vogel { 9285b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index), 9295b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 9305b7f4cedSJack F Vogel } 9315b7f4cedSJack F Vogel 9325b7f4cedSJack F Vogel /** 9339ca4041bSJack F Vogel * ixgbe_set_vmdq - Associate a VMDq index with a receive address 9349ca4041bSJack F Vogel * @hw: pointer to hardware structure 9359ca4041bSJack F Vogel * @rar: receive address register index to associate with VMDq index 9369ca4041bSJack F Vogel * @vmdq: VMDq set or pool index 9379ca4041bSJack F Vogel **/ 9389ca4041bSJack F Vogel s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 9399ca4041bSJack F Vogel { 9409ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq), 9419ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 942a621e3c8SJack F Vogel 943a621e3c8SJack F Vogel } 944a621e3c8SJack F Vogel 945a621e3c8SJack F Vogel /** 946a621e3c8SJack F Vogel * ixgbe_set_vmdq_san_mac - Associate VMDq index 127 with a receive address 947a621e3c8SJack F Vogel * @hw: pointer to hardware structure 948a621e3c8SJack F Vogel * @vmdq: VMDq default pool index 949a621e3c8SJack F Vogel **/ 950a621e3c8SJack F Vogel s32 ixgbe_set_vmdq_san_mac(struct ixgbe_hw *hw, u32 vmdq) 951a621e3c8SJack F Vogel { 952a621e3c8SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vmdq_san_mac, 953a621e3c8SJack F Vogel (hw, vmdq), IXGBE_NOT_IMPLEMENTED); 9549ca4041bSJack F Vogel } 9559ca4041bSJack F Vogel 9569ca4041bSJack F Vogel /** 9575b7f4cedSJack F Vogel * ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address 9585b7f4cedSJack F Vogel * @hw: pointer to hardware structure 9595b7f4cedSJack F Vogel * @rar: receive address register index to disassociate with VMDq index 9605b7f4cedSJack F Vogel * @vmdq: VMDq set or pool index 9615b7f4cedSJack F Vogel **/ 9625b7f4cedSJack F Vogel s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 9635b7f4cedSJack F Vogel { 9645b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq), 9655b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 9665b7f4cedSJack F Vogel } 9675b7f4cedSJack F Vogel 9685b7f4cedSJack F Vogel /** 96913705f88SJack F Vogel * ixgbe_init_rx_addrs - Initializes receive address filters. 97013705f88SJack F Vogel * @hw: pointer to hardware structure 97113705f88SJack F Vogel * 97213705f88SJack F Vogel * Places the MAC address in receive address register 0 and clears the rest 9739ca4041bSJack F Vogel * of the receive address registers. Clears the multicast table. Assumes 97413705f88SJack F Vogel * the receiver is in reset when the routine is called. 97513705f88SJack F Vogel **/ 97613705f88SJack F Vogel s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw) 97713705f88SJack F Vogel { 9789ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw), 97913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 98013705f88SJack F Vogel } 98113705f88SJack F Vogel 98213705f88SJack F Vogel /** 98313705f88SJack F Vogel * ixgbe_get_num_rx_addrs - Returns the number of RAR entries. 98413705f88SJack F Vogel * @hw: pointer to hardware structure 98513705f88SJack F Vogel **/ 98613705f88SJack F Vogel u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw) 98713705f88SJack F Vogel { 9889ca4041bSJack F Vogel return hw->mac.num_rar_entries; 9899ca4041bSJack F Vogel } 9909ca4041bSJack F Vogel 9919ca4041bSJack F Vogel /** 9929ca4041bSJack F Vogel * ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses 9939ca4041bSJack F Vogel * @hw: pointer to hardware structure 9949ca4041bSJack F Vogel * @addr_list: the list of new multicast addresses 9959ca4041bSJack F Vogel * @addr_count: number of addresses 9969ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 9979ca4041bSJack F Vogel * 9989ca4041bSJack F Vogel * The given list replaces any existing list. Clears the secondary addrs from 9999ca4041bSJack F Vogel * receive address registers. Uses unused receive address registers for the 10009ca4041bSJack F Vogel * first secondary addresses, and falls back to promiscuous mode as needed. 10019ca4041bSJack F Vogel **/ 10029ca4041bSJack F Vogel s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list, 10039ca4041bSJack F Vogel u32 addr_count, ixgbe_mc_addr_itr func) 10049ca4041bSJack F Vogel { 10059ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw, 10069ca4041bSJack F Vogel addr_list, addr_count, func), 10079ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 100813705f88SJack F Vogel } 100913705f88SJack F Vogel 101013705f88SJack F Vogel /** 101113705f88SJack F Vogel * ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses 101213705f88SJack F Vogel * @hw: pointer to hardware structure 101313705f88SJack F Vogel * @mc_addr_list: the list of new multicast addresses 101413705f88SJack F Vogel * @mc_addr_count: number of addresses 10159ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 10167d48aa4cSEric Joyner * @clear: flag, when set clears the table beforehand 101713705f88SJack F Vogel * 101813705f88SJack F Vogel * The given list replaces any existing list. Clears the MC addrs from receive 10199ca4041bSJack F Vogel * address registers and the multicast table. Uses unused receive address 102013705f88SJack F Vogel * registers for the first multicast addresses, and hashes the rest into the 102113705f88SJack F Vogel * multicast table. 102213705f88SJack F Vogel **/ 102313705f88SJack F Vogel s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list, 102485d0a26eSJack F Vogel u32 mc_addr_count, ixgbe_mc_addr_itr func, 102585d0a26eSJack F Vogel bool clear) 102613705f88SJack F Vogel { 10279ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw, 102885d0a26eSJack F Vogel mc_addr_list, mc_addr_count, func, clear), 102913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 103013705f88SJack F Vogel } 103113705f88SJack F Vogel 103213705f88SJack F Vogel /** 103313705f88SJack F Vogel * ixgbe_enable_mc - Enable multicast address in RAR 103413705f88SJack F Vogel * @hw: pointer to hardware structure 103513705f88SJack F Vogel * 103613705f88SJack F Vogel * Enables multicast address in RAR and the use of the multicast hash table. 103713705f88SJack F Vogel **/ 103813705f88SJack F Vogel s32 ixgbe_enable_mc(struct ixgbe_hw *hw) 103913705f88SJack F Vogel { 10409ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw), 104113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 104213705f88SJack F Vogel } 104313705f88SJack F Vogel 104413705f88SJack F Vogel /** 104513705f88SJack F Vogel * ixgbe_disable_mc - Disable multicast address in RAR 104613705f88SJack F Vogel * @hw: pointer to hardware structure 104713705f88SJack F Vogel * 104813705f88SJack F Vogel * Disables multicast address in RAR and the use of the multicast hash table. 104913705f88SJack F Vogel **/ 105013705f88SJack F Vogel s32 ixgbe_disable_mc(struct ixgbe_hw *hw) 105113705f88SJack F Vogel { 10529ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw), 105313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 105413705f88SJack F Vogel } 105513705f88SJack F Vogel 105613705f88SJack F Vogel /** 105713705f88SJack F Vogel * ixgbe_clear_vfta - Clear VLAN filter table 105813705f88SJack F Vogel * @hw: pointer to hardware structure 105913705f88SJack F Vogel * 106013705f88SJack F Vogel * Clears the VLAN filer table, and the VMDq index associated with the filter 106113705f88SJack F Vogel **/ 106213705f88SJack F Vogel s32 ixgbe_clear_vfta(struct ixgbe_hw *hw) 106313705f88SJack F Vogel { 10649ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw), 106513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 106613705f88SJack F Vogel } 106713705f88SJack F Vogel 106813705f88SJack F Vogel /** 106913705f88SJack F Vogel * ixgbe_set_vfta - Set VLAN filter table 107013705f88SJack F Vogel * @hw: pointer to hardware structure 107113705f88SJack F Vogel * @vlan: VLAN id to write to VLAN filter 10728eb6488eSEric Joyner * @vind: VMDq output index that maps queue to VLAN id in VLVFB 10738eb6488eSEric Joyner * @vlan_on: boolean flag to turn on/off VLAN 10748eb6488eSEric Joyner * @vlvf_bypass: boolean flag indicating updating the default pool is okay 107513705f88SJack F Vogel * 107613705f88SJack F Vogel * Turn on/off specified VLAN in the VLAN filter table. 107713705f88SJack F Vogel **/ 10788eb6488eSEric Joyner s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on, 10798eb6488eSEric Joyner bool vlvf_bypass) 108013705f88SJack F Vogel { 10819ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind, 10828eb6488eSEric Joyner vlan_on, vlvf_bypass), IXGBE_NOT_IMPLEMENTED); 108313705f88SJack F Vogel } 108413705f88SJack F Vogel 108513705f88SJack F Vogel /** 108685d0a26eSJack F Vogel * ixgbe_set_vlvf - Set VLAN Pool Filter 108785d0a26eSJack F Vogel * @hw: pointer to hardware structure 108885d0a26eSJack F Vogel * @vlan: VLAN id to write to VLAN filter 10898eb6488eSEric Joyner * @vind: VMDq output index that maps queue to VLAN id in VLVFB 10908eb6488eSEric Joyner * @vlan_on: boolean flag to turn on/off VLAN in VLVF 10918eb6488eSEric Joyner * @vfta_delta: pointer to the difference between the current value of VFTA 10928eb6488eSEric Joyner * and the desired value 10938eb6488eSEric Joyner * @vfta: the desired value of the VFTA 10948eb6488eSEric Joyner * @vlvf_bypass: boolean flag indicating updating the default pool is okay 109585d0a26eSJack F Vogel * 109685d0a26eSJack F Vogel * Turn on/off specified bit in VLVF table. 109785d0a26eSJack F Vogel **/ 109885d0a26eSJack F Vogel s32 ixgbe_set_vlvf(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on, 10998eb6488eSEric Joyner u32 *vfta_delta, u32 vfta, bool vlvf_bypass) 110085d0a26eSJack F Vogel { 110185d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vlvf, (hw, vlan, vind, 11028eb6488eSEric Joyner vlan_on, vfta_delta, vfta, vlvf_bypass), 11038eb6488eSEric Joyner IXGBE_NOT_IMPLEMENTED); 110485d0a26eSJack F Vogel } 110585d0a26eSJack F Vogel 110685d0a26eSJack F Vogel /** 11070ac6dfecSJack F Vogel * ixgbe_fc_enable - Enable flow control 110813705f88SJack F Vogel * @hw: pointer to hardware structure 110913705f88SJack F Vogel * 111013705f88SJack F Vogel * Configures the flow control settings based on SW configuration. 111113705f88SJack F Vogel **/ 1112a621e3c8SJack F Vogel s32 ixgbe_fc_enable(struct ixgbe_hw *hw) 111313705f88SJack F Vogel { 1114a621e3c8SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.fc_enable, (hw), 111513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 111613705f88SJack F Vogel } 111713705f88SJack F Vogel 11183ec35e52SJack F Vogel /** 1119758cc3dcSJack F Vogel * ixgbe_setup_fc - Set up flow control 1120758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1121758cc3dcSJack F Vogel * 1122758cc3dcSJack F Vogel * Called at init time to set up flow control. 1123758cc3dcSJack F Vogel **/ 1124758cc3dcSJack F Vogel s32 ixgbe_setup_fc(struct ixgbe_hw *hw) 1125758cc3dcSJack F Vogel { 1126758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_fc, (hw), 1127758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 1128758cc3dcSJack F Vogel } 1129758cc3dcSJack F Vogel 1130758cc3dcSJack F Vogel /** 113185d0a26eSJack F Vogel * ixgbe_set_fw_drv_ver - Try to send the driver version number FW 113285d0a26eSJack F Vogel * @hw: pointer to hardware structure 113385d0a26eSJack F Vogel * @maj: driver major number to be sent to firmware 113485d0a26eSJack F Vogel * @min: driver minor number to be sent to firmware 113585d0a26eSJack F Vogel * @build: driver build number to be sent to firmware 113685d0a26eSJack F Vogel * @ver: driver version number to be sent to firmware 11378eb6488eSEric Joyner * @len: length of driver_ver string 11388eb6488eSEric Joyner * @driver_ver: driver string 113985d0a26eSJack F Vogel **/ 114085d0a26eSJack F Vogel s32 ixgbe_set_fw_drv_ver(struct ixgbe_hw *hw, u8 maj, u8 min, u8 build, 11418eb6488eSEric Joyner u8 ver, u16 len, char *driver_ver) 114285d0a26eSJack F Vogel { 114385d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_fw_drv_ver, (hw, maj, min, 11448eb6488eSEric Joyner build, ver, len, driver_ver), 11458eb6488eSEric Joyner IXGBE_NOT_IMPLEMENTED); 114685d0a26eSJack F Vogel } 114785d0a26eSJack F Vogel 114885d0a26eSJack F Vogel 1149fd75b91dSJack F Vogel 1150758cc3dcSJack F Vogel /** 1151758cc3dcSJack F Vogel * ixgbe_dmac_config - Configure DMA Coalescing registers. 1152758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1153758cc3dcSJack F Vogel * 1154758cc3dcSJack F Vogel * Configure DMA coalescing. If enabling dmac, dmac is activated. 1155758cc3dcSJack F Vogel * When disabling dmac, dmac enable dmac bit is cleared. 1156758cc3dcSJack F Vogel **/ 1157758cc3dcSJack F Vogel s32 ixgbe_dmac_config(struct ixgbe_hw *hw) 1158758cc3dcSJack F Vogel { 1159758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.dmac_config, (hw), 1160758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 1161758cc3dcSJack F Vogel } 1162758cc3dcSJack F Vogel 1163758cc3dcSJack F Vogel /** 1164758cc3dcSJack F Vogel * ixgbe_dmac_update_tcs - Configure DMA Coalescing registers. 1165758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1166758cc3dcSJack F Vogel * 1167758cc3dcSJack F Vogel * Disables dmac, updates per TC settings, and then enable dmac. 1168758cc3dcSJack F Vogel **/ 1169758cc3dcSJack F Vogel s32 ixgbe_dmac_update_tcs(struct ixgbe_hw *hw) 1170758cc3dcSJack F Vogel { 1171758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.dmac_update_tcs, (hw), 1172758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 1173758cc3dcSJack F Vogel } 1174758cc3dcSJack F Vogel 1175758cc3dcSJack F Vogel /** 1176758cc3dcSJack F Vogel * ixgbe_dmac_config_tcs - Configure DMA Coalescing registers. 1177758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1178758cc3dcSJack F Vogel * 1179758cc3dcSJack F Vogel * Configure DMA coalescing threshold per TC and set high priority bit for 1180758cc3dcSJack F Vogel * FCOE TC. The dmac enable bit must be cleared before configuring. 1181758cc3dcSJack F Vogel **/ 1182758cc3dcSJack F Vogel s32 ixgbe_dmac_config_tcs(struct ixgbe_hw *hw) 1183758cc3dcSJack F Vogel { 1184758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.dmac_config_tcs, (hw), 1185758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 1186758cc3dcSJack F Vogel } 1187758cc3dcSJack F Vogel 1188758cc3dcSJack F Vogel /** 1189758cc3dcSJack F Vogel * ixgbe_setup_eee - Enable/disable EEE support 1190758cc3dcSJack F Vogel * @hw: pointer to the HW structure 1191758cc3dcSJack F Vogel * @enable_eee: boolean flag to enable EEE 1192758cc3dcSJack F Vogel * 1193758cc3dcSJack F Vogel * Enable/disable EEE based on enable_ee flag. 1194758cc3dcSJack F Vogel * Auto-negotiation must be started after BASE-T EEE bits in PHY register 7.3C 1195758cc3dcSJack F Vogel * are modified. 1196758cc3dcSJack F Vogel * 1197758cc3dcSJack F Vogel **/ 1198758cc3dcSJack F Vogel s32 ixgbe_setup_eee(struct ixgbe_hw *hw, bool enable_eee) 1199758cc3dcSJack F Vogel { 1200758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_eee, (hw, enable_eee), 1201758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 1202758cc3dcSJack F Vogel } 1203758cc3dcSJack F Vogel 1204758cc3dcSJack F Vogel /** 1205758cc3dcSJack F Vogel * ixgbe_set_source_address_pruning - Enable/Disable source address pruning 1206758cc3dcSJack F Vogel * @hw: pointer to hardware structure 12077d48aa4cSEric Joyner * @enable: enable or disable source address pruning 1208758cc3dcSJack F Vogel * @pool: Rx pool - Rx pool to toggle source address pruning 1209758cc3dcSJack F Vogel **/ 1210758cc3dcSJack F Vogel void ixgbe_set_source_address_pruning(struct ixgbe_hw *hw, bool enable, 1211758cc3dcSJack F Vogel unsigned int pool) 1212758cc3dcSJack F Vogel { 1213758cc3dcSJack F Vogel if (hw->mac.ops.set_source_address_pruning) 1214758cc3dcSJack F Vogel hw->mac.ops.set_source_address_pruning(hw, enable, pool); 1215758cc3dcSJack F Vogel } 1216758cc3dcSJack F Vogel 1217758cc3dcSJack F Vogel /** 1218758cc3dcSJack F Vogel * ixgbe_set_ethertype_anti_spoofing - Enable/Disable Ethertype anti-spoofing 1219758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1220758cc3dcSJack F Vogel * @enable: enable or disable switch for Ethertype anti-spoofing 1221758cc3dcSJack F Vogel * @vf: Virtual Function pool - VF Pool to set for Ethertype anti-spoofing 1222758cc3dcSJack F Vogel * 1223758cc3dcSJack F Vogel **/ 1224758cc3dcSJack F Vogel void ixgbe_set_ethertype_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf) 1225758cc3dcSJack F Vogel { 1226758cc3dcSJack F Vogel if (hw->mac.ops.set_ethertype_anti_spoofing) 1227758cc3dcSJack F Vogel hw->mac.ops.set_ethertype_anti_spoofing(hw, enable, vf); 1228758cc3dcSJack F Vogel } 1229758cc3dcSJack F Vogel 1230758cc3dcSJack F Vogel /** 1231758cc3dcSJack F Vogel * ixgbe_read_iosf_sb_reg - Read 32 bit PHY register 1232758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1233758cc3dcSJack F Vogel * @reg_addr: 32 bit address of PHY register to read 1234758cc3dcSJack F Vogel * @device_type: type of device you want to communicate with 1235758cc3dcSJack F Vogel * @phy_data: Pointer to read data from PHY register 1236758cc3dcSJack F Vogel * 1237758cc3dcSJack F Vogel * Reads a value from a specified PHY register 1238758cc3dcSJack F Vogel **/ 1239758cc3dcSJack F Vogel s32 ixgbe_read_iosf_sb_reg(struct ixgbe_hw *hw, u32 reg_addr, 1240758cc3dcSJack F Vogel u32 device_type, u32 *phy_data) 1241758cc3dcSJack F Vogel { 1242758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.read_iosf_sb_reg, (hw, reg_addr, 1243758cc3dcSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 1244758cc3dcSJack F Vogel } 1245758cc3dcSJack F Vogel 1246758cc3dcSJack F Vogel /** 1247758cc3dcSJack F Vogel * ixgbe_write_iosf_sb_reg - Write 32 bit register through IOSF Sideband 1248758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1249758cc3dcSJack F Vogel * @reg_addr: 32 bit PHY register to write 1250758cc3dcSJack F Vogel * @device_type: type of device you want to communicate with 1251758cc3dcSJack F Vogel * @phy_data: Data to write to the PHY register 1252758cc3dcSJack F Vogel * 1253758cc3dcSJack F Vogel * Writes a value to specified PHY register 1254758cc3dcSJack F Vogel **/ 1255758cc3dcSJack F Vogel s32 ixgbe_write_iosf_sb_reg(struct ixgbe_hw *hw, u32 reg_addr, 1256758cc3dcSJack F Vogel u32 device_type, u32 phy_data) 1257758cc3dcSJack F Vogel { 1258758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.write_iosf_sb_reg, (hw, reg_addr, 1259758cc3dcSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 1260758cc3dcSJack F Vogel } 1261758cc3dcSJack F Vogel 1262758cc3dcSJack F Vogel /** 1263758cc3dcSJack F Vogel * ixgbe_disable_mdd - Disable malicious driver detection 1264758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1265758cc3dcSJack F Vogel * 1266758cc3dcSJack F Vogel **/ 1267758cc3dcSJack F Vogel void ixgbe_disable_mdd(struct ixgbe_hw *hw) 1268758cc3dcSJack F Vogel { 1269758cc3dcSJack F Vogel if (hw->mac.ops.disable_mdd) 1270758cc3dcSJack F Vogel hw->mac.ops.disable_mdd(hw); 1271758cc3dcSJack F Vogel } 1272758cc3dcSJack F Vogel 1273758cc3dcSJack F Vogel /** 1274758cc3dcSJack F Vogel * ixgbe_enable_mdd - Enable malicious driver detection 1275758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1276758cc3dcSJack F Vogel * 1277758cc3dcSJack F Vogel **/ 1278758cc3dcSJack F Vogel void ixgbe_enable_mdd(struct ixgbe_hw *hw) 1279758cc3dcSJack F Vogel { 1280758cc3dcSJack F Vogel if (hw->mac.ops.enable_mdd) 1281758cc3dcSJack F Vogel hw->mac.ops.enable_mdd(hw); 1282758cc3dcSJack F Vogel } 1283758cc3dcSJack F Vogel 1284758cc3dcSJack F Vogel /** 1285758cc3dcSJack F Vogel * ixgbe_mdd_event - Handle malicious driver detection event 1286758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1287758cc3dcSJack F Vogel * @vf_bitmap: vf bitmap of malicious vfs 1288758cc3dcSJack F Vogel * 1289758cc3dcSJack F Vogel **/ 1290758cc3dcSJack F Vogel void ixgbe_mdd_event(struct ixgbe_hw *hw, u32 *vf_bitmap) 1291758cc3dcSJack F Vogel { 1292758cc3dcSJack F Vogel if (hw->mac.ops.mdd_event) 1293758cc3dcSJack F Vogel hw->mac.ops.mdd_event(hw, vf_bitmap); 1294758cc3dcSJack F Vogel } 1295758cc3dcSJack F Vogel 1296758cc3dcSJack F Vogel /** 1297758cc3dcSJack F Vogel * ixgbe_restore_mdd_vf - Restore VF that was disabled during malicious driver 1298758cc3dcSJack F Vogel * detection event 1299758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1300758cc3dcSJack F Vogel * @vf: vf index 1301758cc3dcSJack F Vogel * 1302758cc3dcSJack F Vogel **/ 1303758cc3dcSJack F Vogel void ixgbe_restore_mdd_vf(struct ixgbe_hw *hw, u32 vf) 1304758cc3dcSJack F Vogel { 1305758cc3dcSJack F Vogel if (hw->mac.ops.restore_mdd_vf) 1306758cc3dcSJack F Vogel hw->mac.ops.restore_mdd_vf(hw, vf); 1307758cc3dcSJack F Vogel } 1308758cc3dcSJack F Vogel 1309758cc3dcSJack F Vogel /** 1310b622bdb4SXiaoyun Li * ixgbe_fw_recovery_mode - Check if in FW NVM recovery mode 1311b622bdb4SXiaoyun Li * @hw: pointer to hardware structure 1312b622bdb4SXiaoyun Li * 1313b622bdb4SXiaoyun Li **/ 1314b622bdb4SXiaoyun Li bool ixgbe_fw_recovery_mode(struct ixgbe_hw *hw) 1315b622bdb4SXiaoyun Li { 1316b622bdb4SXiaoyun Li if (hw->mac.ops.fw_recovery_mode) 1317b622bdb4SXiaoyun Li return hw->mac.ops.fw_recovery_mode(hw); 1318b622bdb4SXiaoyun Li return false; 1319b622bdb4SXiaoyun Li } 1320b622bdb4SXiaoyun Li 1321b622bdb4SXiaoyun Li /** 1322758cc3dcSJack F Vogel * ixgbe_enter_lplu - Transition to low power states 1323758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1324758cc3dcSJack F Vogel * 1325758cc3dcSJack F Vogel * Configures Low Power Link Up on transition to low power states 1326758cc3dcSJack F Vogel * (from D0 to non-D0). 1327758cc3dcSJack F Vogel **/ 1328758cc3dcSJack F Vogel s32 ixgbe_enter_lplu(struct ixgbe_hw *hw) 1329758cc3dcSJack F Vogel { 1330758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.enter_lplu, (hw), 1331758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 1332758cc3dcSJack F Vogel } 1333fd75b91dSJack F Vogel 133485d0a26eSJack F Vogel /** 13356f37f232SEric Joyner * ixgbe_handle_lasi - Handle external Base T PHY interrupt 13366f37f232SEric Joyner * @hw: pointer to hardware structure 13376f37f232SEric Joyner * 13386f37f232SEric Joyner * Handle external Base T PHY interrupt. If high temperature 13396f37f232SEric Joyner * failure alarm then return error, else if link status change 13406f37f232SEric Joyner * then setup internal/external PHY link 13416f37f232SEric Joyner * 13426f37f232SEric Joyner * Return IXGBE_ERR_OVERTEMP if interrupt is high temperature 13436f37f232SEric Joyner * failure alarm, else return PHY access status. 13446f37f232SEric Joyner */ 13456f37f232SEric Joyner s32 ixgbe_handle_lasi(struct ixgbe_hw *hw) 13466f37f232SEric Joyner { 13476f37f232SEric Joyner return ixgbe_call_func(hw, hw->phy.ops.handle_lasi, (hw), 13486f37f232SEric Joyner IXGBE_NOT_IMPLEMENTED); 13496f37f232SEric Joyner } 13506f37f232SEric Joyner 13516f37f232SEric Joyner /** 13528eb6488eSEric Joyner * ixgbe_bypass_rw - Bit bang data into by_pass FW 13538eb6488eSEric Joyner * @hw: pointer to hardware structure 13548eb6488eSEric Joyner * @cmd: Command we send to the FW 13558eb6488eSEric Joyner * @status: The reply from the FW 13568eb6488eSEric Joyner * 13578eb6488eSEric Joyner * Bit-bangs the cmd to the by_pass FW status points to what is returned. 13588eb6488eSEric Joyner **/ 13598eb6488eSEric Joyner s32 ixgbe_bypass_rw(struct ixgbe_hw *hw, u32 cmd, u32 *status) 13608eb6488eSEric Joyner { 13618eb6488eSEric Joyner return ixgbe_call_func(hw, hw->mac.ops.bypass_rw, (hw, cmd, status), 13628eb6488eSEric Joyner IXGBE_NOT_IMPLEMENTED); 13638eb6488eSEric Joyner } 13648eb6488eSEric Joyner 13658eb6488eSEric Joyner /** 13668eb6488eSEric Joyner * ixgbe_bypass_valid_rd - Verify valid return from bit-bang. 13678eb6488eSEric Joyner * 13688eb6488eSEric Joyner * If we send a write we can't be sure it took until we can read back 13698eb6488eSEric Joyner * that same register. It can be a problem as some of the feilds may 13708eb6488eSEric Joyner * for valid reasons change inbetween the time wrote the register and 13718eb6488eSEric Joyner * we read it again to verify. So this function check everything we 13728eb6488eSEric Joyner * can check and then assumes it worked. 13738eb6488eSEric Joyner * 13748eb6488eSEric Joyner * @u32 in_reg - The register cmd for the bit-bang read. 13758eb6488eSEric Joyner * @u32 out_reg - The register returned from a bit-bang read. 13768eb6488eSEric Joyner **/ 13778eb6488eSEric Joyner bool ixgbe_bypass_valid_rd(struct ixgbe_hw *hw, u32 in_reg, u32 out_reg) 13788eb6488eSEric Joyner { 13798eb6488eSEric Joyner return ixgbe_call_func(hw, hw->mac.ops.bypass_valid_rd, 13808eb6488eSEric Joyner (in_reg, out_reg), IXGBE_NOT_IMPLEMENTED); 13818eb6488eSEric Joyner } 13828eb6488eSEric Joyner 13838eb6488eSEric Joyner /** 13848eb6488eSEric Joyner * ixgbe_bypass_set - Set a bypass field in the FW CTRL Regiter. 13858eb6488eSEric Joyner * @hw: pointer to hardware structure 13868eb6488eSEric Joyner * @cmd: The control word we are setting. 13878eb6488eSEric Joyner * @event: The event we are setting in the FW. This also happens to 13888eb6488eSEric Joyner * be the mask for the event we are setting (handy) 13898eb6488eSEric Joyner * @action: The action we set the event to in the FW. This is in a 13908eb6488eSEric Joyner * bit field that happens to be what we want to put in 13918eb6488eSEric Joyner * the event spot (also handy) 13928eb6488eSEric Joyner * 13938eb6488eSEric Joyner * Writes to the cmd control the bits in actions. 13948eb6488eSEric Joyner **/ 13958eb6488eSEric Joyner s32 ixgbe_bypass_set(struct ixgbe_hw *hw, u32 cmd, u32 event, u32 action) 13968eb6488eSEric Joyner { 13978eb6488eSEric Joyner return ixgbe_call_func(hw, hw->mac.ops.bypass_set, 13988eb6488eSEric Joyner (hw, cmd, event, action), 13998eb6488eSEric Joyner IXGBE_NOT_IMPLEMENTED); 14008eb6488eSEric Joyner } 14018eb6488eSEric Joyner 14028eb6488eSEric Joyner /** 14038eb6488eSEric Joyner * ixgbe_bypass_rd_eep - Read the bypass FW eeprom address 14048eb6488eSEric Joyner * @hw: pointer to hardware structure 14058eb6488eSEric Joyner * @addr: The bypass eeprom address to read. 14068eb6488eSEric Joyner * @value: The 8b of data at the address above. 14078eb6488eSEric Joyner **/ 14088eb6488eSEric Joyner s32 ixgbe_bypass_rd_eep(struct ixgbe_hw *hw, u32 addr, u8 *value) 14098eb6488eSEric Joyner { 14108eb6488eSEric Joyner return ixgbe_call_func(hw, hw->mac.ops.bypass_rd_eep, 14118eb6488eSEric Joyner (hw, addr, value), IXGBE_NOT_IMPLEMENTED); 14128eb6488eSEric Joyner } 14138eb6488eSEric Joyner 14148eb6488eSEric Joyner /** 14153ec35e52SJack F Vogel * ixgbe_read_analog_reg8 - Reads 8 bit analog register 14163ec35e52SJack F Vogel * @hw: pointer to hardware structure 14173ec35e52SJack F Vogel * @reg: analog register to read 14183ec35e52SJack F Vogel * @val: read value 14193ec35e52SJack F Vogel * 14203ec35e52SJack F Vogel * Performs write operation to analog register specified. 14213ec35e52SJack F Vogel **/ 14223ec35e52SJack F Vogel s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val) 14233ec35e52SJack F Vogel { 14249ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg, 14259ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 14263ec35e52SJack F Vogel } 14273ec35e52SJack F Vogel 14283ec35e52SJack F Vogel /** 14293ec35e52SJack F Vogel * ixgbe_write_analog_reg8 - Writes 8 bit analog register 14303ec35e52SJack F Vogel * @hw: pointer to hardware structure 14313ec35e52SJack F Vogel * @reg: analog register to write 14323ec35e52SJack F Vogel * @val: value to write 14333ec35e52SJack F Vogel * 14343ec35e52SJack F Vogel * Performs write operation to Atlas analog register specified. 14353ec35e52SJack F Vogel **/ 14363ec35e52SJack F Vogel s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val) 14373ec35e52SJack F Vogel { 14389ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg, 14399ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 14403ec35e52SJack F Vogel } 14413ec35e52SJack F Vogel 14425b7f4cedSJack F Vogel /** 14435b7f4cedSJack F Vogel * ixgbe_init_uta_tables - Initializes Unicast Table Arrays. 14445b7f4cedSJack F Vogel * @hw: pointer to hardware structure 14455b7f4cedSJack F Vogel * 14465b7f4cedSJack F Vogel * Initializes the Unicast Table Arrays to zero on device load. This 14475b7f4cedSJack F Vogel * is part of the Rx init addr execution path. 14485b7f4cedSJack F Vogel **/ 14495b7f4cedSJack F Vogel s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw) 14505b7f4cedSJack F Vogel { 14515b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw), 14525b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 14535b7f4cedSJack F Vogel } 14541b6e0dbaSJack F Vogel 14551b6e0dbaSJack F Vogel /** 14560ac6dfecSJack F Vogel * ixgbe_read_i2c_byte - Reads 8 bit word over I2C at specified device address 14570ac6dfecSJack F Vogel * @hw: pointer to hardware structure 14580ac6dfecSJack F Vogel * @byte_offset: byte offset to read 1459758cc3dcSJack F Vogel * @dev_addr: I2C bus address to read from 14600ac6dfecSJack F Vogel * @data: value read 14610ac6dfecSJack F Vogel * 14620ac6dfecSJack F Vogel * Performs byte read operation to SFP module's EEPROM over I2C interface. 14630ac6dfecSJack F Vogel **/ 14640ac6dfecSJack F Vogel s32 ixgbe_read_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, 14650ac6dfecSJack F Vogel u8 *data) 14660ac6dfecSJack F Vogel { 14670ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte, (hw, byte_offset, 14680ac6dfecSJack F Vogel dev_addr, data), IXGBE_NOT_IMPLEMENTED); 14690ac6dfecSJack F Vogel } 14700ac6dfecSJack F Vogel 14710ac6dfecSJack F Vogel /** 14726f37f232SEric Joyner * ixgbe_read_i2c_byte_unlocked - Reads 8 bit word via I2C from device address 14736f37f232SEric Joyner * @hw: pointer to hardware structure 14746f37f232SEric Joyner * @byte_offset: byte offset to read 14756f37f232SEric Joyner * @dev_addr: I2C bus address to read from 14766f37f232SEric Joyner * @data: value read 14776f37f232SEric Joyner * 14786f37f232SEric Joyner * Performs byte read operation to SFP module's EEPROM over I2C interface. 14796f37f232SEric Joyner **/ 14806f37f232SEric Joyner s32 ixgbe_read_i2c_byte_unlocked(struct ixgbe_hw *hw, u8 byte_offset, 14816f37f232SEric Joyner u8 dev_addr, u8 *data) 14826f37f232SEric Joyner { 14836f37f232SEric Joyner return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte_unlocked, 14846f37f232SEric Joyner (hw, byte_offset, dev_addr, data), 14856f37f232SEric Joyner IXGBE_NOT_IMPLEMENTED); 14866f37f232SEric Joyner } 14876f37f232SEric Joyner 14886f37f232SEric Joyner /** 14898eb6488eSEric Joyner * ixgbe_read_link - Perform read operation on link device 1490758cc3dcSJack F Vogel * @hw: pointer to the hardware structure 14918eb6488eSEric Joyner * @addr: bus address to read from 14928eb6488eSEric Joyner * @reg: device register to read from 1493758cc3dcSJack F Vogel * @val: pointer to location to receive read value 1494758cc3dcSJack F Vogel * 1495758cc3dcSJack F Vogel * Returns an error code on error. 1496758cc3dcSJack F Vogel */ 14978eb6488eSEric Joyner s32 ixgbe_read_link(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 *val) 1498758cc3dcSJack F Vogel { 14998eb6488eSEric Joyner return ixgbe_call_func(hw, hw->link.ops.read_link, (hw, addr, 1500758cc3dcSJack F Vogel reg, val), IXGBE_NOT_IMPLEMENTED); 1501758cc3dcSJack F Vogel } 1502758cc3dcSJack F Vogel 1503758cc3dcSJack F Vogel /** 15048eb6488eSEric Joyner * ixgbe_read_link_unlocked - Perform read operation on link device 15056f37f232SEric Joyner * @hw: pointer to the hardware structure 15068eb6488eSEric Joyner * @addr: bus address to read from 15078eb6488eSEric Joyner * @reg: device register to read from 15086f37f232SEric Joyner * @val: pointer to location to receive read value 15096f37f232SEric Joyner * 15106f37f232SEric Joyner * Returns an error code on error. 15116f37f232SEric Joyner **/ 15128eb6488eSEric Joyner s32 ixgbe_read_link_unlocked(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 *val) 15136f37f232SEric Joyner { 15148eb6488eSEric Joyner return ixgbe_call_func(hw, hw->link.ops.read_link_unlocked, 15158eb6488eSEric Joyner (hw, addr, reg, val), IXGBE_NOT_IMPLEMENTED); 15166f37f232SEric Joyner } 15176f37f232SEric Joyner 15186f37f232SEric Joyner /** 15190ac6dfecSJack F Vogel * ixgbe_write_i2c_byte - Writes 8 bit word over I2C 15200ac6dfecSJack F Vogel * @hw: pointer to hardware structure 15210ac6dfecSJack F Vogel * @byte_offset: byte offset to write 1522758cc3dcSJack F Vogel * @dev_addr: I2C bus address to write to 15230ac6dfecSJack F Vogel * @data: value to write 15240ac6dfecSJack F Vogel * 15250ac6dfecSJack F Vogel * Performs byte write operation to SFP module's EEPROM over I2C interface 15260ac6dfecSJack F Vogel * at a specified device address. 15270ac6dfecSJack F Vogel **/ 15280ac6dfecSJack F Vogel s32 ixgbe_write_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, 15290ac6dfecSJack F Vogel u8 data) 15300ac6dfecSJack F Vogel { 15310ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte, (hw, byte_offset, 15320ac6dfecSJack F Vogel dev_addr, data), IXGBE_NOT_IMPLEMENTED); 15330ac6dfecSJack F Vogel } 15340ac6dfecSJack F Vogel 15350ac6dfecSJack F Vogel /** 15366f37f232SEric Joyner * ixgbe_write_i2c_byte_unlocked - Writes 8 bit word over I2C 15376f37f232SEric Joyner * @hw: pointer to hardware structure 15386f37f232SEric Joyner * @byte_offset: byte offset to write 15396f37f232SEric Joyner * @dev_addr: I2C bus address to write to 15406f37f232SEric Joyner * @data: value to write 15416f37f232SEric Joyner * 15426f37f232SEric Joyner * Performs byte write operation to SFP module's EEPROM over I2C interface 15436f37f232SEric Joyner * at a specified device address. 15446f37f232SEric Joyner **/ 15456f37f232SEric Joyner s32 ixgbe_write_i2c_byte_unlocked(struct ixgbe_hw *hw, u8 byte_offset, 15466f37f232SEric Joyner u8 dev_addr, u8 data) 15476f37f232SEric Joyner { 15486f37f232SEric Joyner return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte_unlocked, 15496f37f232SEric Joyner (hw, byte_offset, dev_addr, data), 15506f37f232SEric Joyner IXGBE_NOT_IMPLEMENTED); 15516f37f232SEric Joyner } 15526f37f232SEric Joyner 15536f37f232SEric Joyner /** 15548eb6488eSEric Joyner * ixgbe_write_link - Perform write operation on link device 1555758cc3dcSJack F Vogel * @hw: pointer to the hardware structure 15568eb6488eSEric Joyner * @addr: bus address to write to 15578eb6488eSEric Joyner * @reg: device register to write to 1558758cc3dcSJack F Vogel * @val: value to write 1559758cc3dcSJack F Vogel * 1560758cc3dcSJack F Vogel * Returns an error code on error. 1561758cc3dcSJack F Vogel */ 15628eb6488eSEric Joyner s32 ixgbe_write_link(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 val) 1563758cc3dcSJack F Vogel { 15648eb6488eSEric Joyner return ixgbe_call_func(hw, hw->link.ops.write_link, 15658eb6488eSEric Joyner (hw, addr, reg, val), IXGBE_NOT_IMPLEMENTED); 1566758cc3dcSJack F Vogel } 1567758cc3dcSJack F Vogel 1568758cc3dcSJack F Vogel /** 15698eb6488eSEric Joyner * ixgbe_write_link_unlocked - Perform write operation on link device 15706f37f232SEric Joyner * @hw: pointer to the hardware structure 15718eb6488eSEric Joyner * @addr: bus address to write to 15728eb6488eSEric Joyner * @reg: device register to write to 15736f37f232SEric Joyner * @val: value to write 15746f37f232SEric Joyner * 15756f37f232SEric Joyner * Returns an error code on error. 15766f37f232SEric Joyner **/ 15778eb6488eSEric Joyner s32 ixgbe_write_link_unlocked(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 val) 15786f37f232SEric Joyner { 15798eb6488eSEric Joyner return ixgbe_call_func(hw, hw->link.ops.write_link_unlocked, 15806f37f232SEric Joyner (hw, addr, reg, val), IXGBE_NOT_IMPLEMENTED); 15816f37f232SEric Joyner } 15826f37f232SEric Joyner 15836f37f232SEric Joyner /** 15840ac6dfecSJack F Vogel * ixgbe_write_i2c_eeprom - Writes 8 bit EEPROM word over I2C interface 15850ac6dfecSJack F Vogel * @hw: pointer to hardware structure 15860ac6dfecSJack F Vogel * @byte_offset: EEPROM byte offset to write 15870ac6dfecSJack F Vogel * @eeprom_data: value to write 15880ac6dfecSJack F Vogel * 15890ac6dfecSJack F Vogel * Performs byte write operation to SFP module's EEPROM over I2C interface. 15900ac6dfecSJack F Vogel **/ 15910ac6dfecSJack F Vogel s32 ixgbe_write_i2c_eeprom(struct ixgbe_hw *hw, 15920ac6dfecSJack F Vogel u8 byte_offset, u8 eeprom_data) 15930ac6dfecSJack F Vogel { 15940ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_i2c_eeprom, 15950ac6dfecSJack F Vogel (hw, byte_offset, eeprom_data), 15960ac6dfecSJack F Vogel IXGBE_NOT_IMPLEMENTED); 15970ac6dfecSJack F Vogel } 15980ac6dfecSJack F Vogel 15990ac6dfecSJack F Vogel /** 16001b6e0dbaSJack F Vogel * ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface 16011b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 16021b6e0dbaSJack F Vogel * @byte_offset: EEPROM byte offset to read 16031b6e0dbaSJack F Vogel * @eeprom_data: value read 16041b6e0dbaSJack F Vogel * 16051b6e0dbaSJack F Vogel * Performs byte read operation to SFP module's EEPROM over I2C interface. 16061b6e0dbaSJack F Vogel **/ 16071b6e0dbaSJack F Vogel s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data) 16081b6e0dbaSJack F Vogel { 16091b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom, 16101b6e0dbaSJack F Vogel (hw, byte_offset, eeprom_data), 16111b6e0dbaSJack F Vogel IXGBE_NOT_IMPLEMENTED); 16121b6e0dbaSJack F Vogel } 16131b6e0dbaSJack F Vogel 16141b6e0dbaSJack F Vogel /** 16151b6e0dbaSJack F Vogel * ixgbe_get_supported_physical_layer - Returns physical layer type 16161b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 16171b6e0dbaSJack F Vogel * 16181b6e0dbaSJack F Vogel * Determines physical layer capabilities of the current configuration. 16191b6e0dbaSJack F Vogel **/ 16208eb6488eSEric Joyner u64 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw) 16211b6e0dbaSJack F Vogel { 16221b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer, 16231b6e0dbaSJack F Vogel (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN); 16241b6e0dbaSJack F Vogel } 16250ac6dfecSJack F Vogel 16260ac6dfecSJack F Vogel /** 1627a621e3c8SJack F Vogel * ixgbe_enable_rx_dma - Enables Rx DMA unit, dependent on device specifics 16280ac6dfecSJack F Vogel * @hw: pointer to hardware structure 16290ac6dfecSJack F Vogel * @regval: bitfield to write to the Rx DMA register 16300ac6dfecSJack F Vogel * 16310ac6dfecSJack F Vogel * Enables the Rx DMA unit of the device. 16320ac6dfecSJack F Vogel **/ 16330ac6dfecSJack F Vogel s32 ixgbe_enable_rx_dma(struct ixgbe_hw *hw, u32 regval) 16340ac6dfecSJack F Vogel { 16350ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_rx_dma, 16360ac6dfecSJack F Vogel (hw, regval), IXGBE_NOT_IMPLEMENTED); 16370ac6dfecSJack F Vogel } 1638d8602bb9SJack F Vogel 1639d8602bb9SJack F Vogel /** 164085d0a26eSJack F Vogel * ixgbe_disable_sec_rx_path - Stops the receive data path 164185d0a26eSJack F Vogel * @hw: pointer to hardware structure 164285d0a26eSJack F Vogel * 164385d0a26eSJack F Vogel * Stops the receive data path. 164485d0a26eSJack F Vogel **/ 164585d0a26eSJack F Vogel s32 ixgbe_disable_sec_rx_path(struct ixgbe_hw *hw) 164685d0a26eSJack F Vogel { 164785d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.disable_sec_rx_path, 164885d0a26eSJack F Vogel (hw), IXGBE_NOT_IMPLEMENTED); 164985d0a26eSJack F Vogel } 165085d0a26eSJack F Vogel 165185d0a26eSJack F Vogel /** 165285d0a26eSJack F Vogel * ixgbe_enable_sec_rx_path - Enables the receive data path 165385d0a26eSJack F Vogel * @hw: pointer to hardware structure 165485d0a26eSJack F Vogel * 165585d0a26eSJack F Vogel * Enables the receive data path. 165685d0a26eSJack F Vogel **/ 165785d0a26eSJack F Vogel s32 ixgbe_enable_sec_rx_path(struct ixgbe_hw *hw) 165885d0a26eSJack F Vogel { 165985d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_sec_rx_path, 166085d0a26eSJack F Vogel (hw), IXGBE_NOT_IMPLEMENTED); 166185d0a26eSJack F Vogel } 166285d0a26eSJack F Vogel 166385d0a26eSJack F Vogel /** 1664d8602bb9SJack F Vogel * ixgbe_acquire_swfw_semaphore - Acquire SWFW semaphore 1665d8602bb9SJack F Vogel * @hw: pointer to hardware structure 1666d8602bb9SJack F Vogel * @mask: Mask to specify which semaphore to acquire 1667d8602bb9SJack F Vogel * 1668d8602bb9SJack F Vogel * Acquires the SWFW semaphore through SW_FW_SYNC register for the specified 1669d8602bb9SJack F Vogel * function (CSR, PHY0, PHY1, EEPROM, Flash) 1670d8602bb9SJack F Vogel **/ 1671758cc3dcSJack F Vogel s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u32 mask) 1672d8602bb9SJack F Vogel { 1673d8602bb9SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.acquire_swfw_sync, 1674d8602bb9SJack F Vogel (hw, mask), IXGBE_NOT_IMPLEMENTED); 1675d8602bb9SJack F Vogel } 1676d8602bb9SJack F Vogel 1677d8602bb9SJack F Vogel /** 1678d8602bb9SJack F Vogel * ixgbe_release_swfw_semaphore - Release SWFW semaphore 1679d8602bb9SJack F Vogel * @hw: pointer to hardware structure 1680d8602bb9SJack F Vogel * @mask: Mask to specify which semaphore to release 1681d8602bb9SJack F Vogel * 1682d8602bb9SJack F Vogel * Releases the SWFW semaphore through SW_FW_SYNC register for the specified 1683d8602bb9SJack F Vogel * function (CSR, PHY0, PHY1, EEPROM, Flash) 1684d8602bb9SJack F Vogel **/ 1685758cc3dcSJack F Vogel void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u32 mask) 1686d8602bb9SJack F Vogel { 1687d8602bb9SJack F Vogel if (hw->mac.ops.release_swfw_sync) 1688d8602bb9SJack F Vogel hw->mac.ops.release_swfw_sync(hw, mask); 1689d8602bb9SJack F Vogel } 1690d8602bb9SJack F Vogel 16918eb6488eSEric Joyner /** 16928eb6488eSEric Joyner * ixgbe_init_swfw_semaphore - Clean up SWFW semaphore 16938eb6488eSEric Joyner * @hw: pointer to hardware structure 16948eb6488eSEric Joyner * 16958eb6488eSEric Joyner * Attempts to acquire the SWFW semaphore through SW_FW_SYNC register. 16968eb6488eSEric Joyner * Regardless of whether is succeeds or not it then release the semaphore. 16978eb6488eSEric Joyner * This is function is called to recover from catastrophic failures that 16988eb6488eSEric Joyner * may have left the semaphore locked. 16998eb6488eSEric Joyner **/ 17008eb6488eSEric Joyner void ixgbe_init_swfw_semaphore(struct ixgbe_hw *hw) 17018eb6488eSEric Joyner { 17028eb6488eSEric Joyner if (hw->mac.ops.init_swfw_sync) 17038eb6488eSEric Joyner hw->mac.ops.init_swfw_sync(hw); 17048eb6488eSEric Joyner } 17058eb6488eSEric Joyner 1706758cc3dcSJack F Vogel 1707758cc3dcSJack F Vogel void ixgbe_disable_rx(struct ixgbe_hw *hw) 1708758cc3dcSJack F Vogel { 1709758cc3dcSJack F Vogel if (hw->mac.ops.disable_rx) 1710758cc3dcSJack F Vogel hw->mac.ops.disable_rx(hw); 1711758cc3dcSJack F Vogel } 1712758cc3dcSJack F Vogel 1713758cc3dcSJack F Vogel void ixgbe_enable_rx(struct ixgbe_hw *hw) 1714758cc3dcSJack F Vogel { 1715758cc3dcSJack F Vogel if (hw->mac.ops.enable_rx) 1716758cc3dcSJack F Vogel hw->mac.ops.enable_rx(hw); 1717758cc3dcSJack F Vogel } 1718758cc3dcSJack F Vogel 1719758cc3dcSJack F Vogel /** 1720758cc3dcSJack F Vogel * ixgbe_set_rate_select_speed - Set module link speed 1721758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1722758cc3dcSJack F Vogel * @speed: link speed to set 1723758cc3dcSJack F Vogel * 1724758cc3dcSJack F Vogel * Set module link speed via the rate select. 1725758cc3dcSJack F Vogel */ 1726758cc3dcSJack F Vogel void ixgbe_set_rate_select_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed) 1727758cc3dcSJack F Vogel { 1728758cc3dcSJack F Vogel if (hw->mac.ops.set_rate_select_speed) 1729758cc3dcSJack F Vogel hw->mac.ops.set_rate_select_speed(hw, speed); 1730758cc3dcSJack F Vogel } 1731