19ca4041bSJack F Vogel /****************************************************************************** 213705f88SJack F Vogel 36f37f232SEric Joyner Copyright (c) 2001-2015, Intel Corporation 413705f88SJack F Vogel All rights reserved. 513705f88SJack F Vogel 613705f88SJack F Vogel Redistribution and use in source and binary forms, with or without 713705f88SJack F Vogel modification, are permitted provided that the following conditions are met: 813705f88SJack F Vogel 913705f88SJack F Vogel 1. Redistributions of source code must retain the above copyright notice, 1013705f88SJack F Vogel this list of conditions and the following disclaimer. 1113705f88SJack F Vogel 1213705f88SJack F Vogel 2. Redistributions in binary form must reproduce the above copyright 1313705f88SJack F Vogel notice, this list of conditions and the following disclaimer in the 1413705f88SJack F Vogel documentation and/or other materials provided with the distribution. 1513705f88SJack F Vogel 1613705f88SJack F Vogel 3. Neither the name of the Intel Corporation nor the names of its 1713705f88SJack F Vogel contributors may be used to endorse or promote products derived from 1813705f88SJack F Vogel this software without specific prior written permission. 1913705f88SJack F Vogel 2013705f88SJack F Vogel THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2113705f88SJack F Vogel AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2213705f88SJack F Vogel IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2313705f88SJack F Vogel ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 2413705f88SJack F Vogel LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2513705f88SJack F Vogel CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2613705f88SJack F Vogel SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2713705f88SJack F Vogel INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2813705f88SJack F Vogel CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2913705f88SJack F Vogel ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3013705f88SJack F Vogel POSSIBILITY OF SUCH DAMAGE. 3113705f88SJack F Vogel 329ca4041bSJack F Vogel ******************************************************************************/ 3313705f88SJack F Vogel /*$FreeBSD$*/ 3413705f88SJack F Vogel 3513705f88SJack F Vogel #include "ixgbe_api.h" 3613705f88SJack F Vogel #include "ixgbe_common.h" 3713705f88SJack F Vogel 386f37f232SEric Joyner static const u32 ixgbe_mvals_base[IXGBE_MVALS_IDX_LIMIT] = { 396f37f232SEric Joyner IXGBE_MVALS_INIT() 406f37f232SEric Joyner }; 416f37f232SEric Joyner 426f37f232SEric Joyner static const u32 ixgbe_mvals_X540[IXGBE_MVALS_IDX_LIMIT] = { 436f37f232SEric Joyner IXGBE_MVALS_INIT(_X540) 446f37f232SEric Joyner }; 456f37f232SEric Joyner 466f37f232SEric Joyner static const u32 ixgbe_mvals_X550[IXGBE_MVALS_IDX_LIMIT] = { 476f37f232SEric Joyner IXGBE_MVALS_INIT(_X550) 486f37f232SEric Joyner }; 496f37f232SEric Joyner 506f37f232SEric Joyner static const u32 ixgbe_mvals_X550EM_x[IXGBE_MVALS_IDX_LIMIT] = { 516f37f232SEric Joyner IXGBE_MVALS_INIT(_X550EM_x) 526f37f232SEric Joyner }; 536f37f232SEric Joyner 5413705f88SJack F Vogel /** 55fd75b91dSJack F Vogel * ixgbe_dcb_get_rtrup2tc - read rtrup2tc reg 56fd75b91dSJack F Vogel * @hw: pointer to hardware structure 57fd75b91dSJack F Vogel * @map: pointer to u8 arr for returning map 58fd75b91dSJack F Vogel * 59fd75b91dSJack F Vogel * Read the rtrup2tc HW register and resolve its content into map 60fd75b91dSJack F Vogel **/ 61fd75b91dSJack F Vogel void ixgbe_dcb_get_rtrup2tc(struct ixgbe_hw *hw, u8 *map) 62fd75b91dSJack F Vogel { 63fd75b91dSJack F Vogel if (hw->mac.ops.get_rtrup2tc) 64fd75b91dSJack F Vogel hw->mac.ops.get_rtrup2tc(hw, map); 65fd75b91dSJack F Vogel } 66fd75b91dSJack F Vogel 67fd75b91dSJack F Vogel /** 6813705f88SJack F Vogel * ixgbe_init_shared_code - Initialize the shared code 6913705f88SJack F Vogel * @hw: pointer to hardware structure 7013705f88SJack F Vogel * 7113705f88SJack F Vogel * This will assign function pointers and assign the MAC type and PHY code. 7213705f88SJack F Vogel * Does not touch the hardware. This function must be called prior to any 7313705f88SJack F Vogel * other function in the shared code. The ixgbe_hw structure should be 7413705f88SJack F Vogel * memset to 0 prior to calling this function. The following fields in 7513705f88SJack F Vogel * hw structure should be filled in prior to calling this function: 7613705f88SJack F Vogel * hw_addr, back, device_id, vendor_id, subsystem_device_id, 7713705f88SJack F Vogel * subsystem_vendor_id, and revision_id 7813705f88SJack F Vogel **/ 7913705f88SJack F Vogel s32 ixgbe_init_shared_code(struct ixgbe_hw *hw) 8013705f88SJack F Vogel { 813ec35e52SJack F Vogel s32 status; 8213705f88SJack F Vogel 832969bf0eSJack F Vogel DEBUGFUNC("ixgbe_init_shared_code"); 842969bf0eSJack F Vogel 8513705f88SJack F Vogel /* 863ec35e52SJack F Vogel * Set the mac type 873ec35e52SJack F Vogel */ 883ec35e52SJack F Vogel ixgbe_set_mac_type(hw); 893ec35e52SJack F Vogel 903ec35e52SJack F Vogel switch (hw->mac.type) { 913ec35e52SJack F Vogel case ixgbe_mac_82598EB: 929ca4041bSJack F Vogel status = ixgbe_init_ops_82598(hw); 9313705f88SJack F Vogel break; 940ac6dfecSJack F Vogel case ixgbe_mac_82599EB: 950ac6dfecSJack F Vogel status = ixgbe_init_ops_82599(hw); 960ac6dfecSJack F Vogel break; 9785d0a26eSJack F Vogel case ixgbe_mac_X540: 9885d0a26eSJack F Vogel status = ixgbe_init_ops_X540(hw); 9985d0a26eSJack F Vogel break; 100758cc3dcSJack F Vogel case ixgbe_mac_X550: 101758cc3dcSJack F Vogel status = ixgbe_init_ops_X550(hw); 102758cc3dcSJack F Vogel break; 103758cc3dcSJack F Vogel case ixgbe_mac_X550EM_x: 104758cc3dcSJack F Vogel status = ixgbe_init_ops_X550EM(hw); 105758cc3dcSJack F Vogel break; 106758cc3dcSJack F Vogel case ixgbe_mac_82599_vf: 107758cc3dcSJack F Vogel case ixgbe_mac_X540_vf: 108758cc3dcSJack F Vogel case ixgbe_mac_X550_vf: 109758cc3dcSJack F Vogel case ixgbe_mac_X550EM_x_vf: 110758cc3dcSJack F Vogel status = ixgbe_init_ops_vf(hw); 111758cc3dcSJack F Vogel break; 11213705f88SJack F Vogel default: 11313705f88SJack F Vogel status = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 11413705f88SJack F Vogel break; 11513705f88SJack F Vogel } 11613705f88SJack F Vogel 11713705f88SJack F Vogel return status; 11813705f88SJack F Vogel } 11913705f88SJack F Vogel 12013705f88SJack F Vogel /** 1213ec35e52SJack F Vogel * ixgbe_set_mac_type - Sets MAC type 1223ec35e52SJack F Vogel * @hw: pointer to the HW structure 1233ec35e52SJack F Vogel * 1243ec35e52SJack F Vogel * This function sets the mac type of the adapter based on the 1253ec35e52SJack F Vogel * vendor ID and device ID stored in the hw structure. 1263ec35e52SJack F Vogel **/ 1273ec35e52SJack F Vogel s32 ixgbe_set_mac_type(struct ixgbe_hw *hw) 1283ec35e52SJack F Vogel { 1293ec35e52SJack F Vogel s32 ret_val = IXGBE_SUCCESS; 1303ec35e52SJack F Vogel 1319ca4041bSJack F Vogel DEBUGFUNC("ixgbe_set_mac_type\n"); 1323ec35e52SJack F Vogel 133fd75b91dSJack F Vogel if (hw->vendor_id != IXGBE_INTEL_VENDOR_ID) { 134fd75b91dSJack F Vogel ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED, 135fd75b91dSJack F Vogel "Unsupported vendor id: %x", hw->vendor_id); 136fd75b91dSJack F Vogel return IXGBE_ERR_DEVICE_NOT_SUPPORTED; 137fd75b91dSJack F Vogel } 138fd75b91dSJack F Vogel 1396f37f232SEric Joyner hw->mvals = ixgbe_mvals_base; 1406f37f232SEric Joyner 1413ec35e52SJack F Vogel switch (hw->device_id) { 1421b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598: 1430ac6dfecSJack F Vogel case IXGBE_DEV_ID_82598_BX: 1443ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_SINGLE_PORT: 1453ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_DUAL_PORT: 1469ca4041bSJack F Vogel case IXGBE_DEV_ID_82598AT: 1472969bf0eSJack F Vogel case IXGBE_DEV_ID_82598AT2: 1483ec35e52SJack F Vogel case IXGBE_DEV_ID_82598EB_CX4: 1499ca4041bSJack F Vogel case IXGBE_DEV_ID_82598_CX4_DUAL_PORT: 1501b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_DA_DUAL_PORT: 1511b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM: 1529ca4041bSJack F Vogel case IXGBE_DEV_ID_82598EB_XF_LR: 1531b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598EB_SFP_LOM: 1543ec35e52SJack F Vogel hw->mac.type = ixgbe_mac_82598EB; 1553ec35e52SJack F Vogel break; 1560ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_KX4: 1572969bf0eSJack F Vogel case IXGBE_DEV_ID_82599_KX4_MEZZ: 158d8602bb9SJack F Vogel case IXGBE_DEV_ID_82599_XAUI_LOM: 1592969bf0eSJack F Vogel case IXGBE_DEV_ID_82599_COMBO_BACKPLANE: 16085d0a26eSJack F Vogel case IXGBE_DEV_ID_82599_KR: 1610ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_SFP: 1621a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_BACKPLANE_FCOE: 1631a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_SFP_FCOE: 16485d0a26eSJack F Vogel case IXGBE_DEV_ID_82599_SFP_EM: 165a621e3c8SJack F Vogel case IXGBE_DEV_ID_82599_SFP_SF2: 1660ecc2ff0SJack F Vogel case IXGBE_DEV_ID_82599_SFP_SF_QP: 167758cc3dcSJack F Vogel case IXGBE_DEV_ID_82599_QSFP_SF_QP: 16885d0a26eSJack F Vogel case IXGBE_DEV_ID_82599EN_SFP: 1690ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_CX4: 1700ecc2ff0SJack F Vogel case IXGBE_DEV_ID_82599_BYPASS: 171c0014855SJack F Vogel case IXGBE_DEV_ID_82599_T3_LOM: 1720ac6dfecSJack F Vogel hw->mac.type = ixgbe_mac_82599EB; 1730ac6dfecSJack F Vogel break; 1741a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_VF: 1750ecc2ff0SJack F Vogel case IXGBE_DEV_ID_82599_VF_HV: 1761a4e3449SJack F Vogel hw->mac.type = ixgbe_mac_82599_vf; 1771a4e3449SJack F Vogel break; 17885d0a26eSJack F Vogel case IXGBE_DEV_ID_X540_VF: 1790ecc2ff0SJack F Vogel case IXGBE_DEV_ID_X540_VF_HV: 18085d0a26eSJack F Vogel hw->mac.type = ixgbe_mac_X540_vf; 1816f37f232SEric Joyner hw->mvals = ixgbe_mvals_X540; 18285d0a26eSJack F Vogel break; 18385d0a26eSJack F Vogel case IXGBE_DEV_ID_X540T: 184758cc3dcSJack F Vogel case IXGBE_DEV_ID_X540T1: 1850ecc2ff0SJack F Vogel case IXGBE_DEV_ID_X540_BYPASS: 18685d0a26eSJack F Vogel hw->mac.type = ixgbe_mac_X540; 1876f37f232SEric Joyner hw->mvals = ixgbe_mvals_X540; 18885d0a26eSJack F Vogel break; 189758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550T: 190758cc3dcSJack F Vogel hw->mac.type = ixgbe_mac_X550; 1916f37f232SEric Joyner hw->mvals = ixgbe_mvals_X550; 192758cc3dcSJack F Vogel break; 193758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550EM_X_KX4: 194758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550EM_X_KR: 195758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550EM_X_10G_T: 196758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550EM_X_1G_T: 197758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550EM_X_SFP: 198758cc3dcSJack F Vogel hw->mac.type = ixgbe_mac_X550EM_x; 1996f37f232SEric Joyner hw->mvals = ixgbe_mvals_X550EM_x; 200758cc3dcSJack F Vogel break; 201758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550_VF: 202758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550_VF_HV: 203758cc3dcSJack F Vogel hw->mac.type = ixgbe_mac_X550_vf; 2046f37f232SEric Joyner hw->mvals = ixgbe_mvals_X550; 205758cc3dcSJack F Vogel break; 206758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550EM_X_VF: 207758cc3dcSJack F Vogel case IXGBE_DEV_ID_X550EM_X_VF_HV: 208758cc3dcSJack F Vogel hw->mac.type = ixgbe_mac_X550EM_x_vf; 2096f37f232SEric Joyner hw->mvals = ixgbe_mvals_X550EM_x; 210758cc3dcSJack F Vogel break; 2113ec35e52SJack F Vogel default: 2123ec35e52SJack F Vogel ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 213fd75b91dSJack F Vogel ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED, 214fd75b91dSJack F Vogel "Unsupported device id: %x", 215fd75b91dSJack F Vogel hw->device_id); 2163ec35e52SJack F Vogel break; 2173ec35e52SJack F Vogel } 2183ec35e52SJack F Vogel 2199ca4041bSJack F Vogel DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n", 2209ca4041bSJack F Vogel hw->mac.type, ret_val); 2213ec35e52SJack F Vogel return ret_val; 2223ec35e52SJack F Vogel } 2233ec35e52SJack F Vogel 2243ec35e52SJack F Vogel /** 22513705f88SJack F Vogel * ixgbe_init_hw - Initialize the hardware 22613705f88SJack F Vogel * @hw: pointer to hardware structure 22713705f88SJack F Vogel * 22813705f88SJack F Vogel * Initialize the hardware by resetting and then starting the hardware 22913705f88SJack F Vogel **/ 23013705f88SJack F Vogel s32 ixgbe_init_hw(struct ixgbe_hw *hw) 23113705f88SJack F Vogel { 2329ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw), 23313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 23413705f88SJack F Vogel } 23513705f88SJack F Vogel 23613705f88SJack F Vogel /** 23713705f88SJack F Vogel * ixgbe_reset_hw - Performs a hardware reset 23813705f88SJack F Vogel * @hw: pointer to hardware structure 23913705f88SJack F Vogel * 24013705f88SJack F Vogel * Resets the hardware by resetting the transmit and receive units, masks and 24113705f88SJack F Vogel * clears all interrupts, performs a PHY reset, and performs a MAC reset 24213705f88SJack F Vogel **/ 24313705f88SJack F Vogel s32 ixgbe_reset_hw(struct ixgbe_hw *hw) 24413705f88SJack F Vogel { 2459ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw), 24613705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 24713705f88SJack F Vogel } 24813705f88SJack F Vogel 24913705f88SJack F Vogel /** 2509ca4041bSJack F Vogel * ixgbe_start_hw - Prepares hardware for Rx/Tx 25113705f88SJack F Vogel * @hw: pointer to hardware structure 25213705f88SJack F Vogel * 25313705f88SJack F Vogel * Starts the hardware by filling the bus info structure and media type, 25413705f88SJack F Vogel * clears all on chip counters, initializes receive address registers, 25513705f88SJack F Vogel * multicast table, VLAN filter table, calls routine to setup link and 25613705f88SJack F Vogel * flow control settings, and leaves transmit and receive units disabled 25713705f88SJack F Vogel * and uninitialized. 25813705f88SJack F Vogel **/ 25913705f88SJack F Vogel s32 ixgbe_start_hw(struct ixgbe_hw *hw) 26013705f88SJack F Vogel { 2619ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw), 26213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 26313705f88SJack F Vogel } 26413705f88SJack F Vogel 26513705f88SJack F Vogel /** 266c0014855SJack F Vogel * ixgbe_enable_relaxed_ordering - Enables tx relaxed ordering, 267c0014855SJack F Vogel * which is disabled by default in ixgbe_start_hw(); 268c0014855SJack F Vogel * 269c0014855SJack F Vogel * @hw: pointer to hardware structure 270c0014855SJack F Vogel * 271c0014855SJack F Vogel * Enable relaxed ordering; 272c0014855SJack F Vogel **/ 273c0014855SJack F Vogel void ixgbe_enable_relaxed_ordering(struct ixgbe_hw *hw) 274c0014855SJack F Vogel { 275c0014855SJack F Vogel if (hw->mac.ops.enable_relaxed_ordering) 276c0014855SJack F Vogel hw->mac.ops.enable_relaxed_ordering(hw); 277c0014855SJack F Vogel } 278c0014855SJack F Vogel 279c0014855SJack F Vogel /** 28013705f88SJack F Vogel * ixgbe_clear_hw_cntrs - Clear hardware counters 28113705f88SJack F Vogel * @hw: pointer to hardware structure 28213705f88SJack F Vogel * 28313705f88SJack F Vogel * Clears all hardware statistics counters by reading them from the hardware 28413705f88SJack F Vogel * Statistics counters are clear on read. 28513705f88SJack F Vogel **/ 28613705f88SJack F Vogel s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw) 28713705f88SJack F Vogel { 2889ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw), 28913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 29013705f88SJack F Vogel } 29113705f88SJack F Vogel 29213705f88SJack F Vogel /** 29313705f88SJack F Vogel * ixgbe_get_media_type - Get media type 29413705f88SJack F Vogel * @hw: pointer to hardware structure 29513705f88SJack F Vogel * 29613705f88SJack F Vogel * Returns the media type (fiber, copper, backplane) 29713705f88SJack F Vogel **/ 29813705f88SJack F Vogel enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw) 29913705f88SJack F Vogel { 3009ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw), 30113705f88SJack F Vogel ixgbe_media_type_unknown); 30213705f88SJack F Vogel } 30313705f88SJack F Vogel 30413705f88SJack F Vogel /** 30513705f88SJack F Vogel * ixgbe_get_mac_addr - Get MAC address 30613705f88SJack F Vogel * @hw: pointer to hardware structure 30713705f88SJack F Vogel * @mac_addr: Adapter MAC address 30813705f88SJack F Vogel * 30913705f88SJack F Vogel * Reads the adapter's MAC address from the first Receive Address Register 3109ca4041bSJack F Vogel * (RAR0) A reset of the adapter must have been performed prior to calling 3119ca4041bSJack F Vogel * this function in order for the MAC address to have been loaded from the 3129ca4041bSJack F Vogel * EEPROM into RAR0 31313705f88SJack F Vogel **/ 31413705f88SJack F Vogel s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr) 31513705f88SJack F Vogel { 3169ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr, 31713705f88SJack F Vogel (hw, mac_addr), IXGBE_NOT_IMPLEMENTED); 31813705f88SJack F Vogel } 31913705f88SJack F Vogel 32013705f88SJack F Vogel /** 3210ac6dfecSJack F Vogel * ixgbe_get_san_mac_addr - Get SAN MAC address 3220ac6dfecSJack F Vogel * @hw: pointer to hardware structure 3230ac6dfecSJack F Vogel * @san_mac_addr: SAN MAC address 3240ac6dfecSJack F Vogel * 3250ac6dfecSJack F Vogel * Reads the SAN MAC address from the EEPROM, if it's available. This is 3260ac6dfecSJack F Vogel * per-port, so set_lan_id() must be called before reading the addresses. 3270ac6dfecSJack F Vogel **/ 3280ac6dfecSJack F Vogel s32 ixgbe_get_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr) 3290ac6dfecSJack F Vogel { 3300ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_san_mac_addr, 3310ac6dfecSJack F Vogel (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED); 3320ac6dfecSJack F Vogel } 3330ac6dfecSJack F Vogel 3340ac6dfecSJack F Vogel /** 3350ac6dfecSJack F Vogel * ixgbe_set_san_mac_addr - Write a SAN MAC address 3360ac6dfecSJack F Vogel * @hw: pointer to hardware structure 3370ac6dfecSJack F Vogel * @san_mac_addr: SAN MAC address 3380ac6dfecSJack F Vogel * 3390ac6dfecSJack F Vogel * Writes A SAN MAC address to the EEPROM. 3400ac6dfecSJack F Vogel **/ 3410ac6dfecSJack F Vogel s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr) 3420ac6dfecSJack F Vogel { 3430ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_san_mac_addr, 3440ac6dfecSJack F Vogel (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED); 3450ac6dfecSJack F Vogel } 3460ac6dfecSJack F Vogel 3470ac6dfecSJack F Vogel /** 3480ac6dfecSJack F Vogel * ixgbe_get_device_caps - Get additional device capabilities 3490ac6dfecSJack F Vogel * @hw: pointer to hardware structure 3500ac6dfecSJack F Vogel * @device_caps: the EEPROM word for device capabilities 3510ac6dfecSJack F Vogel * 3520ac6dfecSJack F Vogel * Reads the extra device capabilities from the EEPROM 3530ac6dfecSJack F Vogel **/ 3540ac6dfecSJack F Vogel s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps) 3550ac6dfecSJack F Vogel { 3560ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_device_caps, 3570ac6dfecSJack F Vogel (hw, device_caps), IXGBE_NOT_IMPLEMENTED); 3580ac6dfecSJack F Vogel } 3590ac6dfecSJack F Vogel 3600ac6dfecSJack F Vogel /** 3612969bf0eSJack F Vogel * ixgbe_get_wwn_prefix - Get alternative WWNN/WWPN prefix from the EEPROM 3622969bf0eSJack F Vogel * @hw: pointer to hardware structure 3632969bf0eSJack F Vogel * @wwnn_prefix: the alternative WWNN prefix 3642969bf0eSJack F Vogel * @wwpn_prefix: the alternative WWPN prefix 3652969bf0eSJack F Vogel * 3662969bf0eSJack F Vogel * This function will read the EEPROM from the alternative SAN MAC address 3672969bf0eSJack F Vogel * block to check the support for the alternative WWNN/WWPN prefix support. 3682969bf0eSJack F Vogel **/ 3692969bf0eSJack F Vogel s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix, 3702969bf0eSJack F Vogel u16 *wwpn_prefix) 3712969bf0eSJack F Vogel { 3722969bf0eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_wwn_prefix, 3732969bf0eSJack F Vogel (hw, wwnn_prefix, wwpn_prefix), 3742969bf0eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 3752969bf0eSJack F Vogel } 3762969bf0eSJack F Vogel 3772969bf0eSJack F Vogel /** 3781a4e3449SJack F Vogel * ixgbe_get_fcoe_boot_status - Get FCOE boot status from EEPROM 3791a4e3449SJack F Vogel * @hw: pointer to hardware structure 3801a4e3449SJack F Vogel * @bs: the fcoe boot status 3811a4e3449SJack F Vogel * 3821a4e3449SJack F Vogel * This function will read the FCOE boot status from the iSCSI FCOE block 3831a4e3449SJack F Vogel **/ 3841a4e3449SJack F Vogel s32 ixgbe_get_fcoe_boot_status(struct ixgbe_hw *hw, u16 *bs) 3851a4e3449SJack F Vogel { 3861a4e3449SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_fcoe_boot_status, 3871a4e3449SJack F Vogel (hw, bs), 3881a4e3449SJack F Vogel IXGBE_NOT_IMPLEMENTED); 3891a4e3449SJack F Vogel } 3901a4e3449SJack F Vogel 3911a4e3449SJack F Vogel /** 39213705f88SJack F Vogel * ixgbe_get_bus_info - Set PCI bus info 39313705f88SJack F Vogel * @hw: pointer to hardware structure 39413705f88SJack F Vogel * 39513705f88SJack F Vogel * Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure 39613705f88SJack F Vogel **/ 39713705f88SJack F Vogel s32 ixgbe_get_bus_info(struct ixgbe_hw *hw) 39813705f88SJack F Vogel { 3999ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw), 40013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 40113705f88SJack F Vogel } 40213705f88SJack F Vogel 40313705f88SJack F Vogel /** 4049ca4041bSJack F Vogel * ixgbe_get_num_of_tx_queues - Get Tx queues 40513705f88SJack F Vogel * @hw: pointer to hardware structure 40613705f88SJack F Vogel * 40713705f88SJack F Vogel * Returns the number of transmit queues for the given adapter. 40813705f88SJack F Vogel **/ 40913705f88SJack F Vogel u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw) 41013705f88SJack F Vogel { 4119ca4041bSJack F Vogel return hw->mac.max_tx_queues; 41213705f88SJack F Vogel } 41313705f88SJack F Vogel 41413705f88SJack F Vogel /** 4159ca4041bSJack F Vogel * ixgbe_get_num_of_rx_queues - Get Rx queues 41613705f88SJack F Vogel * @hw: pointer to hardware structure 41713705f88SJack F Vogel * 41813705f88SJack F Vogel * Returns the number of receive queues for the given adapter. 41913705f88SJack F Vogel **/ 42013705f88SJack F Vogel u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw) 42113705f88SJack F Vogel { 4229ca4041bSJack F Vogel return hw->mac.max_rx_queues; 42313705f88SJack F Vogel } 42413705f88SJack F Vogel 42513705f88SJack F Vogel /** 4269ca4041bSJack F Vogel * ixgbe_stop_adapter - Disable Rx/Tx units 42713705f88SJack F Vogel * @hw: pointer to hardware structure 42813705f88SJack F Vogel * 42913705f88SJack F Vogel * Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts, 43013705f88SJack F Vogel * disables transmit and receive units. The adapter_stopped flag is used by 43113705f88SJack F Vogel * the shared code and drivers to determine if the adapter is in a stopped 43213705f88SJack F Vogel * state and should not touch the hardware. 43313705f88SJack F Vogel **/ 43413705f88SJack F Vogel s32 ixgbe_stop_adapter(struct ixgbe_hw *hw) 43513705f88SJack F Vogel { 4369ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw), 43713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 43813705f88SJack F Vogel } 43913705f88SJack F Vogel 44013705f88SJack F Vogel /** 4411a4e3449SJack F Vogel * ixgbe_read_pba_string - Reads part number string from EEPROM 4421a4e3449SJack F Vogel * @hw: pointer to hardware structure 4431a4e3449SJack F Vogel * @pba_num: stores the part number string from the EEPROM 4441a4e3449SJack F Vogel * @pba_num_size: part number string buffer length 4451a4e3449SJack F Vogel * 4461a4e3449SJack F Vogel * Reads the part number string from the EEPROM. 4471a4e3449SJack F Vogel **/ 4481a4e3449SJack F Vogel s32 ixgbe_read_pba_string(struct ixgbe_hw *hw, u8 *pba_num, u32 pba_num_size) 4491a4e3449SJack F Vogel { 4501a4e3449SJack F Vogel return ixgbe_read_pba_string_generic(hw, pba_num, pba_num_size); 4511a4e3449SJack F Vogel } 4521a4e3449SJack F Vogel 4531a4e3449SJack F Vogel /** 4549ca4041bSJack F Vogel * ixgbe_read_pba_num - Reads part number from EEPROM 4559ca4041bSJack F Vogel * @hw: pointer to hardware structure 4569ca4041bSJack F Vogel * @pba_num: stores the part number from the EEPROM 4579ca4041bSJack F Vogel * 4589ca4041bSJack F Vogel * Reads the part number from the EEPROM. 4599ca4041bSJack F Vogel **/ 4609ca4041bSJack F Vogel s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num) 4619ca4041bSJack F Vogel { 4629ca4041bSJack F Vogel return ixgbe_read_pba_num_generic(hw, pba_num); 4639ca4041bSJack F Vogel } 4649ca4041bSJack F Vogel 4659ca4041bSJack F Vogel /** 46613705f88SJack F Vogel * ixgbe_identify_phy - Get PHY type 46713705f88SJack F Vogel * @hw: pointer to hardware structure 46813705f88SJack F Vogel * 46913705f88SJack F Vogel * Determines the physical layer module found on the current adapter. 47013705f88SJack F Vogel **/ 47113705f88SJack F Vogel s32 ixgbe_identify_phy(struct ixgbe_hw *hw) 47213705f88SJack F Vogel { 47313705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 47413705f88SJack F Vogel 47513705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 4761a4e3449SJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.identify, (hw), 47713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 47813705f88SJack F Vogel } 47913705f88SJack F Vogel 48013705f88SJack F Vogel return status; 48113705f88SJack F Vogel } 48213705f88SJack F Vogel 48313705f88SJack F Vogel /** 48413705f88SJack F Vogel * ixgbe_reset_phy - Perform a PHY reset 48513705f88SJack F Vogel * @hw: pointer to hardware structure 48613705f88SJack F Vogel **/ 48713705f88SJack F Vogel s32 ixgbe_reset_phy(struct ixgbe_hw *hw) 48813705f88SJack F Vogel { 48913705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 49013705f88SJack F Vogel 49113705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 4921b6e0dbaSJack F Vogel if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS) 49313705f88SJack F Vogel status = IXGBE_ERR_PHY; 49413705f88SJack F Vogel } 49513705f88SJack F Vogel 49613705f88SJack F Vogel if (status == IXGBE_SUCCESS) { 4979ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw), 49813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 49913705f88SJack F Vogel } 50013705f88SJack F Vogel return status; 50113705f88SJack F Vogel } 50213705f88SJack F Vogel 50313705f88SJack F Vogel /** 5049ca4041bSJack F Vogel * ixgbe_get_phy_firmware_version - 5059ca4041bSJack F Vogel * @hw: pointer to hardware structure 5069ca4041bSJack F Vogel * @firmware_version: pointer to firmware version 5079ca4041bSJack F Vogel **/ 5089ca4041bSJack F Vogel s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version) 5099ca4041bSJack F Vogel { 5109ca4041bSJack F Vogel s32 status = IXGBE_SUCCESS; 5119ca4041bSJack F Vogel 5129ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version, 5139ca4041bSJack F Vogel (hw, firmware_version), 5149ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 5159ca4041bSJack F Vogel return status; 5169ca4041bSJack F Vogel } 5179ca4041bSJack F Vogel 5189ca4041bSJack F Vogel /** 51913705f88SJack F Vogel * ixgbe_read_phy_reg - Read PHY register 52013705f88SJack F Vogel * @hw: pointer to hardware structure 52113705f88SJack F Vogel * @reg_addr: 32 bit address of PHY register to read 52213705f88SJack F Vogel * @phy_data: Pointer to read data from PHY register 52313705f88SJack F Vogel * 52413705f88SJack F Vogel * Reads a value from a specified PHY register 52513705f88SJack F Vogel **/ 52613705f88SJack F Vogel s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 52713705f88SJack F Vogel u16 *phy_data) 52813705f88SJack F Vogel { 5290ac6dfecSJack F Vogel if (hw->phy.id == 0) 5300ac6dfecSJack F Vogel ixgbe_identify_phy(hw); 5310ac6dfecSJack F Vogel 5329ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr, 5339ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 53413705f88SJack F Vogel } 53513705f88SJack F Vogel 53613705f88SJack F Vogel /** 53713705f88SJack F Vogel * ixgbe_write_phy_reg - Write PHY register 53813705f88SJack F Vogel * @hw: pointer to hardware structure 53913705f88SJack F Vogel * @reg_addr: 32 bit PHY register to write 54013705f88SJack F Vogel * @phy_data: Data to write to the PHY register 54113705f88SJack F Vogel * 54213705f88SJack F Vogel * Writes a value to specified PHY register 54313705f88SJack F Vogel **/ 54413705f88SJack F Vogel s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 54513705f88SJack F Vogel u16 phy_data) 54613705f88SJack F Vogel { 5470ac6dfecSJack F Vogel if (hw->phy.id == 0) 5480ac6dfecSJack F Vogel ixgbe_identify_phy(hw); 5490ac6dfecSJack F Vogel 5509ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr, 5519ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 55213705f88SJack F Vogel } 55313705f88SJack F Vogel 5549ca4041bSJack F Vogel /** 5559ca4041bSJack F Vogel * ixgbe_setup_phy_link - Restart PHY autoneg 5569ca4041bSJack F Vogel * @hw: pointer to hardware structure 5579ca4041bSJack F Vogel * 5589ca4041bSJack F Vogel * Restart autonegotiation and PHY and waits for completion. 5599ca4041bSJack F Vogel **/ 5609ca4041bSJack F Vogel s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw) 5619ca4041bSJack F Vogel { 5629ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw), 56313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 56413705f88SJack F Vogel } 5659ca4041bSJack F Vogel 5669ca4041bSJack F Vogel /** 567758cc3dcSJack F Vogel * ixgbe_setup_internal_phy - Configure integrated PHY 568758cc3dcSJack F Vogel * @hw: pointer to hardware structure 569758cc3dcSJack F Vogel * 570758cc3dcSJack F Vogel * Reconfigure the integrated PHY in order to enable talk to the external PHY. 571758cc3dcSJack F Vogel * Returns success if not implemented, since nothing needs to be done in this 572758cc3dcSJack F Vogel * case. 573758cc3dcSJack F Vogel */ 574758cc3dcSJack F Vogel s32 ixgbe_setup_internal_phy(struct ixgbe_hw *hw) 575758cc3dcSJack F Vogel { 576758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_internal_link, (hw), 577758cc3dcSJack F Vogel IXGBE_SUCCESS); 578758cc3dcSJack F Vogel } 579758cc3dcSJack F Vogel 580758cc3dcSJack F Vogel /** 5819ca4041bSJack F Vogel * ixgbe_check_phy_link - Determine link and speed status 5829ca4041bSJack F Vogel * @hw: pointer to hardware structure 5839ca4041bSJack F Vogel * 5849ca4041bSJack F Vogel * Reads a PHY register to determine if link is up and the current speed for 5859ca4041bSJack F Vogel * the PHY. 5869ca4041bSJack F Vogel **/ 5879ca4041bSJack F Vogel s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 5889ca4041bSJack F Vogel bool *link_up) 5899ca4041bSJack F Vogel { 5909ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed, 5919ca4041bSJack F Vogel link_up), IXGBE_NOT_IMPLEMENTED); 5929ca4041bSJack F Vogel } 5939ca4041bSJack F Vogel 5949ca4041bSJack F Vogel /** 5959ca4041bSJack F Vogel * ixgbe_setup_phy_link_speed - Set auto advertise 5969ca4041bSJack F Vogel * @hw: pointer to hardware structure 5979ca4041bSJack F Vogel * @speed: new link speed 5989ca4041bSJack F Vogel * 5999ca4041bSJack F Vogel * Sets the auto advertised capabilities 6009ca4041bSJack F Vogel **/ 6019ca4041bSJack F Vogel s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed, 6029ca4041bSJack F Vogel bool autoneg_wait_to_complete) 6039ca4041bSJack F Vogel { 6049ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_link_speed, (hw, speed, 6050ecc2ff0SJack F Vogel autoneg_wait_to_complete), 6069ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 60713705f88SJack F Vogel } 60813705f88SJack F Vogel 60913705f88SJack F Vogel /** 610758cc3dcSJack F Vogel * ixgbe_set_phy_power - Control the phy power state 611758cc3dcSJack F Vogel * @hw: pointer to hardware structure 612758cc3dcSJack F Vogel * @on: TRUE for on, FALSE for off 613758cc3dcSJack F Vogel */ 614758cc3dcSJack F Vogel s32 ixgbe_set_phy_power(struct ixgbe_hw *hw, bool on) 615758cc3dcSJack F Vogel { 616758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.set_phy_power, (hw, on), 617758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 618758cc3dcSJack F Vogel } 619758cc3dcSJack F Vogel 620758cc3dcSJack F Vogel /** 62113705f88SJack F Vogel * ixgbe_check_link - Get link and speed status 62213705f88SJack F Vogel * @hw: pointer to hardware structure 62313705f88SJack F Vogel * 62413705f88SJack F Vogel * Reads the links register to determine if link is up and the current speed 62513705f88SJack F Vogel **/ 62613705f88SJack F Vogel s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 6279ca4041bSJack F Vogel bool *link_up, bool link_up_wait_to_complete) 62813705f88SJack F Vogel { 6299ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.check_link, (hw, speed, 6309ca4041bSJack F Vogel link_up, link_up_wait_to_complete), 63113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 63213705f88SJack F Vogel } 63313705f88SJack F Vogel 63413705f88SJack F Vogel /** 6351a4e3449SJack F Vogel * ixgbe_disable_tx_laser - Disable Tx laser 6361a4e3449SJack F Vogel * @hw: pointer to hardware structure 6371a4e3449SJack F Vogel * 6381a4e3449SJack F Vogel * If the driver needs to disable the laser on SFI optics. 6391a4e3449SJack F Vogel **/ 6401a4e3449SJack F Vogel void ixgbe_disable_tx_laser(struct ixgbe_hw *hw) 6411a4e3449SJack F Vogel { 6421a4e3449SJack F Vogel if (hw->mac.ops.disable_tx_laser) 6431a4e3449SJack F Vogel hw->mac.ops.disable_tx_laser(hw); 6441a4e3449SJack F Vogel } 6451a4e3449SJack F Vogel 6461a4e3449SJack F Vogel /** 6471a4e3449SJack F Vogel * ixgbe_enable_tx_laser - Enable Tx laser 6481a4e3449SJack F Vogel * @hw: pointer to hardware structure 6491a4e3449SJack F Vogel * 6501a4e3449SJack F Vogel * If the driver needs to enable the laser on SFI optics. 6511a4e3449SJack F Vogel **/ 6521a4e3449SJack F Vogel void ixgbe_enable_tx_laser(struct ixgbe_hw *hw) 6531a4e3449SJack F Vogel { 6541a4e3449SJack F Vogel if (hw->mac.ops.enable_tx_laser) 6551a4e3449SJack F Vogel hw->mac.ops.enable_tx_laser(hw); 6561a4e3449SJack F Vogel } 6571a4e3449SJack F Vogel 6581a4e3449SJack F Vogel /** 6591a4e3449SJack F Vogel * ixgbe_flap_tx_laser - flap Tx laser to start autotry process 6601a4e3449SJack F Vogel * @hw: pointer to hardware structure 6611a4e3449SJack F Vogel * 6621a4e3449SJack F Vogel * When the driver changes the link speeds that it can support then 6631a4e3449SJack F Vogel * flap the tx laser to alert the link partner to start autotry 6641a4e3449SJack F Vogel * process on its end. 6651a4e3449SJack F Vogel **/ 6661a4e3449SJack F Vogel void ixgbe_flap_tx_laser(struct ixgbe_hw *hw) 6671a4e3449SJack F Vogel { 6681a4e3449SJack F Vogel if (hw->mac.ops.flap_tx_laser) 6691a4e3449SJack F Vogel hw->mac.ops.flap_tx_laser(hw); 6701a4e3449SJack F Vogel } 6711a4e3449SJack F Vogel 6721a4e3449SJack F Vogel /** 6732969bf0eSJack F Vogel * ixgbe_setup_link - Set link speed 67413705f88SJack F Vogel * @hw: pointer to hardware structure 67513705f88SJack F Vogel * @speed: new link speed 67613705f88SJack F Vogel * 6772969bf0eSJack F Vogel * Configures link settings. Restarts the link. 6782969bf0eSJack F Vogel * Performs autonegotiation if needed. 67913705f88SJack F Vogel **/ 6802969bf0eSJack F Vogel s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed, 68113705f88SJack F Vogel bool autoneg_wait_to_complete) 68213705f88SJack F Vogel { 6832969bf0eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw, speed, 6840ecc2ff0SJack F Vogel autoneg_wait_to_complete), 68513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 68613705f88SJack F Vogel } 68713705f88SJack F Vogel 68813705f88SJack F Vogel /** 689758cc3dcSJack F Vogel * ixgbe_setup_mac_link - Set link speed 690758cc3dcSJack F Vogel * @hw: pointer to hardware structure 691758cc3dcSJack F Vogel * @speed: new link speed 692758cc3dcSJack F Vogel * 693758cc3dcSJack F Vogel * Configures link settings. Restarts the link. 694758cc3dcSJack F Vogel * Performs autonegotiation if needed. 695758cc3dcSJack F Vogel **/ 696758cc3dcSJack F Vogel s32 ixgbe_setup_mac_link(struct ixgbe_hw *hw, ixgbe_link_speed speed, 697758cc3dcSJack F Vogel bool autoneg_wait_to_complete) 698758cc3dcSJack F Vogel { 699758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_mac_link, (hw, speed, 700758cc3dcSJack F Vogel autoneg_wait_to_complete), 701758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 702758cc3dcSJack F Vogel } 703758cc3dcSJack F Vogel 704758cc3dcSJack F Vogel /** 7059ca4041bSJack F Vogel * ixgbe_get_link_capabilities - Returns link capabilities 70613705f88SJack F Vogel * @hw: pointer to hardware structure 70713705f88SJack F Vogel * 7089ca4041bSJack F Vogel * Determines the link capabilities of the current configuration. 70913705f88SJack F Vogel **/ 7109ca4041bSJack F Vogel s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 71113705f88SJack F Vogel bool *autoneg) 71213705f88SJack F Vogel { 7139ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw, 7149ca4041bSJack F Vogel speed, autoneg), IXGBE_NOT_IMPLEMENTED); 71513705f88SJack F Vogel } 71613705f88SJack F Vogel 71713705f88SJack F Vogel /** 7189ca4041bSJack F Vogel * ixgbe_led_on - Turn on LEDs 71913705f88SJack F Vogel * @hw: pointer to hardware structure 72013705f88SJack F Vogel * @index: led number to turn on 72113705f88SJack F Vogel * 72213705f88SJack F Vogel * Turns on the software controllable LEDs. 72313705f88SJack F Vogel **/ 72413705f88SJack F Vogel s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index) 72513705f88SJack F Vogel { 7269ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index), 72713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 72813705f88SJack F Vogel } 72913705f88SJack F Vogel 73013705f88SJack F Vogel /** 7319ca4041bSJack F Vogel * ixgbe_led_off - Turn off LEDs 73213705f88SJack F Vogel * @hw: pointer to hardware structure 73313705f88SJack F Vogel * @index: led number to turn off 73413705f88SJack F Vogel * 73513705f88SJack F Vogel * Turns off the software controllable LEDs. 73613705f88SJack F Vogel **/ 73713705f88SJack F Vogel s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index) 73813705f88SJack F Vogel { 7399ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index), 74013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 74113705f88SJack F Vogel } 74213705f88SJack F Vogel 74313705f88SJack F Vogel /** 7449ca4041bSJack F Vogel * ixgbe_blink_led_start - Blink LEDs 74513705f88SJack F Vogel * @hw: pointer to hardware structure 74613705f88SJack F Vogel * @index: led number to blink 74713705f88SJack F Vogel * 74813705f88SJack F Vogel * Blink LED based on index. 74913705f88SJack F Vogel **/ 75013705f88SJack F Vogel s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index) 75113705f88SJack F Vogel { 7529ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index), 75313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 75413705f88SJack F Vogel } 75513705f88SJack F Vogel 75613705f88SJack F Vogel /** 7579ca4041bSJack F Vogel * ixgbe_blink_led_stop - Stop blinking LEDs 75813705f88SJack F Vogel * @hw: pointer to hardware structure 75913705f88SJack F Vogel * 76013705f88SJack F Vogel * Stop blinking LED based on index. 76113705f88SJack F Vogel **/ 76213705f88SJack F Vogel s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index) 76313705f88SJack F Vogel { 7649ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index), 76513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 76613705f88SJack F Vogel } 76713705f88SJack F Vogel 76813705f88SJack F Vogel /** 7699ca4041bSJack F Vogel * ixgbe_init_eeprom_params - Initialize EEPROM parameters 77013705f88SJack F Vogel * @hw: pointer to hardware structure 77113705f88SJack F Vogel * 77213705f88SJack F Vogel * Initializes the EEPROM parameters ixgbe_eeprom_info within the 77313705f88SJack F Vogel * ixgbe_hw struct in order to set up EEPROM access. 77413705f88SJack F Vogel **/ 77513705f88SJack F Vogel s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw) 77613705f88SJack F Vogel { 7779ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw), 77813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 77913705f88SJack F Vogel } 78013705f88SJack F Vogel 78113705f88SJack F Vogel 78213705f88SJack F Vogel /** 78313705f88SJack F Vogel * ixgbe_write_eeprom - Write word to EEPROM 78413705f88SJack F Vogel * @hw: pointer to hardware structure 78513705f88SJack F Vogel * @offset: offset within the EEPROM to be written to 78613705f88SJack F Vogel * @data: 16 bit word to be written to the EEPROM 78713705f88SJack F Vogel * 78813705f88SJack F Vogel * Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not 78913705f88SJack F Vogel * called after this function, the EEPROM will most likely contain an 79013705f88SJack F Vogel * invalid checksum. 79113705f88SJack F Vogel **/ 79213705f88SJack F Vogel s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data) 79313705f88SJack F Vogel { 7949ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data), 79513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 79613705f88SJack F Vogel } 79713705f88SJack F Vogel 79813705f88SJack F Vogel /** 79985d0a26eSJack F Vogel * ixgbe_write_eeprom_buffer - Write word(s) to EEPROM 80085d0a26eSJack F Vogel * @hw: pointer to hardware structure 80185d0a26eSJack F Vogel * @offset: offset within the EEPROM to be written to 80285d0a26eSJack F Vogel * @data: 16 bit word(s) to be written to the EEPROM 80385d0a26eSJack F Vogel * @words: number of words 80485d0a26eSJack F Vogel * 80585d0a26eSJack F Vogel * Writes 16 bit word(s) to EEPROM. If ixgbe_eeprom_update_checksum is not 80685d0a26eSJack F Vogel * called after this function, the EEPROM will most likely contain an 80785d0a26eSJack F Vogel * invalid checksum. 80885d0a26eSJack F Vogel **/ 80985d0a26eSJack F Vogel s32 ixgbe_write_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, u16 words, 81085d0a26eSJack F Vogel u16 *data) 81185d0a26eSJack F Vogel { 81285d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.write_buffer, 81385d0a26eSJack F Vogel (hw, offset, words, data), 81485d0a26eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 81585d0a26eSJack F Vogel } 81685d0a26eSJack F Vogel 81785d0a26eSJack F Vogel /** 81813705f88SJack F Vogel * ixgbe_read_eeprom - Read word from EEPROM 81913705f88SJack F Vogel * @hw: pointer to hardware structure 82013705f88SJack F Vogel * @offset: offset within the EEPROM to be read 82113705f88SJack F Vogel * @data: read 16 bit value from EEPROM 82213705f88SJack F Vogel * 82313705f88SJack F Vogel * Reads 16 bit value from EEPROM 82413705f88SJack F Vogel **/ 82513705f88SJack F Vogel s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data) 82613705f88SJack F Vogel { 8279ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data), 82813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 82913705f88SJack F Vogel } 83013705f88SJack F Vogel 83113705f88SJack F Vogel /** 83285d0a26eSJack F Vogel * ixgbe_read_eeprom_buffer - Read word(s) from EEPROM 83385d0a26eSJack F Vogel * @hw: pointer to hardware structure 83485d0a26eSJack F Vogel * @offset: offset within the EEPROM to be read 83585d0a26eSJack F Vogel * @data: read 16 bit word(s) from EEPROM 83685d0a26eSJack F Vogel * @words: number of words 83785d0a26eSJack F Vogel * 83885d0a26eSJack F Vogel * Reads 16 bit word(s) from EEPROM 83985d0a26eSJack F Vogel **/ 84085d0a26eSJack F Vogel s32 ixgbe_read_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, 84185d0a26eSJack F Vogel u16 words, u16 *data) 84285d0a26eSJack F Vogel { 84385d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.read_buffer, 84485d0a26eSJack F Vogel (hw, offset, words, data), 84585d0a26eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 84685d0a26eSJack F Vogel } 84785d0a26eSJack F Vogel 84885d0a26eSJack F Vogel /** 84913705f88SJack F Vogel * ixgbe_validate_eeprom_checksum - Validate EEPROM checksum 85013705f88SJack F Vogel * @hw: pointer to hardware structure 85113705f88SJack F Vogel * @checksum_val: calculated checksum 85213705f88SJack F Vogel * 85313705f88SJack F Vogel * Performs checksum calculation and validates the EEPROM checksum 85413705f88SJack F Vogel **/ 85513705f88SJack F Vogel s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val) 85613705f88SJack F Vogel { 8579ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum, 85813705f88SJack F Vogel (hw, checksum_val), IXGBE_NOT_IMPLEMENTED); 85913705f88SJack F Vogel } 86013705f88SJack F Vogel 86113705f88SJack F Vogel /** 86213705f88SJack F Vogel * ixgbe_eeprom_update_checksum - Updates the EEPROM checksum 86313705f88SJack F Vogel * @hw: pointer to hardware structure 86413705f88SJack F Vogel **/ 86513705f88SJack F Vogel s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw) 86613705f88SJack F Vogel { 8679ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw), 86813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 86913705f88SJack F Vogel } 87013705f88SJack F Vogel 87113705f88SJack F Vogel /** 8720ac6dfecSJack F Vogel * ixgbe_insert_mac_addr - Find a RAR for this mac address 8730ac6dfecSJack F Vogel * @hw: pointer to hardware structure 8740ac6dfecSJack F Vogel * @addr: Address to put into receive address register 8750ac6dfecSJack F Vogel * @vmdq: VMDq pool to assign 8760ac6dfecSJack F Vogel * 8770ac6dfecSJack F Vogel * Puts an ethernet address into a receive address register, or 8780ac6dfecSJack F Vogel * finds the rar that it is aleady in; adds to the pool list 8790ac6dfecSJack F Vogel **/ 8800ac6dfecSJack F Vogel s32 ixgbe_insert_mac_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq) 8810ac6dfecSJack F Vogel { 8820ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.insert_mac_addr, 8830ac6dfecSJack F Vogel (hw, addr, vmdq), 8840ac6dfecSJack F Vogel IXGBE_NOT_IMPLEMENTED); 8850ac6dfecSJack F Vogel } 8860ac6dfecSJack F Vogel 8870ac6dfecSJack F Vogel /** 8889ca4041bSJack F Vogel * ixgbe_set_rar - Set Rx address register 88913705f88SJack F Vogel * @hw: pointer to hardware structure 89013705f88SJack F Vogel * @index: Receive address register to write 8919ca4041bSJack F Vogel * @addr: Address to put into receive address register 8929ca4041bSJack F Vogel * @vmdq: VMDq "set" 89313705f88SJack F Vogel * @enable_addr: set flag that address is active 89413705f88SJack F Vogel * 89513705f88SJack F Vogel * Puts an ethernet address into a receive address register. 89613705f88SJack F Vogel **/ 8979ca4041bSJack F Vogel s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq, 89813705f88SJack F Vogel u32 enable_addr) 89913705f88SJack F Vogel { 9009ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq, 90113705f88SJack F Vogel enable_addr), IXGBE_NOT_IMPLEMENTED); 90213705f88SJack F Vogel } 90313705f88SJack F Vogel 90413705f88SJack F Vogel /** 9055b7f4cedSJack F Vogel * ixgbe_clear_rar - Clear Rx address register 9065b7f4cedSJack F Vogel * @hw: pointer to hardware structure 9075b7f4cedSJack F Vogel * @index: Receive address register to write 9085b7f4cedSJack F Vogel * 9095b7f4cedSJack F Vogel * Puts an ethernet address into a receive address register. 9105b7f4cedSJack F Vogel **/ 9115b7f4cedSJack F Vogel s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index) 9125b7f4cedSJack F Vogel { 9135b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index), 9145b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 9155b7f4cedSJack F Vogel } 9165b7f4cedSJack F Vogel 9175b7f4cedSJack F Vogel /** 9189ca4041bSJack F Vogel * ixgbe_set_vmdq - Associate a VMDq index with a receive address 9199ca4041bSJack F Vogel * @hw: pointer to hardware structure 9209ca4041bSJack F Vogel * @rar: receive address register index to associate with VMDq index 9219ca4041bSJack F Vogel * @vmdq: VMDq set or pool index 9229ca4041bSJack F Vogel **/ 9239ca4041bSJack F Vogel s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 9249ca4041bSJack F Vogel { 9259ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq), 9269ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 927a621e3c8SJack F Vogel 928a621e3c8SJack F Vogel } 929a621e3c8SJack F Vogel 930a621e3c8SJack F Vogel /** 931a621e3c8SJack F Vogel * ixgbe_set_vmdq_san_mac - Associate VMDq index 127 with a receive address 932a621e3c8SJack F Vogel * @hw: pointer to hardware structure 933a621e3c8SJack F Vogel * @vmdq: VMDq default pool index 934a621e3c8SJack F Vogel **/ 935a621e3c8SJack F Vogel s32 ixgbe_set_vmdq_san_mac(struct ixgbe_hw *hw, u32 vmdq) 936a621e3c8SJack F Vogel { 937a621e3c8SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vmdq_san_mac, 938a621e3c8SJack F Vogel (hw, vmdq), IXGBE_NOT_IMPLEMENTED); 9399ca4041bSJack F Vogel } 9409ca4041bSJack F Vogel 9419ca4041bSJack F Vogel /** 9425b7f4cedSJack F Vogel * ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address 9435b7f4cedSJack F Vogel * @hw: pointer to hardware structure 9445b7f4cedSJack F Vogel * @rar: receive address register index to disassociate with VMDq index 9455b7f4cedSJack F Vogel * @vmdq: VMDq set or pool index 9465b7f4cedSJack F Vogel **/ 9475b7f4cedSJack F Vogel s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 9485b7f4cedSJack F Vogel { 9495b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq), 9505b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 9515b7f4cedSJack F Vogel } 9525b7f4cedSJack F Vogel 9535b7f4cedSJack F Vogel /** 95413705f88SJack F Vogel * ixgbe_init_rx_addrs - Initializes receive address filters. 95513705f88SJack F Vogel * @hw: pointer to hardware structure 95613705f88SJack F Vogel * 95713705f88SJack F Vogel * Places the MAC address in receive address register 0 and clears the rest 9589ca4041bSJack F Vogel * of the receive address registers. Clears the multicast table. Assumes 95913705f88SJack F Vogel * the receiver is in reset when the routine is called. 96013705f88SJack F Vogel **/ 96113705f88SJack F Vogel s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw) 96213705f88SJack F Vogel { 9639ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw), 96413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 96513705f88SJack F Vogel } 96613705f88SJack F Vogel 96713705f88SJack F Vogel /** 96813705f88SJack F Vogel * ixgbe_get_num_rx_addrs - Returns the number of RAR entries. 96913705f88SJack F Vogel * @hw: pointer to hardware structure 97013705f88SJack F Vogel **/ 97113705f88SJack F Vogel u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw) 97213705f88SJack F Vogel { 9739ca4041bSJack F Vogel return hw->mac.num_rar_entries; 9749ca4041bSJack F Vogel } 9759ca4041bSJack F Vogel 9769ca4041bSJack F Vogel /** 9779ca4041bSJack F Vogel * ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses 9789ca4041bSJack F Vogel * @hw: pointer to hardware structure 9799ca4041bSJack F Vogel * @addr_list: the list of new multicast addresses 9809ca4041bSJack F Vogel * @addr_count: number of addresses 9819ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 9829ca4041bSJack F Vogel * 9839ca4041bSJack F Vogel * The given list replaces any existing list. Clears the secondary addrs from 9849ca4041bSJack F Vogel * receive address registers. Uses unused receive address registers for the 9859ca4041bSJack F Vogel * first secondary addresses, and falls back to promiscuous mode as needed. 9869ca4041bSJack F Vogel **/ 9879ca4041bSJack F Vogel s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list, 9889ca4041bSJack F Vogel u32 addr_count, ixgbe_mc_addr_itr func) 9899ca4041bSJack F Vogel { 9909ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw, 9919ca4041bSJack F Vogel addr_list, addr_count, func), 9929ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 99313705f88SJack F Vogel } 99413705f88SJack F Vogel 99513705f88SJack F Vogel /** 99613705f88SJack F Vogel * ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses 99713705f88SJack F Vogel * @hw: pointer to hardware structure 99813705f88SJack F Vogel * @mc_addr_list: the list of new multicast addresses 99913705f88SJack F Vogel * @mc_addr_count: number of addresses 10009ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 100113705f88SJack F Vogel * 100213705f88SJack F Vogel * The given list replaces any existing list. Clears the MC addrs from receive 10039ca4041bSJack F Vogel * address registers and the multicast table. Uses unused receive address 100413705f88SJack F Vogel * registers for the first multicast addresses, and hashes the rest into the 100513705f88SJack F Vogel * multicast table. 100613705f88SJack F Vogel **/ 100713705f88SJack F Vogel s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list, 100885d0a26eSJack F Vogel u32 mc_addr_count, ixgbe_mc_addr_itr func, 100985d0a26eSJack F Vogel bool clear) 101013705f88SJack F Vogel { 10119ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw, 101285d0a26eSJack F Vogel mc_addr_list, mc_addr_count, func, clear), 101313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 101413705f88SJack F Vogel } 101513705f88SJack F Vogel 101613705f88SJack F Vogel /** 101713705f88SJack F Vogel * ixgbe_enable_mc - Enable multicast address in RAR 101813705f88SJack F Vogel * @hw: pointer to hardware structure 101913705f88SJack F Vogel * 102013705f88SJack F Vogel * Enables multicast address in RAR and the use of the multicast hash table. 102113705f88SJack F Vogel **/ 102213705f88SJack F Vogel s32 ixgbe_enable_mc(struct ixgbe_hw *hw) 102313705f88SJack F Vogel { 10249ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw), 102513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 102613705f88SJack F Vogel } 102713705f88SJack F Vogel 102813705f88SJack F Vogel /** 102913705f88SJack F Vogel * ixgbe_disable_mc - Disable multicast address in RAR 103013705f88SJack F Vogel * @hw: pointer to hardware structure 103113705f88SJack F Vogel * 103213705f88SJack F Vogel * Disables multicast address in RAR and the use of the multicast hash table. 103313705f88SJack F Vogel **/ 103413705f88SJack F Vogel s32 ixgbe_disable_mc(struct ixgbe_hw *hw) 103513705f88SJack F Vogel { 10369ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw), 103713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 103813705f88SJack F Vogel } 103913705f88SJack F Vogel 104013705f88SJack F Vogel /** 104113705f88SJack F Vogel * ixgbe_clear_vfta - Clear VLAN filter table 104213705f88SJack F Vogel * @hw: pointer to hardware structure 104313705f88SJack F Vogel * 104413705f88SJack F Vogel * Clears the VLAN filer table, and the VMDq index associated with the filter 104513705f88SJack F Vogel **/ 104613705f88SJack F Vogel s32 ixgbe_clear_vfta(struct ixgbe_hw *hw) 104713705f88SJack F Vogel { 10489ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw), 104913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 105013705f88SJack F Vogel } 105113705f88SJack F Vogel 105213705f88SJack F Vogel /** 105313705f88SJack F Vogel * ixgbe_set_vfta - Set VLAN filter table 105413705f88SJack F Vogel * @hw: pointer to hardware structure 105513705f88SJack F Vogel * @vlan: VLAN id to write to VLAN filter 105613705f88SJack F Vogel * @vind: VMDq output index that maps queue to VLAN id in VFTA 105713705f88SJack F Vogel * @vlan_on: boolean flag to turn on/off VLAN in VFTA 105813705f88SJack F Vogel * 105913705f88SJack F Vogel * Turn on/off specified VLAN in the VLAN filter table. 106013705f88SJack F Vogel **/ 106113705f88SJack F Vogel s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on) 106213705f88SJack F Vogel { 10639ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind, 106413705f88SJack F Vogel vlan_on), IXGBE_NOT_IMPLEMENTED); 106513705f88SJack F Vogel } 106613705f88SJack F Vogel 106713705f88SJack F Vogel /** 106885d0a26eSJack F Vogel * ixgbe_set_vlvf - Set VLAN Pool Filter 106985d0a26eSJack F Vogel * @hw: pointer to hardware structure 107085d0a26eSJack F Vogel * @vlan: VLAN id to write to VLAN filter 107185d0a26eSJack F Vogel * @vind: VMDq output index that maps queue to VLAN id in VFVFB 107285d0a26eSJack F Vogel * @vlan_on: boolean flag to turn on/off VLAN in VFVF 107385d0a26eSJack F Vogel * @vfta_changed: pointer to boolean flag which indicates whether VFTA 107485d0a26eSJack F Vogel * should be changed 107585d0a26eSJack F Vogel * 107685d0a26eSJack F Vogel * Turn on/off specified bit in VLVF table. 107785d0a26eSJack F Vogel **/ 107885d0a26eSJack F Vogel s32 ixgbe_set_vlvf(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on, 107985d0a26eSJack F Vogel bool *vfta_changed) 108085d0a26eSJack F Vogel { 108185d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vlvf, (hw, vlan, vind, 108285d0a26eSJack F Vogel vlan_on, vfta_changed), IXGBE_NOT_IMPLEMENTED); 108385d0a26eSJack F Vogel } 108485d0a26eSJack F Vogel 108585d0a26eSJack F Vogel /** 10860ac6dfecSJack F Vogel * ixgbe_fc_enable - Enable flow control 108713705f88SJack F Vogel * @hw: pointer to hardware structure 108813705f88SJack F Vogel * 108913705f88SJack F Vogel * Configures the flow control settings based on SW configuration. 109013705f88SJack F Vogel **/ 1091a621e3c8SJack F Vogel s32 ixgbe_fc_enable(struct ixgbe_hw *hw) 109213705f88SJack F Vogel { 1093a621e3c8SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.fc_enable, (hw), 109413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 109513705f88SJack F Vogel } 109613705f88SJack F Vogel 10973ec35e52SJack F Vogel /** 1098758cc3dcSJack F Vogel * ixgbe_setup_fc - Set up flow control 1099758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1100758cc3dcSJack F Vogel * 1101758cc3dcSJack F Vogel * Called at init time to set up flow control. 1102758cc3dcSJack F Vogel **/ 1103758cc3dcSJack F Vogel s32 ixgbe_setup_fc(struct ixgbe_hw *hw) 1104758cc3dcSJack F Vogel { 1105758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_fc, (hw), 1106758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 1107758cc3dcSJack F Vogel } 1108758cc3dcSJack F Vogel 1109758cc3dcSJack F Vogel /** 111085d0a26eSJack F Vogel * ixgbe_set_fw_drv_ver - Try to send the driver version number FW 111185d0a26eSJack F Vogel * @hw: pointer to hardware structure 111285d0a26eSJack F Vogel * @maj: driver major number to be sent to firmware 111385d0a26eSJack F Vogel * @min: driver minor number to be sent to firmware 111485d0a26eSJack F Vogel * @build: driver build number to be sent to firmware 111585d0a26eSJack F Vogel * @ver: driver version number to be sent to firmware 111685d0a26eSJack F Vogel **/ 111785d0a26eSJack F Vogel s32 ixgbe_set_fw_drv_ver(struct ixgbe_hw *hw, u8 maj, u8 min, u8 build, 111885d0a26eSJack F Vogel u8 ver) 111985d0a26eSJack F Vogel { 112085d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_fw_drv_ver, (hw, maj, min, 112185d0a26eSJack F Vogel build, ver), IXGBE_NOT_IMPLEMENTED); 112285d0a26eSJack F Vogel } 112385d0a26eSJack F Vogel 112485d0a26eSJack F Vogel 1125fd75b91dSJack F Vogel 1126758cc3dcSJack F Vogel /** 1127758cc3dcSJack F Vogel * ixgbe_dmac_config - Configure DMA Coalescing registers. 1128758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1129758cc3dcSJack F Vogel * 1130758cc3dcSJack F Vogel * Configure DMA coalescing. If enabling dmac, dmac is activated. 1131758cc3dcSJack F Vogel * When disabling dmac, dmac enable dmac bit is cleared. 1132758cc3dcSJack F Vogel **/ 1133758cc3dcSJack F Vogel s32 ixgbe_dmac_config(struct ixgbe_hw *hw) 1134758cc3dcSJack F Vogel { 1135758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.dmac_config, (hw), 1136758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 1137758cc3dcSJack F Vogel } 1138758cc3dcSJack F Vogel 1139758cc3dcSJack F Vogel /** 1140758cc3dcSJack F Vogel * ixgbe_dmac_update_tcs - Configure DMA Coalescing registers. 1141758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1142758cc3dcSJack F Vogel * 1143758cc3dcSJack F Vogel * Disables dmac, updates per TC settings, and then enable dmac. 1144758cc3dcSJack F Vogel **/ 1145758cc3dcSJack F Vogel s32 ixgbe_dmac_update_tcs(struct ixgbe_hw *hw) 1146758cc3dcSJack F Vogel { 1147758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.dmac_update_tcs, (hw), 1148758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 1149758cc3dcSJack F Vogel } 1150758cc3dcSJack F Vogel 1151758cc3dcSJack F Vogel /** 1152758cc3dcSJack F Vogel * ixgbe_dmac_config_tcs - Configure DMA Coalescing registers. 1153758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1154758cc3dcSJack F Vogel * 1155758cc3dcSJack F Vogel * Configure DMA coalescing threshold per TC and set high priority bit for 1156758cc3dcSJack F Vogel * FCOE TC. The dmac enable bit must be cleared before configuring. 1157758cc3dcSJack F Vogel **/ 1158758cc3dcSJack F Vogel s32 ixgbe_dmac_config_tcs(struct ixgbe_hw *hw) 1159758cc3dcSJack F Vogel { 1160758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.dmac_config_tcs, (hw), 1161758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 1162758cc3dcSJack F Vogel } 1163758cc3dcSJack F Vogel 1164758cc3dcSJack F Vogel /** 1165758cc3dcSJack F Vogel * ixgbe_setup_eee - Enable/disable EEE support 1166758cc3dcSJack F Vogel * @hw: pointer to the HW structure 1167758cc3dcSJack F Vogel * @enable_eee: boolean flag to enable EEE 1168758cc3dcSJack F Vogel * 1169758cc3dcSJack F Vogel * Enable/disable EEE based on enable_ee flag. 1170758cc3dcSJack F Vogel * Auto-negotiation must be started after BASE-T EEE bits in PHY register 7.3C 1171758cc3dcSJack F Vogel * are modified. 1172758cc3dcSJack F Vogel * 1173758cc3dcSJack F Vogel **/ 1174758cc3dcSJack F Vogel s32 ixgbe_setup_eee(struct ixgbe_hw *hw, bool enable_eee) 1175758cc3dcSJack F Vogel { 1176758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_eee, (hw, enable_eee), 1177758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 1178758cc3dcSJack F Vogel } 1179758cc3dcSJack F Vogel 1180758cc3dcSJack F Vogel /** 1181758cc3dcSJack F Vogel * ixgbe_set_source_address_pruning - Enable/Disable source address pruning 1182758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1183758cc3dcSJack F Vogel * @enbale: enable or disable source address pruning 1184758cc3dcSJack F Vogel * @pool: Rx pool - Rx pool to toggle source address pruning 1185758cc3dcSJack F Vogel **/ 1186758cc3dcSJack F Vogel void ixgbe_set_source_address_pruning(struct ixgbe_hw *hw, bool enable, 1187758cc3dcSJack F Vogel unsigned int pool) 1188758cc3dcSJack F Vogel { 1189758cc3dcSJack F Vogel if (hw->mac.ops.set_source_address_pruning) 1190758cc3dcSJack F Vogel hw->mac.ops.set_source_address_pruning(hw, enable, pool); 1191758cc3dcSJack F Vogel } 1192758cc3dcSJack F Vogel 1193758cc3dcSJack F Vogel /** 1194758cc3dcSJack F Vogel * ixgbe_set_ethertype_anti_spoofing - Enable/Disable Ethertype anti-spoofing 1195758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1196758cc3dcSJack F Vogel * @enable: enable or disable switch for Ethertype anti-spoofing 1197758cc3dcSJack F Vogel * @vf: Virtual Function pool - VF Pool to set for Ethertype anti-spoofing 1198758cc3dcSJack F Vogel * 1199758cc3dcSJack F Vogel **/ 1200758cc3dcSJack F Vogel void ixgbe_set_ethertype_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf) 1201758cc3dcSJack F Vogel { 1202758cc3dcSJack F Vogel if (hw->mac.ops.set_ethertype_anti_spoofing) 1203758cc3dcSJack F Vogel hw->mac.ops.set_ethertype_anti_spoofing(hw, enable, vf); 1204758cc3dcSJack F Vogel } 1205758cc3dcSJack F Vogel 1206758cc3dcSJack F Vogel /** 1207758cc3dcSJack F Vogel * ixgbe_read_iosf_sb_reg - Read 32 bit PHY register 1208758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1209758cc3dcSJack F Vogel * @reg_addr: 32 bit address of PHY register to read 1210758cc3dcSJack F Vogel * @device_type: type of device you want to communicate with 1211758cc3dcSJack F Vogel * @phy_data: Pointer to read data from PHY register 1212758cc3dcSJack F Vogel * 1213758cc3dcSJack F Vogel * Reads a value from a specified PHY register 1214758cc3dcSJack F Vogel **/ 1215758cc3dcSJack F Vogel s32 ixgbe_read_iosf_sb_reg(struct ixgbe_hw *hw, u32 reg_addr, 1216758cc3dcSJack F Vogel u32 device_type, u32 *phy_data) 1217758cc3dcSJack F Vogel { 1218758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.read_iosf_sb_reg, (hw, reg_addr, 1219758cc3dcSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 1220758cc3dcSJack F Vogel } 1221758cc3dcSJack F Vogel 1222758cc3dcSJack F Vogel /** 1223758cc3dcSJack F Vogel * ixgbe_write_iosf_sb_reg - Write 32 bit register through IOSF Sideband 1224758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1225758cc3dcSJack F Vogel * @reg_addr: 32 bit PHY register to write 1226758cc3dcSJack F Vogel * @device_type: type of device you want to communicate with 1227758cc3dcSJack F Vogel * @phy_data: Data to write to the PHY register 1228758cc3dcSJack F Vogel * 1229758cc3dcSJack F Vogel * Writes a value to specified PHY register 1230758cc3dcSJack F Vogel **/ 1231758cc3dcSJack F Vogel s32 ixgbe_write_iosf_sb_reg(struct ixgbe_hw *hw, u32 reg_addr, 1232758cc3dcSJack F Vogel u32 device_type, u32 phy_data) 1233758cc3dcSJack F Vogel { 1234758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.write_iosf_sb_reg, (hw, reg_addr, 1235758cc3dcSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 1236758cc3dcSJack F Vogel } 1237758cc3dcSJack F Vogel 1238758cc3dcSJack F Vogel /** 1239758cc3dcSJack F Vogel * ixgbe_disable_mdd - Disable malicious driver detection 1240758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1241758cc3dcSJack F Vogel * 1242758cc3dcSJack F Vogel **/ 1243758cc3dcSJack F Vogel void ixgbe_disable_mdd(struct ixgbe_hw *hw) 1244758cc3dcSJack F Vogel { 1245758cc3dcSJack F Vogel if (hw->mac.ops.disable_mdd) 1246758cc3dcSJack F Vogel hw->mac.ops.disable_mdd(hw); 1247758cc3dcSJack F Vogel } 1248758cc3dcSJack F Vogel 1249758cc3dcSJack F Vogel /** 1250758cc3dcSJack F Vogel * ixgbe_enable_mdd - Enable malicious driver detection 1251758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1252758cc3dcSJack F Vogel * 1253758cc3dcSJack F Vogel **/ 1254758cc3dcSJack F Vogel void ixgbe_enable_mdd(struct ixgbe_hw *hw) 1255758cc3dcSJack F Vogel { 1256758cc3dcSJack F Vogel if (hw->mac.ops.enable_mdd) 1257758cc3dcSJack F Vogel hw->mac.ops.enable_mdd(hw); 1258758cc3dcSJack F Vogel } 1259758cc3dcSJack F Vogel 1260758cc3dcSJack F Vogel /** 1261758cc3dcSJack F Vogel * ixgbe_mdd_event - Handle malicious driver detection event 1262758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1263758cc3dcSJack F Vogel * @vf_bitmap: vf bitmap of malicious vfs 1264758cc3dcSJack F Vogel * 1265758cc3dcSJack F Vogel **/ 1266758cc3dcSJack F Vogel void ixgbe_mdd_event(struct ixgbe_hw *hw, u32 *vf_bitmap) 1267758cc3dcSJack F Vogel { 1268758cc3dcSJack F Vogel if (hw->mac.ops.mdd_event) 1269758cc3dcSJack F Vogel hw->mac.ops.mdd_event(hw, vf_bitmap); 1270758cc3dcSJack F Vogel } 1271758cc3dcSJack F Vogel 1272758cc3dcSJack F Vogel /** 1273758cc3dcSJack F Vogel * ixgbe_restore_mdd_vf - Restore VF that was disabled during malicious driver 1274758cc3dcSJack F Vogel * detection event 1275758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1276758cc3dcSJack F Vogel * @vf: vf index 1277758cc3dcSJack F Vogel * 1278758cc3dcSJack F Vogel **/ 1279758cc3dcSJack F Vogel void ixgbe_restore_mdd_vf(struct ixgbe_hw *hw, u32 vf) 1280758cc3dcSJack F Vogel { 1281758cc3dcSJack F Vogel if (hw->mac.ops.restore_mdd_vf) 1282758cc3dcSJack F Vogel hw->mac.ops.restore_mdd_vf(hw, vf); 1283758cc3dcSJack F Vogel } 1284758cc3dcSJack F Vogel 1285758cc3dcSJack F Vogel /** 1286758cc3dcSJack F Vogel * ixgbe_enter_lplu - Transition to low power states 1287758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1288758cc3dcSJack F Vogel * 1289758cc3dcSJack F Vogel * Configures Low Power Link Up on transition to low power states 1290758cc3dcSJack F Vogel * (from D0 to non-D0). 1291758cc3dcSJack F Vogel **/ 1292758cc3dcSJack F Vogel s32 ixgbe_enter_lplu(struct ixgbe_hw *hw) 1293758cc3dcSJack F Vogel { 1294758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.enter_lplu, (hw), 1295758cc3dcSJack F Vogel IXGBE_NOT_IMPLEMENTED); 1296758cc3dcSJack F Vogel } 1297fd75b91dSJack F Vogel 129885d0a26eSJack F Vogel /** 12996f37f232SEric Joyner * ixgbe_handle_lasi - Handle external Base T PHY interrupt 13006f37f232SEric Joyner * @hw: pointer to hardware structure 13016f37f232SEric Joyner * 13026f37f232SEric Joyner * Handle external Base T PHY interrupt. If high temperature 13036f37f232SEric Joyner * failure alarm then return error, else if link status change 13046f37f232SEric Joyner * then setup internal/external PHY link 13056f37f232SEric Joyner * 13066f37f232SEric Joyner * Return IXGBE_ERR_OVERTEMP if interrupt is high temperature 13076f37f232SEric Joyner * failure alarm, else return PHY access status. 13086f37f232SEric Joyner */ 13096f37f232SEric Joyner s32 ixgbe_handle_lasi(struct ixgbe_hw *hw) 13106f37f232SEric Joyner { 13116f37f232SEric Joyner return ixgbe_call_func(hw, hw->phy.ops.handle_lasi, (hw), 13126f37f232SEric Joyner IXGBE_NOT_IMPLEMENTED); 13136f37f232SEric Joyner } 13146f37f232SEric Joyner 13156f37f232SEric Joyner /** 13163ec35e52SJack F Vogel * ixgbe_read_analog_reg8 - Reads 8 bit analog register 13173ec35e52SJack F Vogel * @hw: pointer to hardware structure 13183ec35e52SJack F Vogel * @reg: analog register to read 13193ec35e52SJack F Vogel * @val: read value 13203ec35e52SJack F Vogel * 13213ec35e52SJack F Vogel * Performs write operation to analog register specified. 13223ec35e52SJack F Vogel **/ 13233ec35e52SJack F Vogel s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val) 13243ec35e52SJack F Vogel { 13259ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg, 13269ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 13273ec35e52SJack F Vogel } 13283ec35e52SJack F Vogel 13293ec35e52SJack F Vogel /** 13303ec35e52SJack F Vogel * ixgbe_write_analog_reg8 - Writes 8 bit analog register 13313ec35e52SJack F Vogel * @hw: pointer to hardware structure 13323ec35e52SJack F Vogel * @reg: analog register to write 13333ec35e52SJack F Vogel * @val: value to write 13343ec35e52SJack F Vogel * 13353ec35e52SJack F Vogel * Performs write operation to Atlas analog register specified. 13363ec35e52SJack F Vogel **/ 13373ec35e52SJack F Vogel s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val) 13383ec35e52SJack F Vogel { 13399ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg, 13409ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 13413ec35e52SJack F Vogel } 13423ec35e52SJack F Vogel 13435b7f4cedSJack F Vogel /** 13445b7f4cedSJack F Vogel * ixgbe_init_uta_tables - Initializes Unicast Table Arrays. 13455b7f4cedSJack F Vogel * @hw: pointer to hardware structure 13465b7f4cedSJack F Vogel * 13475b7f4cedSJack F Vogel * Initializes the Unicast Table Arrays to zero on device load. This 13485b7f4cedSJack F Vogel * is part of the Rx init addr execution path. 13495b7f4cedSJack F Vogel **/ 13505b7f4cedSJack F Vogel s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw) 13515b7f4cedSJack F Vogel { 13525b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw), 13535b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 13545b7f4cedSJack F Vogel } 13551b6e0dbaSJack F Vogel 13561b6e0dbaSJack F Vogel /** 13570ac6dfecSJack F Vogel * ixgbe_read_i2c_byte - Reads 8 bit word over I2C at specified device address 13580ac6dfecSJack F Vogel * @hw: pointer to hardware structure 13590ac6dfecSJack F Vogel * @byte_offset: byte offset to read 1360758cc3dcSJack F Vogel * @dev_addr: I2C bus address to read from 13610ac6dfecSJack F Vogel * @data: value read 13620ac6dfecSJack F Vogel * 13630ac6dfecSJack F Vogel * Performs byte read operation to SFP module's EEPROM over I2C interface. 13640ac6dfecSJack F Vogel **/ 13650ac6dfecSJack F Vogel s32 ixgbe_read_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, 13660ac6dfecSJack F Vogel u8 *data) 13670ac6dfecSJack F Vogel { 13680ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte, (hw, byte_offset, 13690ac6dfecSJack F Vogel dev_addr, data), IXGBE_NOT_IMPLEMENTED); 13700ac6dfecSJack F Vogel } 13710ac6dfecSJack F Vogel 13720ac6dfecSJack F Vogel /** 13736f37f232SEric Joyner * ixgbe_read_i2c_byte_unlocked - Reads 8 bit word via I2C from device address 13746f37f232SEric Joyner * @hw: pointer to hardware structure 13756f37f232SEric Joyner * @byte_offset: byte offset to read 13766f37f232SEric Joyner * @dev_addr: I2C bus address to read from 13776f37f232SEric Joyner * @data: value read 13786f37f232SEric Joyner * 13796f37f232SEric Joyner * Performs byte read operation to SFP module's EEPROM over I2C interface. 13806f37f232SEric Joyner **/ 13816f37f232SEric Joyner s32 ixgbe_read_i2c_byte_unlocked(struct ixgbe_hw *hw, u8 byte_offset, 13826f37f232SEric Joyner u8 dev_addr, u8 *data) 13836f37f232SEric Joyner { 13846f37f232SEric Joyner return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte_unlocked, 13856f37f232SEric Joyner (hw, byte_offset, dev_addr, data), 13866f37f232SEric Joyner IXGBE_NOT_IMPLEMENTED); 13876f37f232SEric Joyner } 13886f37f232SEric Joyner 13896f37f232SEric Joyner /** 1390758cc3dcSJack F Vogel * ixgbe_read_i2c_combined - Perform I2C read combined operation 1391758cc3dcSJack F Vogel * @hw: pointer to the hardware structure 1392758cc3dcSJack F Vogel * @addr: I2C bus address to read from 1393758cc3dcSJack F Vogel * @reg: I2C device register to read from 1394758cc3dcSJack F Vogel * @val: pointer to location to receive read value 1395758cc3dcSJack F Vogel * 1396758cc3dcSJack F Vogel * Returns an error code on error. 1397758cc3dcSJack F Vogel */ 1398758cc3dcSJack F Vogel s32 ixgbe_read_i2c_combined(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 *val) 1399758cc3dcSJack F Vogel { 1400758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_combined, (hw, addr, 1401758cc3dcSJack F Vogel reg, val), IXGBE_NOT_IMPLEMENTED); 1402758cc3dcSJack F Vogel } 1403758cc3dcSJack F Vogel 1404758cc3dcSJack F Vogel /** 14056f37f232SEric Joyner * ixgbe_read_i2c_combined_unlocked - Perform I2C read combined operation 14066f37f232SEric Joyner * @hw: pointer to the hardware structure 14076f37f232SEric Joyner * @addr: I2C bus address to read from 14086f37f232SEric Joyner * @reg: I2C device register to read from 14096f37f232SEric Joyner * @val: pointer to location to receive read value 14106f37f232SEric Joyner * 14116f37f232SEric Joyner * Returns an error code on error. 14126f37f232SEric Joyner **/ 14136f37f232SEric Joyner s32 ixgbe_read_i2c_combined_unlocked(struct ixgbe_hw *hw, u8 addr, u16 reg, 14146f37f232SEric Joyner u16 *val) 14156f37f232SEric Joyner { 14166f37f232SEric Joyner return ixgbe_call_func(hw, hw->phy.ops.read_i2c_combined_unlocked, 14176f37f232SEric Joyner (hw, addr, reg, val), 14186f37f232SEric Joyner IXGBE_NOT_IMPLEMENTED); 14196f37f232SEric Joyner } 14206f37f232SEric Joyner 14216f37f232SEric Joyner /** 14220ac6dfecSJack F Vogel * ixgbe_write_i2c_byte - Writes 8 bit word over I2C 14230ac6dfecSJack F Vogel * @hw: pointer to hardware structure 14240ac6dfecSJack F Vogel * @byte_offset: byte offset to write 1425758cc3dcSJack F Vogel * @dev_addr: I2C bus address to write to 14260ac6dfecSJack F Vogel * @data: value to write 14270ac6dfecSJack F Vogel * 14280ac6dfecSJack F Vogel * Performs byte write operation to SFP module's EEPROM over I2C interface 14290ac6dfecSJack F Vogel * at a specified device address. 14300ac6dfecSJack F Vogel **/ 14310ac6dfecSJack F Vogel s32 ixgbe_write_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, 14320ac6dfecSJack F Vogel u8 data) 14330ac6dfecSJack F Vogel { 14340ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte, (hw, byte_offset, 14350ac6dfecSJack F Vogel dev_addr, data), IXGBE_NOT_IMPLEMENTED); 14360ac6dfecSJack F Vogel } 14370ac6dfecSJack F Vogel 14380ac6dfecSJack F Vogel /** 14396f37f232SEric Joyner * ixgbe_write_i2c_byte_unlocked - Writes 8 bit word over I2C 14406f37f232SEric Joyner * @hw: pointer to hardware structure 14416f37f232SEric Joyner * @byte_offset: byte offset to write 14426f37f232SEric Joyner * @dev_addr: I2C bus address to write to 14436f37f232SEric Joyner * @data: value to write 14446f37f232SEric Joyner * 14456f37f232SEric Joyner * Performs byte write operation to SFP module's EEPROM over I2C interface 14466f37f232SEric Joyner * at a specified device address. 14476f37f232SEric Joyner **/ 14486f37f232SEric Joyner s32 ixgbe_write_i2c_byte_unlocked(struct ixgbe_hw *hw, u8 byte_offset, 14496f37f232SEric Joyner u8 dev_addr, u8 data) 14506f37f232SEric Joyner { 14516f37f232SEric Joyner return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte_unlocked, 14526f37f232SEric Joyner (hw, byte_offset, dev_addr, data), 14536f37f232SEric Joyner IXGBE_NOT_IMPLEMENTED); 14546f37f232SEric Joyner } 14556f37f232SEric Joyner 14566f37f232SEric Joyner /** 1457758cc3dcSJack F Vogel * ixgbe_write_i2c_combined - Perform I2C write combined operation 1458758cc3dcSJack F Vogel * @hw: pointer to the hardware structure 1459758cc3dcSJack F Vogel * @addr: I2C bus address to write to 1460758cc3dcSJack F Vogel * @reg: I2C device register to write to 1461758cc3dcSJack F Vogel * @val: value to write 1462758cc3dcSJack F Vogel * 1463758cc3dcSJack F Vogel * Returns an error code on error. 1464758cc3dcSJack F Vogel */ 1465758cc3dcSJack F Vogel s32 ixgbe_write_i2c_combined(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 val) 1466758cc3dcSJack F Vogel { 1467758cc3dcSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_i2c_combined, (hw, addr, 1468758cc3dcSJack F Vogel reg, val), IXGBE_NOT_IMPLEMENTED); 1469758cc3dcSJack F Vogel } 1470758cc3dcSJack F Vogel 1471758cc3dcSJack F Vogel /** 14726f37f232SEric Joyner * ixgbe_write_i2c_combined_unlocked - Perform I2C write combined operation 14736f37f232SEric Joyner * @hw: pointer to the hardware structure 14746f37f232SEric Joyner * @addr: I2C bus address to write to 14756f37f232SEric Joyner * @reg: I2C device register to write to 14766f37f232SEric Joyner * @val: value to write 14776f37f232SEric Joyner * 14786f37f232SEric Joyner * Returns an error code on error. 14796f37f232SEric Joyner **/ 14806f37f232SEric Joyner s32 ixgbe_write_i2c_combined_unlocked(struct ixgbe_hw *hw, u8 addr, u16 reg, 14816f37f232SEric Joyner u16 val) 14826f37f232SEric Joyner { 14836f37f232SEric Joyner return ixgbe_call_func(hw, hw->phy.ops.write_i2c_combined_unlocked, 14846f37f232SEric Joyner (hw, addr, reg, val), IXGBE_NOT_IMPLEMENTED); 14856f37f232SEric Joyner } 14866f37f232SEric Joyner 14876f37f232SEric Joyner /** 14880ac6dfecSJack F Vogel * ixgbe_write_i2c_eeprom - Writes 8 bit EEPROM word over I2C interface 14890ac6dfecSJack F Vogel * @hw: pointer to hardware structure 14900ac6dfecSJack F Vogel * @byte_offset: EEPROM byte offset to write 14910ac6dfecSJack F Vogel * @eeprom_data: value to write 14920ac6dfecSJack F Vogel * 14930ac6dfecSJack F Vogel * Performs byte write operation to SFP module's EEPROM over I2C interface. 14940ac6dfecSJack F Vogel **/ 14950ac6dfecSJack F Vogel s32 ixgbe_write_i2c_eeprom(struct ixgbe_hw *hw, 14960ac6dfecSJack F Vogel u8 byte_offset, u8 eeprom_data) 14970ac6dfecSJack F Vogel { 14980ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_i2c_eeprom, 14990ac6dfecSJack F Vogel (hw, byte_offset, eeprom_data), 15000ac6dfecSJack F Vogel IXGBE_NOT_IMPLEMENTED); 15010ac6dfecSJack F Vogel } 15020ac6dfecSJack F Vogel 15030ac6dfecSJack F Vogel /** 15041b6e0dbaSJack F Vogel * ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface 15051b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 15061b6e0dbaSJack F Vogel * @byte_offset: EEPROM byte offset to read 15071b6e0dbaSJack F Vogel * @eeprom_data: value read 15081b6e0dbaSJack F Vogel * 15091b6e0dbaSJack F Vogel * Performs byte read operation to SFP module's EEPROM over I2C interface. 15101b6e0dbaSJack F Vogel **/ 15111b6e0dbaSJack F Vogel s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data) 15121b6e0dbaSJack F Vogel { 15131b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom, 15141b6e0dbaSJack F Vogel (hw, byte_offset, eeprom_data), 15151b6e0dbaSJack F Vogel IXGBE_NOT_IMPLEMENTED); 15161b6e0dbaSJack F Vogel } 15171b6e0dbaSJack F Vogel 15181b6e0dbaSJack F Vogel /** 15191b6e0dbaSJack F Vogel * ixgbe_get_supported_physical_layer - Returns physical layer type 15201b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 15211b6e0dbaSJack F Vogel * 15221b6e0dbaSJack F Vogel * Determines physical layer capabilities of the current configuration. 15231b6e0dbaSJack F Vogel **/ 15241b6e0dbaSJack F Vogel u32 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw) 15251b6e0dbaSJack F Vogel { 15261b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer, 15271b6e0dbaSJack F Vogel (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN); 15281b6e0dbaSJack F Vogel } 15290ac6dfecSJack F Vogel 15300ac6dfecSJack F Vogel /** 1531a621e3c8SJack F Vogel * ixgbe_enable_rx_dma - Enables Rx DMA unit, dependent on device specifics 15320ac6dfecSJack F Vogel * @hw: pointer to hardware structure 15330ac6dfecSJack F Vogel * @regval: bitfield to write to the Rx DMA register 15340ac6dfecSJack F Vogel * 15350ac6dfecSJack F Vogel * Enables the Rx DMA unit of the device. 15360ac6dfecSJack F Vogel **/ 15370ac6dfecSJack F Vogel s32 ixgbe_enable_rx_dma(struct ixgbe_hw *hw, u32 regval) 15380ac6dfecSJack F Vogel { 15390ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_rx_dma, 15400ac6dfecSJack F Vogel (hw, regval), IXGBE_NOT_IMPLEMENTED); 15410ac6dfecSJack F Vogel } 1542d8602bb9SJack F Vogel 1543d8602bb9SJack F Vogel /** 154485d0a26eSJack F Vogel * ixgbe_disable_sec_rx_path - Stops the receive data path 154585d0a26eSJack F Vogel * @hw: pointer to hardware structure 154685d0a26eSJack F Vogel * 154785d0a26eSJack F Vogel * Stops the receive data path. 154885d0a26eSJack F Vogel **/ 154985d0a26eSJack F Vogel s32 ixgbe_disable_sec_rx_path(struct ixgbe_hw *hw) 155085d0a26eSJack F Vogel { 155185d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.disable_sec_rx_path, 155285d0a26eSJack F Vogel (hw), IXGBE_NOT_IMPLEMENTED); 155385d0a26eSJack F Vogel } 155485d0a26eSJack F Vogel 155585d0a26eSJack F Vogel /** 155685d0a26eSJack F Vogel * ixgbe_enable_sec_rx_path - Enables the receive data path 155785d0a26eSJack F Vogel * @hw: pointer to hardware structure 155885d0a26eSJack F Vogel * 155985d0a26eSJack F Vogel * Enables the receive data path. 156085d0a26eSJack F Vogel **/ 156185d0a26eSJack F Vogel s32 ixgbe_enable_sec_rx_path(struct ixgbe_hw *hw) 156285d0a26eSJack F Vogel { 156385d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_sec_rx_path, 156485d0a26eSJack F Vogel (hw), IXGBE_NOT_IMPLEMENTED); 156585d0a26eSJack F Vogel } 156685d0a26eSJack F Vogel 156785d0a26eSJack F Vogel /** 1568d8602bb9SJack F Vogel * ixgbe_acquire_swfw_semaphore - Acquire SWFW semaphore 1569d8602bb9SJack F Vogel * @hw: pointer to hardware structure 1570d8602bb9SJack F Vogel * @mask: Mask to specify which semaphore to acquire 1571d8602bb9SJack F Vogel * 1572d8602bb9SJack F Vogel * Acquires the SWFW semaphore through SW_FW_SYNC register for the specified 1573d8602bb9SJack F Vogel * function (CSR, PHY0, PHY1, EEPROM, Flash) 1574d8602bb9SJack F Vogel **/ 1575758cc3dcSJack F Vogel s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u32 mask) 1576d8602bb9SJack F Vogel { 1577d8602bb9SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.acquire_swfw_sync, 1578d8602bb9SJack F Vogel (hw, mask), IXGBE_NOT_IMPLEMENTED); 1579d8602bb9SJack F Vogel } 1580d8602bb9SJack F Vogel 1581d8602bb9SJack F Vogel /** 1582d8602bb9SJack F Vogel * ixgbe_release_swfw_semaphore - Release SWFW semaphore 1583d8602bb9SJack F Vogel * @hw: pointer to hardware structure 1584d8602bb9SJack F Vogel * @mask: Mask to specify which semaphore to release 1585d8602bb9SJack F Vogel * 1586d8602bb9SJack F Vogel * Releases the SWFW semaphore through SW_FW_SYNC register for the specified 1587d8602bb9SJack F Vogel * function (CSR, PHY0, PHY1, EEPROM, Flash) 1588d8602bb9SJack F Vogel **/ 1589758cc3dcSJack F Vogel void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u32 mask) 1590d8602bb9SJack F Vogel { 1591d8602bb9SJack F Vogel if (hw->mac.ops.release_swfw_sync) 1592d8602bb9SJack F Vogel hw->mac.ops.release_swfw_sync(hw, mask); 1593d8602bb9SJack F Vogel } 1594d8602bb9SJack F Vogel 1595758cc3dcSJack F Vogel 1596758cc3dcSJack F Vogel void ixgbe_disable_rx(struct ixgbe_hw *hw) 1597758cc3dcSJack F Vogel { 1598758cc3dcSJack F Vogel if (hw->mac.ops.disable_rx) 1599758cc3dcSJack F Vogel hw->mac.ops.disable_rx(hw); 1600758cc3dcSJack F Vogel } 1601758cc3dcSJack F Vogel 1602758cc3dcSJack F Vogel void ixgbe_enable_rx(struct ixgbe_hw *hw) 1603758cc3dcSJack F Vogel { 1604758cc3dcSJack F Vogel if (hw->mac.ops.enable_rx) 1605758cc3dcSJack F Vogel hw->mac.ops.enable_rx(hw); 1606758cc3dcSJack F Vogel } 1607758cc3dcSJack F Vogel 1608758cc3dcSJack F Vogel /** 1609758cc3dcSJack F Vogel * ixgbe_set_rate_select_speed - Set module link speed 1610758cc3dcSJack F Vogel * @hw: pointer to hardware structure 1611758cc3dcSJack F Vogel * @speed: link speed to set 1612758cc3dcSJack F Vogel * 1613758cc3dcSJack F Vogel * Set module link speed via the rate select. 1614758cc3dcSJack F Vogel */ 1615758cc3dcSJack F Vogel void ixgbe_set_rate_select_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed) 1616758cc3dcSJack F Vogel { 1617758cc3dcSJack F Vogel if (hw->mac.ops.set_rate_select_speed) 1618758cc3dcSJack F Vogel hw->mac.ops.set_rate_select_speed(hw, speed); 1619758cc3dcSJack F Vogel } 1620