19ca4041bSJack F Vogel /****************************************************************************** 213705f88SJack F Vogel 30ecc2ff0SJack F Vogel Copyright (c) 2001-2013, 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 3813705f88SJack F Vogel /** 39fd75b91dSJack F Vogel * ixgbe_dcb_get_rtrup2tc - read rtrup2tc reg 40fd75b91dSJack F Vogel * @hw: pointer to hardware structure 41fd75b91dSJack F Vogel * @map: pointer to u8 arr for returning map 42fd75b91dSJack F Vogel * 43fd75b91dSJack F Vogel * Read the rtrup2tc HW register and resolve its content into map 44fd75b91dSJack F Vogel **/ 45fd75b91dSJack F Vogel void ixgbe_dcb_get_rtrup2tc(struct ixgbe_hw *hw, u8 *map) 46fd75b91dSJack F Vogel { 47fd75b91dSJack F Vogel if (hw->mac.ops.get_rtrup2tc) 48fd75b91dSJack F Vogel hw->mac.ops.get_rtrup2tc(hw, map); 49fd75b91dSJack F Vogel } 50fd75b91dSJack F Vogel 51fd75b91dSJack F Vogel /** 5213705f88SJack F Vogel * ixgbe_init_shared_code - Initialize the shared code 5313705f88SJack F Vogel * @hw: pointer to hardware structure 5413705f88SJack F Vogel * 5513705f88SJack F Vogel * This will assign function pointers and assign the MAC type and PHY code. 5613705f88SJack F Vogel * Does not touch the hardware. This function must be called prior to any 5713705f88SJack F Vogel * other function in the shared code. The ixgbe_hw structure should be 5813705f88SJack F Vogel * memset to 0 prior to calling this function. The following fields in 5913705f88SJack F Vogel * hw structure should be filled in prior to calling this function: 6013705f88SJack F Vogel * hw_addr, back, device_id, vendor_id, subsystem_device_id, 6113705f88SJack F Vogel * subsystem_vendor_id, and revision_id 6213705f88SJack F Vogel **/ 6313705f88SJack F Vogel s32 ixgbe_init_shared_code(struct ixgbe_hw *hw) 6413705f88SJack F Vogel { 653ec35e52SJack F Vogel s32 status; 6613705f88SJack F Vogel 672969bf0eSJack F Vogel DEBUGFUNC("ixgbe_init_shared_code"); 682969bf0eSJack F Vogel 6913705f88SJack F Vogel /* 703ec35e52SJack F Vogel * Set the mac type 713ec35e52SJack F Vogel */ 723ec35e52SJack F Vogel ixgbe_set_mac_type(hw); 733ec35e52SJack F Vogel 743ec35e52SJack F Vogel switch (hw->mac.type) { 753ec35e52SJack F Vogel case ixgbe_mac_82598EB: 769ca4041bSJack F Vogel status = ixgbe_init_ops_82598(hw); 7713705f88SJack F Vogel break; 780ac6dfecSJack F Vogel case ixgbe_mac_82599EB: 790ac6dfecSJack F Vogel status = ixgbe_init_ops_82599(hw); 800ac6dfecSJack F Vogel break; 811a4e3449SJack F Vogel case ixgbe_mac_82599_vf: 8285d0a26eSJack F Vogel case ixgbe_mac_X540_vf: 831a4e3449SJack F Vogel status = ixgbe_init_ops_vf(hw); 841a4e3449SJack F Vogel break; 8585d0a26eSJack F Vogel case ixgbe_mac_X540: 8685d0a26eSJack F Vogel status = ixgbe_init_ops_X540(hw); 8785d0a26eSJack F Vogel break; 8813705f88SJack F Vogel default: 8913705f88SJack F Vogel status = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 9013705f88SJack F Vogel break; 9113705f88SJack F Vogel } 9213705f88SJack F Vogel 9313705f88SJack F Vogel return status; 9413705f88SJack F Vogel } 9513705f88SJack F Vogel 9613705f88SJack F Vogel /** 973ec35e52SJack F Vogel * ixgbe_set_mac_type - Sets MAC type 983ec35e52SJack F Vogel * @hw: pointer to the HW structure 993ec35e52SJack F Vogel * 1003ec35e52SJack F Vogel * This function sets the mac type of the adapter based on the 1013ec35e52SJack F Vogel * vendor ID and device ID stored in the hw structure. 1023ec35e52SJack F Vogel **/ 1033ec35e52SJack F Vogel s32 ixgbe_set_mac_type(struct ixgbe_hw *hw) 1043ec35e52SJack F Vogel { 1053ec35e52SJack F Vogel s32 ret_val = IXGBE_SUCCESS; 1063ec35e52SJack F Vogel 1079ca4041bSJack F Vogel DEBUGFUNC("ixgbe_set_mac_type\n"); 1083ec35e52SJack F Vogel 109fd75b91dSJack F Vogel if (hw->vendor_id != IXGBE_INTEL_VENDOR_ID) { 110fd75b91dSJack F Vogel ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED, 111fd75b91dSJack F Vogel "Unsupported vendor id: %x", hw->vendor_id); 112fd75b91dSJack F Vogel return IXGBE_ERR_DEVICE_NOT_SUPPORTED; 113fd75b91dSJack F Vogel } 114fd75b91dSJack F Vogel 1153ec35e52SJack F Vogel switch (hw->device_id) { 1161b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598: 1170ac6dfecSJack F Vogel case IXGBE_DEV_ID_82598_BX: 1183ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_SINGLE_PORT: 1193ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_DUAL_PORT: 1209ca4041bSJack F Vogel case IXGBE_DEV_ID_82598AT: 1212969bf0eSJack F Vogel case IXGBE_DEV_ID_82598AT2: 1223ec35e52SJack F Vogel case IXGBE_DEV_ID_82598EB_CX4: 1239ca4041bSJack F Vogel case IXGBE_DEV_ID_82598_CX4_DUAL_PORT: 1241b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_DA_DUAL_PORT: 1251b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM: 1269ca4041bSJack F Vogel case IXGBE_DEV_ID_82598EB_XF_LR: 1271b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598EB_SFP_LOM: 1283ec35e52SJack F Vogel hw->mac.type = ixgbe_mac_82598EB; 1293ec35e52SJack F Vogel break; 1300ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_KX4: 1312969bf0eSJack F Vogel case IXGBE_DEV_ID_82599_KX4_MEZZ: 132d8602bb9SJack F Vogel case IXGBE_DEV_ID_82599_XAUI_LOM: 1332969bf0eSJack F Vogel case IXGBE_DEV_ID_82599_COMBO_BACKPLANE: 13485d0a26eSJack F Vogel case IXGBE_DEV_ID_82599_KR: 1350ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_SFP: 1361a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_BACKPLANE_FCOE: 1371a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_SFP_FCOE: 13885d0a26eSJack F Vogel case IXGBE_DEV_ID_82599_SFP_EM: 139a621e3c8SJack F Vogel case IXGBE_DEV_ID_82599_SFP_SF2: 1400ecc2ff0SJack F Vogel case IXGBE_DEV_ID_82599_SFP_SF_QP: 14185d0a26eSJack F Vogel case IXGBE_DEV_ID_82599EN_SFP: 1420ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_CX4: 1430ecc2ff0SJack F Vogel case IXGBE_DEV_ID_82599_BYPASS: 144c0014855SJack F Vogel case IXGBE_DEV_ID_82599_T3_LOM: 1450ac6dfecSJack F Vogel hw->mac.type = ixgbe_mac_82599EB; 1460ac6dfecSJack F Vogel break; 1471a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_VF: 1480ecc2ff0SJack F Vogel case IXGBE_DEV_ID_82599_VF_HV: 1491a4e3449SJack F Vogel hw->mac.type = ixgbe_mac_82599_vf; 1501a4e3449SJack F Vogel break; 15185d0a26eSJack F Vogel case IXGBE_DEV_ID_X540_VF: 1520ecc2ff0SJack F Vogel case IXGBE_DEV_ID_X540_VF_HV: 15385d0a26eSJack F Vogel hw->mac.type = ixgbe_mac_X540_vf; 15485d0a26eSJack F Vogel break; 15585d0a26eSJack F Vogel case IXGBE_DEV_ID_X540T: 1560ecc2ff0SJack F Vogel case IXGBE_DEV_ID_X540_BYPASS: 15785d0a26eSJack F Vogel hw->mac.type = ixgbe_mac_X540; 15885d0a26eSJack F Vogel break; 1593ec35e52SJack F Vogel default: 1603ec35e52SJack F Vogel ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 161fd75b91dSJack F Vogel ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED, 162fd75b91dSJack F Vogel "Unsupported device id: %x", 163fd75b91dSJack F Vogel hw->device_id); 1643ec35e52SJack F Vogel break; 1653ec35e52SJack F Vogel } 1663ec35e52SJack F Vogel 1679ca4041bSJack F Vogel DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n", 1689ca4041bSJack F Vogel hw->mac.type, ret_val); 1693ec35e52SJack F Vogel return ret_val; 1703ec35e52SJack F Vogel } 1713ec35e52SJack F Vogel 1723ec35e52SJack F Vogel /** 17313705f88SJack F Vogel * ixgbe_init_hw - Initialize the hardware 17413705f88SJack F Vogel * @hw: pointer to hardware structure 17513705f88SJack F Vogel * 17613705f88SJack F Vogel * Initialize the hardware by resetting and then starting the hardware 17713705f88SJack F Vogel **/ 17813705f88SJack F Vogel s32 ixgbe_init_hw(struct ixgbe_hw *hw) 17913705f88SJack F Vogel { 1809ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw), 18113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 18213705f88SJack F Vogel } 18313705f88SJack F Vogel 18413705f88SJack F Vogel /** 18513705f88SJack F Vogel * ixgbe_reset_hw - Performs a hardware reset 18613705f88SJack F Vogel * @hw: pointer to hardware structure 18713705f88SJack F Vogel * 18813705f88SJack F Vogel * Resets the hardware by resetting the transmit and receive units, masks and 18913705f88SJack F Vogel * clears all interrupts, performs a PHY reset, and performs a MAC reset 19013705f88SJack F Vogel **/ 19113705f88SJack F Vogel s32 ixgbe_reset_hw(struct ixgbe_hw *hw) 19213705f88SJack F Vogel { 1939ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw), 19413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 19513705f88SJack F Vogel } 19613705f88SJack F Vogel 19713705f88SJack F Vogel /** 1989ca4041bSJack F Vogel * ixgbe_start_hw - Prepares hardware for Rx/Tx 19913705f88SJack F Vogel * @hw: pointer to hardware structure 20013705f88SJack F Vogel * 20113705f88SJack F Vogel * Starts the hardware by filling the bus info structure and media type, 20213705f88SJack F Vogel * clears all on chip counters, initializes receive address registers, 20313705f88SJack F Vogel * multicast table, VLAN filter table, calls routine to setup link and 20413705f88SJack F Vogel * flow control settings, and leaves transmit and receive units disabled 20513705f88SJack F Vogel * and uninitialized. 20613705f88SJack F Vogel **/ 20713705f88SJack F Vogel s32 ixgbe_start_hw(struct ixgbe_hw *hw) 20813705f88SJack F Vogel { 2099ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw), 21013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 21113705f88SJack F Vogel } 21213705f88SJack F Vogel 21313705f88SJack F Vogel /** 214c0014855SJack F Vogel * ixgbe_enable_relaxed_ordering - Enables tx relaxed ordering, 215c0014855SJack F Vogel * which is disabled by default in ixgbe_start_hw(); 216c0014855SJack F Vogel * 217c0014855SJack F Vogel * @hw: pointer to hardware structure 218c0014855SJack F Vogel * 219c0014855SJack F Vogel * Enable relaxed ordering; 220c0014855SJack F Vogel **/ 221c0014855SJack F Vogel void ixgbe_enable_relaxed_ordering(struct ixgbe_hw *hw) 222c0014855SJack F Vogel { 223c0014855SJack F Vogel if (hw->mac.ops.enable_relaxed_ordering) 224c0014855SJack F Vogel hw->mac.ops.enable_relaxed_ordering(hw); 225c0014855SJack F Vogel } 226c0014855SJack F Vogel 227c0014855SJack F Vogel /** 22813705f88SJack F Vogel * ixgbe_clear_hw_cntrs - Clear hardware counters 22913705f88SJack F Vogel * @hw: pointer to hardware structure 23013705f88SJack F Vogel * 23113705f88SJack F Vogel * Clears all hardware statistics counters by reading them from the hardware 23213705f88SJack F Vogel * Statistics counters are clear on read. 23313705f88SJack F Vogel **/ 23413705f88SJack F Vogel s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw) 23513705f88SJack F Vogel { 2369ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw), 23713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 23813705f88SJack F Vogel } 23913705f88SJack F Vogel 24013705f88SJack F Vogel /** 24113705f88SJack F Vogel * ixgbe_get_media_type - Get media type 24213705f88SJack F Vogel * @hw: pointer to hardware structure 24313705f88SJack F Vogel * 24413705f88SJack F Vogel * Returns the media type (fiber, copper, backplane) 24513705f88SJack F Vogel **/ 24613705f88SJack F Vogel enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw) 24713705f88SJack F Vogel { 2489ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw), 24913705f88SJack F Vogel ixgbe_media_type_unknown); 25013705f88SJack F Vogel } 25113705f88SJack F Vogel 25213705f88SJack F Vogel /** 25313705f88SJack F Vogel * ixgbe_get_mac_addr - Get MAC address 25413705f88SJack F Vogel * @hw: pointer to hardware structure 25513705f88SJack F Vogel * @mac_addr: Adapter MAC address 25613705f88SJack F Vogel * 25713705f88SJack F Vogel * Reads the adapter's MAC address from the first Receive Address Register 2589ca4041bSJack F Vogel * (RAR0) A reset of the adapter must have been performed prior to calling 2599ca4041bSJack F Vogel * this function in order for the MAC address to have been loaded from the 2609ca4041bSJack F Vogel * EEPROM into RAR0 26113705f88SJack F Vogel **/ 26213705f88SJack F Vogel s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr) 26313705f88SJack F Vogel { 2649ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr, 26513705f88SJack F Vogel (hw, mac_addr), IXGBE_NOT_IMPLEMENTED); 26613705f88SJack F Vogel } 26713705f88SJack F Vogel 26813705f88SJack F Vogel /** 2690ac6dfecSJack F Vogel * ixgbe_get_san_mac_addr - Get SAN MAC address 2700ac6dfecSJack F Vogel * @hw: pointer to hardware structure 2710ac6dfecSJack F Vogel * @san_mac_addr: SAN MAC address 2720ac6dfecSJack F Vogel * 2730ac6dfecSJack F Vogel * Reads the SAN MAC address from the EEPROM, if it's available. This is 2740ac6dfecSJack F Vogel * per-port, so set_lan_id() must be called before reading the addresses. 2750ac6dfecSJack F Vogel **/ 2760ac6dfecSJack F Vogel s32 ixgbe_get_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr) 2770ac6dfecSJack F Vogel { 2780ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_san_mac_addr, 2790ac6dfecSJack F Vogel (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED); 2800ac6dfecSJack F Vogel } 2810ac6dfecSJack F Vogel 2820ac6dfecSJack F Vogel /** 2830ac6dfecSJack F Vogel * ixgbe_set_san_mac_addr - Write a SAN MAC address 2840ac6dfecSJack F Vogel * @hw: pointer to hardware structure 2850ac6dfecSJack F Vogel * @san_mac_addr: SAN MAC address 2860ac6dfecSJack F Vogel * 2870ac6dfecSJack F Vogel * Writes A SAN MAC address to the EEPROM. 2880ac6dfecSJack F Vogel **/ 2890ac6dfecSJack F Vogel s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr) 2900ac6dfecSJack F Vogel { 2910ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_san_mac_addr, 2920ac6dfecSJack F Vogel (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED); 2930ac6dfecSJack F Vogel } 2940ac6dfecSJack F Vogel 2950ac6dfecSJack F Vogel /** 2960ac6dfecSJack F Vogel * ixgbe_get_device_caps - Get additional device capabilities 2970ac6dfecSJack F Vogel * @hw: pointer to hardware structure 2980ac6dfecSJack F Vogel * @device_caps: the EEPROM word for device capabilities 2990ac6dfecSJack F Vogel * 3000ac6dfecSJack F Vogel * Reads the extra device capabilities from the EEPROM 3010ac6dfecSJack F Vogel **/ 3020ac6dfecSJack F Vogel s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps) 3030ac6dfecSJack F Vogel { 3040ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_device_caps, 3050ac6dfecSJack F Vogel (hw, device_caps), IXGBE_NOT_IMPLEMENTED); 3060ac6dfecSJack F Vogel } 3070ac6dfecSJack F Vogel 3080ac6dfecSJack F Vogel /** 3092969bf0eSJack F Vogel * ixgbe_get_wwn_prefix - Get alternative WWNN/WWPN prefix from the EEPROM 3102969bf0eSJack F Vogel * @hw: pointer to hardware structure 3112969bf0eSJack F Vogel * @wwnn_prefix: the alternative WWNN prefix 3122969bf0eSJack F Vogel * @wwpn_prefix: the alternative WWPN prefix 3132969bf0eSJack F Vogel * 3142969bf0eSJack F Vogel * This function will read the EEPROM from the alternative SAN MAC address 3152969bf0eSJack F Vogel * block to check the support for the alternative WWNN/WWPN prefix support. 3162969bf0eSJack F Vogel **/ 3172969bf0eSJack F Vogel s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix, 3182969bf0eSJack F Vogel u16 *wwpn_prefix) 3192969bf0eSJack F Vogel { 3202969bf0eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_wwn_prefix, 3212969bf0eSJack F Vogel (hw, wwnn_prefix, wwpn_prefix), 3222969bf0eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 3232969bf0eSJack F Vogel } 3242969bf0eSJack F Vogel 3252969bf0eSJack F Vogel /** 3261a4e3449SJack F Vogel * ixgbe_get_fcoe_boot_status - Get FCOE boot status from EEPROM 3271a4e3449SJack F Vogel * @hw: pointer to hardware structure 3281a4e3449SJack F Vogel * @bs: the fcoe boot status 3291a4e3449SJack F Vogel * 3301a4e3449SJack F Vogel * This function will read the FCOE boot status from the iSCSI FCOE block 3311a4e3449SJack F Vogel **/ 3321a4e3449SJack F Vogel s32 ixgbe_get_fcoe_boot_status(struct ixgbe_hw *hw, u16 *bs) 3331a4e3449SJack F Vogel { 3341a4e3449SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_fcoe_boot_status, 3351a4e3449SJack F Vogel (hw, bs), 3361a4e3449SJack F Vogel IXGBE_NOT_IMPLEMENTED); 3371a4e3449SJack F Vogel } 3381a4e3449SJack F Vogel 3391a4e3449SJack F Vogel /** 34013705f88SJack F Vogel * ixgbe_get_bus_info - Set PCI bus info 34113705f88SJack F Vogel * @hw: pointer to hardware structure 34213705f88SJack F Vogel * 34313705f88SJack F Vogel * Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure 34413705f88SJack F Vogel **/ 34513705f88SJack F Vogel s32 ixgbe_get_bus_info(struct ixgbe_hw *hw) 34613705f88SJack F Vogel { 3479ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw), 34813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 34913705f88SJack F Vogel } 35013705f88SJack F Vogel 35113705f88SJack F Vogel /** 3529ca4041bSJack F Vogel * ixgbe_get_num_of_tx_queues - Get Tx queues 35313705f88SJack F Vogel * @hw: pointer to hardware structure 35413705f88SJack F Vogel * 35513705f88SJack F Vogel * Returns the number of transmit queues for the given adapter. 35613705f88SJack F Vogel **/ 35713705f88SJack F Vogel u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw) 35813705f88SJack F Vogel { 3599ca4041bSJack F Vogel return hw->mac.max_tx_queues; 36013705f88SJack F Vogel } 36113705f88SJack F Vogel 36213705f88SJack F Vogel /** 3639ca4041bSJack F Vogel * ixgbe_get_num_of_rx_queues - Get Rx queues 36413705f88SJack F Vogel * @hw: pointer to hardware structure 36513705f88SJack F Vogel * 36613705f88SJack F Vogel * Returns the number of receive queues for the given adapter. 36713705f88SJack F Vogel **/ 36813705f88SJack F Vogel u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw) 36913705f88SJack F Vogel { 3709ca4041bSJack F Vogel return hw->mac.max_rx_queues; 37113705f88SJack F Vogel } 37213705f88SJack F Vogel 37313705f88SJack F Vogel /** 3749ca4041bSJack F Vogel * ixgbe_stop_adapter - Disable Rx/Tx units 37513705f88SJack F Vogel * @hw: pointer to hardware structure 37613705f88SJack F Vogel * 37713705f88SJack F Vogel * Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts, 37813705f88SJack F Vogel * disables transmit and receive units. The adapter_stopped flag is used by 37913705f88SJack F Vogel * the shared code and drivers to determine if the adapter is in a stopped 38013705f88SJack F Vogel * state and should not touch the hardware. 38113705f88SJack F Vogel **/ 38213705f88SJack F Vogel s32 ixgbe_stop_adapter(struct ixgbe_hw *hw) 38313705f88SJack F Vogel { 3849ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw), 38513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 38613705f88SJack F Vogel } 38713705f88SJack F Vogel 38813705f88SJack F Vogel /** 3891a4e3449SJack F Vogel * ixgbe_read_pba_string - Reads part number string from EEPROM 3901a4e3449SJack F Vogel * @hw: pointer to hardware structure 3911a4e3449SJack F Vogel * @pba_num: stores the part number string from the EEPROM 3921a4e3449SJack F Vogel * @pba_num_size: part number string buffer length 3931a4e3449SJack F Vogel * 3941a4e3449SJack F Vogel * Reads the part number string from the EEPROM. 3951a4e3449SJack F Vogel **/ 3961a4e3449SJack F Vogel s32 ixgbe_read_pba_string(struct ixgbe_hw *hw, u8 *pba_num, u32 pba_num_size) 3971a4e3449SJack F Vogel { 3981a4e3449SJack F Vogel return ixgbe_read_pba_string_generic(hw, pba_num, pba_num_size); 3991a4e3449SJack F Vogel } 4001a4e3449SJack F Vogel 4011a4e3449SJack F Vogel /** 4029ca4041bSJack F Vogel * ixgbe_read_pba_num - Reads part number from EEPROM 4039ca4041bSJack F Vogel * @hw: pointer to hardware structure 4049ca4041bSJack F Vogel * @pba_num: stores the part number from the EEPROM 4059ca4041bSJack F Vogel * 4069ca4041bSJack F Vogel * Reads the part number from the EEPROM. 4079ca4041bSJack F Vogel **/ 4089ca4041bSJack F Vogel s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num) 4099ca4041bSJack F Vogel { 4109ca4041bSJack F Vogel return ixgbe_read_pba_num_generic(hw, pba_num); 4119ca4041bSJack F Vogel } 4129ca4041bSJack F Vogel 4139ca4041bSJack F Vogel /** 41413705f88SJack F Vogel * ixgbe_identify_phy - Get PHY type 41513705f88SJack F Vogel * @hw: pointer to hardware structure 41613705f88SJack F Vogel * 41713705f88SJack F Vogel * Determines the physical layer module found on the current adapter. 41813705f88SJack F Vogel **/ 41913705f88SJack F Vogel s32 ixgbe_identify_phy(struct ixgbe_hw *hw) 42013705f88SJack F Vogel { 42113705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 42213705f88SJack F Vogel 42313705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 4241a4e3449SJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.identify, (hw), 42513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 42613705f88SJack F Vogel } 42713705f88SJack F Vogel 42813705f88SJack F Vogel return status; 42913705f88SJack F Vogel } 43013705f88SJack F Vogel 43113705f88SJack F Vogel /** 43213705f88SJack F Vogel * ixgbe_reset_phy - Perform a PHY reset 43313705f88SJack F Vogel * @hw: pointer to hardware structure 43413705f88SJack F Vogel **/ 43513705f88SJack F Vogel s32 ixgbe_reset_phy(struct ixgbe_hw *hw) 43613705f88SJack F Vogel { 43713705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 43813705f88SJack F Vogel 43913705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 4401b6e0dbaSJack F Vogel if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS) 44113705f88SJack F Vogel status = IXGBE_ERR_PHY; 44213705f88SJack F Vogel } 44313705f88SJack F Vogel 44413705f88SJack F Vogel if (status == IXGBE_SUCCESS) { 4459ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw), 44613705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 44713705f88SJack F Vogel } 44813705f88SJack F Vogel return status; 44913705f88SJack F Vogel } 45013705f88SJack F Vogel 45113705f88SJack F Vogel /** 4529ca4041bSJack F Vogel * ixgbe_get_phy_firmware_version - 4539ca4041bSJack F Vogel * @hw: pointer to hardware structure 4549ca4041bSJack F Vogel * @firmware_version: pointer to firmware version 4559ca4041bSJack F Vogel **/ 4569ca4041bSJack F Vogel s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version) 4579ca4041bSJack F Vogel { 4589ca4041bSJack F Vogel s32 status = IXGBE_SUCCESS; 4599ca4041bSJack F Vogel 4609ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version, 4619ca4041bSJack F Vogel (hw, firmware_version), 4629ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 4639ca4041bSJack F Vogel return status; 4649ca4041bSJack F Vogel } 4659ca4041bSJack F Vogel 4669ca4041bSJack F Vogel /** 46713705f88SJack F Vogel * ixgbe_read_phy_reg - Read PHY register 46813705f88SJack F Vogel * @hw: pointer to hardware structure 46913705f88SJack F Vogel * @reg_addr: 32 bit address of PHY register to read 47013705f88SJack F Vogel * @phy_data: Pointer to read data from PHY register 47113705f88SJack F Vogel * 47213705f88SJack F Vogel * Reads a value from a specified PHY register 47313705f88SJack F Vogel **/ 47413705f88SJack F Vogel s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 47513705f88SJack F Vogel u16 *phy_data) 47613705f88SJack F Vogel { 4770ac6dfecSJack F Vogel if (hw->phy.id == 0) 4780ac6dfecSJack F Vogel ixgbe_identify_phy(hw); 4790ac6dfecSJack F Vogel 4809ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr, 4819ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 48213705f88SJack F Vogel } 48313705f88SJack F Vogel 48413705f88SJack F Vogel /** 48513705f88SJack F Vogel * ixgbe_write_phy_reg - Write PHY register 48613705f88SJack F Vogel * @hw: pointer to hardware structure 48713705f88SJack F Vogel * @reg_addr: 32 bit PHY register to write 48813705f88SJack F Vogel * @phy_data: Data to write to the PHY register 48913705f88SJack F Vogel * 49013705f88SJack F Vogel * Writes a value to specified PHY register 49113705f88SJack F Vogel **/ 49213705f88SJack F Vogel s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 49313705f88SJack F Vogel u16 phy_data) 49413705f88SJack F Vogel { 4950ac6dfecSJack F Vogel if (hw->phy.id == 0) 4960ac6dfecSJack F Vogel ixgbe_identify_phy(hw); 4970ac6dfecSJack F Vogel 4989ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr, 4999ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 50013705f88SJack F Vogel } 50113705f88SJack F Vogel 5029ca4041bSJack F Vogel /** 5039ca4041bSJack F Vogel * ixgbe_setup_phy_link - Restart PHY autoneg 5049ca4041bSJack F Vogel * @hw: pointer to hardware structure 5059ca4041bSJack F Vogel * 5069ca4041bSJack F Vogel * Restart autonegotiation and PHY and waits for completion. 5079ca4041bSJack F Vogel **/ 5089ca4041bSJack F Vogel s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw) 5099ca4041bSJack F Vogel { 5109ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw), 51113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 51213705f88SJack F Vogel } 5139ca4041bSJack F Vogel 5149ca4041bSJack F Vogel /** 5159ca4041bSJack F Vogel * ixgbe_check_phy_link - Determine link and speed status 5169ca4041bSJack F Vogel * @hw: pointer to hardware structure 5179ca4041bSJack F Vogel * 5189ca4041bSJack F Vogel * Reads a PHY register to determine if link is up and the current speed for 5199ca4041bSJack F Vogel * the PHY. 5209ca4041bSJack F Vogel **/ 5219ca4041bSJack F Vogel s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 5229ca4041bSJack F Vogel bool *link_up) 5239ca4041bSJack F Vogel { 5249ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed, 5259ca4041bSJack F Vogel link_up), IXGBE_NOT_IMPLEMENTED); 5269ca4041bSJack F Vogel } 5279ca4041bSJack F Vogel 5289ca4041bSJack F Vogel /** 5299ca4041bSJack F Vogel * ixgbe_setup_phy_link_speed - Set auto advertise 5309ca4041bSJack F Vogel * @hw: pointer to hardware structure 5319ca4041bSJack F Vogel * @speed: new link speed 5329ca4041bSJack F Vogel * 5339ca4041bSJack F Vogel * Sets the auto advertised capabilities 5349ca4041bSJack F Vogel **/ 5359ca4041bSJack F Vogel s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed, 5369ca4041bSJack F Vogel bool autoneg_wait_to_complete) 5379ca4041bSJack F Vogel { 5389ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_link_speed, (hw, speed, 5390ecc2ff0SJack F Vogel autoneg_wait_to_complete), 5409ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 54113705f88SJack F Vogel } 54213705f88SJack F Vogel 54313705f88SJack F Vogel /** 54413705f88SJack F Vogel * ixgbe_check_link - Get link and speed status 54513705f88SJack F Vogel * @hw: pointer to hardware structure 54613705f88SJack F Vogel * 54713705f88SJack F Vogel * Reads the links register to determine if link is up and the current speed 54813705f88SJack F Vogel **/ 54913705f88SJack F Vogel s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 5509ca4041bSJack F Vogel bool *link_up, bool link_up_wait_to_complete) 55113705f88SJack F Vogel { 5529ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.check_link, (hw, speed, 5539ca4041bSJack F Vogel link_up, link_up_wait_to_complete), 55413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 55513705f88SJack F Vogel } 55613705f88SJack F Vogel 55713705f88SJack F Vogel /** 5581a4e3449SJack F Vogel * ixgbe_disable_tx_laser - Disable Tx laser 5591a4e3449SJack F Vogel * @hw: pointer to hardware structure 5601a4e3449SJack F Vogel * 5611a4e3449SJack F Vogel * If the driver needs to disable the laser on SFI optics. 5621a4e3449SJack F Vogel **/ 5631a4e3449SJack F Vogel void ixgbe_disable_tx_laser(struct ixgbe_hw *hw) 5641a4e3449SJack F Vogel { 5651a4e3449SJack F Vogel if (hw->mac.ops.disable_tx_laser) 5661a4e3449SJack F Vogel hw->mac.ops.disable_tx_laser(hw); 5671a4e3449SJack F Vogel } 5681a4e3449SJack F Vogel 5691a4e3449SJack F Vogel /** 5701a4e3449SJack F Vogel * ixgbe_enable_tx_laser - Enable Tx laser 5711a4e3449SJack F Vogel * @hw: pointer to hardware structure 5721a4e3449SJack F Vogel * 5731a4e3449SJack F Vogel * If the driver needs to enable the laser on SFI optics. 5741a4e3449SJack F Vogel **/ 5751a4e3449SJack F Vogel void ixgbe_enable_tx_laser(struct ixgbe_hw *hw) 5761a4e3449SJack F Vogel { 5771a4e3449SJack F Vogel if (hw->mac.ops.enable_tx_laser) 5781a4e3449SJack F Vogel hw->mac.ops.enable_tx_laser(hw); 5791a4e3449SJack F Vogel } 5801a4e3449SJack F Vogel 5811a4e3449SJack F Vogel /** 5821a4e3449SJack F Vogel * ixgbe_flap_tx_laser - flap Tx laser to start autotry process 5831a4e3449SJack F Vogel * @hw: pointer to hardware structure 5841a4e3449SJack F Vogel * 5851a4e3449SJack F Vogel * When the driver changes the link speeds that it can support then 5861a4e3449SJack F Vogel * flap the tx laser to alert the link partner to start autotry 5871a4e3449SJack F Vogel * process on its end. 5881a4e3449SJack F Vogel **/ 5891a4e3449SJack F Vogel void ixgbe_flap_tx_laser(struct ixgbe_hw *hw) 5901a4e3449SJack F Vogel { 5911a4e3449SJack F Vogel if (hw->mac.ops.flap_tx_laser) 5921a4e3449SJack F Vogel hw->mac.ops.flap_tx_laser(hw); 5931a4e3449SJack F Vogel } 5941a4e3449SJack F Vogel 5951a4e3449SJack F Vogel /** 5962969bf0eSJack F Vogel * ixgbe_setup_link - Set link speed 59713705f88SJack F Vogel * @hw: pointer to hardware structure 59813705f88SJack F Vogel * @speed: new link speed 59913705f88SJack F Vogel * 6002969bf0eSJack F Vogel * Configures link settings. Restarts the link. 6012969bf0eSJack F Vogel * Performs autonegotiation if needed. 60213705f88SJack F Vogel **/ 6032969bf0eSJack F Vogel s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed, 60413705f88SJack F Vogel bool autoneg_wait_to_complete) 60513705f88SJack F Vogel { 6062969bf0eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw, speed, 6070ecc2ff0SJack F Vogel autoneg_wait_to_complete), 60813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 60913705f88SJack F Vogel } 61013705f88SJack F Vogel 61113705f88SJack F Vogel /** 6129ca4041bSJack F Vogel * ixgbe_get_link_capabilities - Returns link capabilities 61313705f88SJack F Vogel * @hw: pointer to hardware structure 61413705f88SJack F Vogel * 6159ca4041bSJack F Vogel * Determines the link capabilities of the current configuration. 61613705f88SJack F Vogel **/ 6179ca4041bSJack F Vogel s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 61813705f88SJack F Vogel bool *autoneg) 61913705f88SJack F Vogel { 6209ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw, 6219ca4041bSJack F Vogel speed, autoneg), IXGBE_NOT_IMPLEMENTED); 62213705f88SJack F Vogel } 62313705f88SJack F Vogel 62413705f88SJack F Vogel /** 6259ca4041bSJack F Vogel * ixgbe_led_on - Turn on LEDs 62613705f88SJack F Vogel * @hw: pointer to hardware structure 62713705f88SJack F Vogel * @index: led number to turn on 62813705f88SJack F Vogel * 62913705f88SJack F Vogel * Turns on the software controllable LEDs. 63013705f88SJack F Vogel **/ 63113705f88SJack F Vogel s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index) 63213705f88SJack F Vogel { 6339ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index), 63413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 63513705f88SJack F Vogel } 63613705f88SJack F Vogel 63713705f88SJack F Vogel /** 6389ca4041bSJack F Vogel * ixgbe_led_off - Turn off LEDs 63913705f88SJack F Vogel * @hw: pointer to hardware structure 64013705f88SJack F Vogel * @index: led number to turn off 64113705f88SJack F Vogel * 64213705f88SJack F Vogel * Turns off the software controllable LEDs. 64313705f88SJack F Vogel **/ 64413705f88SJack F Vogel s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index) 64513705f88SJack F Vogel { 6469ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index), 64713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 64813705f88SJack F Vogel } 64913705f88SJack F Vogel 65013705f88SJack F Vogel /** 6519ca4041bSJack F Vogel * ixgbe_blink_led_start - Blink LEDs 65213705f88SJack F Vogel * @hw: pointer to hardware structure 65313705f88SJack F Vogel * @index: led number to blink 65413705f88SJack F Vogel * 65513705f88SJack F Vogel * Blink LED based on index. 65613705f88SJack F Vogel **/ 65713705f88SJack F Vogel s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index) 65813705f88SJack F Vogel { 6599ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index), 66013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 66113705f88SJack F Vogel } 66213705f88SJack F Vogel 66313705f88SJack F Vogel /** 6649ca4041bSJack F Vogel * ixgbe_blink_led_stop - Stop blinking LEDs 66513705f88SJack F Vogel * @hw: pointer to hardware structure 66613705f88SJack F Vogel * 66713705f88SJack F Vogel * Stop blinking LED based on index. 66813705f88SJack F Vogel **/ 66913705f88SJack F Vogel s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index) 67013705f88SJack F Vogel { 6719ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index), 67213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 67313705f88SJack F Vogel } 67413705f88SJack F Vogel 67513705f88SJack F Vogel /** 6769ca4041bSJack F Vogel * ixgbe_init_eeprom_params - Initialize EEPROM parameters 67713705f88SJack F Vogel * @hw: pointer to hardware structure 67813705f88SJack F Vogel * 67913705f88SJack F Vogel * Initializes the EEPROM parameters ixgbe_eeprom_info within the 68013705f88SJack F Vogel * ixgbe_hw struct in order to set up EEPROM access. 68113705f88SJack F Vogel **/ 68213705f88SJack F Vogel s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw) 68313705f88SJack F Vogel { 6849ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw), 68513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 68613705f88SJack F Vogel } 68713705f88SJack F Vogel 68813705f88SJack F Vogel 68913705f88SJack F Vogel /** 69013705f88SJack F Vogel * ixgbe_write_eeprom - Write word to EEPROM 69113705f88SJack F Vogel * @hw: pointer to hardware structure 69213705f88SJack F Vogel * @offset: offset within the EEPROM to be written to 69313705f88SJack F Vogel * @data: 16 bit word to be written to the EEPROM 69413705f88SJack F Vogel * 69513705f88SJack F Vogel * Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not 69613705f88SJack F Vogel * called after this function, the EEPROM will most likely contain an 69713705f88SJack F Vogel * invalid checksum. 69813705f88SJack F Vogel **/ 69913705f88SJack F Vogel s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data) 70013705f88SJack F Vogel { 7019ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data), 70213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 70313705f88SJack F Vogel } 70413705f88SJack F Vogel 70513705f88SJack F Vogel /** 70685d0a26eSJack F Vogel * ixgbe_write_eeprom_buffer - Write word(s) to EEPROM 70785d0a26eSJack F Vogel * @hw: pointer to hardware structure 70885d0a26eSJack F Vogel * @offset: offset within the EEPROM to be written to 70985d0a26eSJack F Vogel * @data: 16 bit word(s) to be written to the EEPROM 71085d0a26eSJack F Vogel * @words: number of words 71185d0a26eSJack F Vogel * 71285d0a26eSJack F Vogel * Writes 16 bit word(s) to EEPROM. If ixgbe_eeprom_update_checksum is not 71385d0a26eSJack F Vogel * called after this function, the EEPROM will most likely contain an 71485d0a26eSJack F Vogel * invalid checksum. 71585d0a26eSJack F Vogel **/ 71685d0a26eSJack F Vogel s32 ixgbe_write_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, u16 words, 71785d0a26eSJack F Vogel u16 *data) 71885d0a26eSJack F Vogel { 71985d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.write_buffer, 72085d0a26eSJack F Vogel (hw, offset, words, data), 72185d0a26eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 72285d0a26eSJack F Vogel } 72385d0a26eSJack F Vogel 72485d0a26eSJack F Vogel /** 72513705f88SJack F Vogel * ixgbe_read_eeprom - Read word from EEPROM 72613705f88SJack F Vogel * @hw: pointer to hardware structure 72713705f88SJack F Vogel * @offset: offset within the EEPROM to be read 72813705f88SJack F Vogel * @data: read 16 bit value from EEPROM 72913705f88SJack F Vogel * 73013705f88SJack F Vogel * Reads 16 bit value from EEPROM 73113705f88SJack F Vogel **/ 73213705f88SJack F Vogel s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data) 73313705f88SJack F Vogel { 7349ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data), 73513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 73613705f88SJack F Vogel } 73713705f88SJack F Vogel 73813705f88SJack F Vogel /** 73985d0a26eSJack F Vogel * ixgbe_read_eeprom_buffer - Read word(s) from EEPROM 74085d0a26eSJack F Vogel * @hw: pointer to hardware structure 74185d0a26eSJack F Vogel * @offset: offset within the EEPROM to be read 74285d0a26eSJack F Vogel * @data: read 16 bit word(s) from EEPROM 74385d0a26eSJack F Vogel * @words: number of words 74485d0a26eSJack F Vogel * 74585d0a26eSJack F Vogel * Reads 16 bit word(s) from EEPROM 74685d0a26eSJack F Vogel **/ 74785d0a26eSJack F Vogel s32 ixgbe_read_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, 74885d0a26eSJack F Vogel u16 words, u16 *data) 74985d0a26eSJack F Vogel { 75085d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.read_buffer, 75185d0a26eSJack F Vogel (hw, offset, words, data), 75285d0a26eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 75385d0a26eSJack F Vogel } 75485d0a26eSJack F Vogel 75585d0a26eSJack F Vogel /** 75613705f88SJack F Vogel * ixgbe_validate_eeprom_checksum - Validate EEPROM checksum 75713705f88SJack F Vogel * @hw: pointer to hardware structure 75813705f88SJack F Vogel * @checksum_val: calculated checksum 75913705f88SJack F Vogel * 76013705f88SJack F Vogel * Performs checksum calculation and validates the EEPROM checksum 76113705f88SJack F Vogel **/ 76213705f88SJack F Vogel s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val) 76313705f88SJack F Vogel { 7649ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum, 76513705f88SJack F Vogel (hw, checksum_val), IXGBE_NOT_IMPLEMENTED); 76613705f88SJack F Vogel } 76713705f88SJack F Vogel 76813705f88SJack F Vogel /** 76913705f88SJack F Vogel * ixgbe_eeprom_update_checksum - Updates the EEPROM checksum 77013705f88SJack F Vogel * @hw: pointer to hardware structure 77113705f88SJack F Vogel **/ 77213705f88SJack F Vogel s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw) 77313705f88SJack F Vogel { 7749ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw), 77513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 77613705f88SJack F Vogel } 77713705f88SJack F Vogel 77813705f88SJack F Vogel /** 7790ac6dfecSJack F Vogel * ixgbe_insert_mac_addr - Find a RAR for this mac address 7800ac6dfecSJack F Vogel * @hw: pointer to hardware structure 7810ac6dfecSJack F Vogel * @addr: Address to put into receive address register 7820ac6dfecSJack F Vogel * @vmdq: VMDq pool to assign 7830ac6dfecSJack F Vogel * 7840ac6dfecSJack F Vogel * Puts an ethernet address into a receive address register, or 7850ac6dfecSJack F Vogel * finds the rar that it is aleady in; adds to the pool list 7860ac6dfecSJack F Vogel **/ 7870ac6dfecSJack F Vogel s32 ixgbe_insert_mac_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq) 7880ac6dfecSJack F Vogel { 7890ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.insert_mac_addr, 7900ac6dfecSJack F Vogel (hw, addr, vmdq), 7910ac6dfecSJack F Vogel IXGBE_NOT_IMPLEMENTED); 7920ac6dfecSJack F Vogel } 7930ac6dfecSJack F Vogel 7940ac6dfecSJack F Vogel /** 7959ca4041bSJack F Vogel * ixgbe_set_rar - Set Rx address register 79613705f88SJack F Vogel * @hw: pointer to hardware structure 79713705f88SJack F Vogel * @index: Receive address register to write 7989ca4041bSJack F Vogel * @addr: Address to put into receive address register 7999ca4041bSJack F Vogel * @vmdq: VMDq "set" 80013705f88SJack F Vogel * @enable_addr: set flag that address is active 80113705f88SJack F Vogel * 80213705f88SJack F Vogel * Puts an ethernet address into a receive address register. 80313705f88SJack F Vogel **/ 8049ca4041bSJack F Vogel s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq, 80513705f88SJack F Vogel u32 enable_addr) 80613705f88SJack F Vogel { 8079ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq, 80813705f88SJack F Vogel enable_addr), IXGBE_NOT_IMPLEMENTED); 80913705f88SJack F Vogel } 81013705f88SJack F Vogel 81113705f88SJack F Vogel /** 8125b7f4cedSJack F Vogel * ixgbe_clear_rar - Clear Rx address register 8135b7f4cedSJack F Vogel * @hw: pointer to hardware structure 8145b7f4cedSJack F Vogel * @index: Receive address register to write 8155b7f4cedSJack F Vogel * 8165b7f4cedSJack F Vogel * Puts an ethernet address into a receive address register. 8175b7f4cedSJack F Vogel **/ 8185b7f4cedSJack F Vogel s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index) 8195b7f4cedSJack F Vogel { 8205b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index), 8215b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 8225b7f4cedSJack F Vogel } 8235b7f4cedSJack F Vogel 8245b7f4cedSJack F Vogel /** 8259ca4041bSJack F Vogel * ixgbe_set_vmdq - Associate a VMDq index with a receive address 8269ca4041bSJack F Vogel * @hw: pointer to hardware structure 8279ca4041bSJack F Vogel * @rar: receive address register index to associate with VMDq index 8289ca4041bSJack F Vogel * @vmdq: VMDq set or pool index 8299ca4041bSJack F Vogel **/ 8309ca4041bSJack F Vogel s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 8319ca4041bSJack F Vogel { 8329ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq), 8339ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 834a621e3c8SJack F Vogel 835a621e3c8SJack F Vogel } 836a621e3c8SJack F Vogel 837a621e3c8SJack F Vogel /** 838a621e3c8SJack F Vogel * ixgbe_set_vmdq_san_mac - Associate VMDq index 127 with a receive address 839a621e3c8SJack F Vogel * @hw: pointer to hardware structure 840a621e3c8SJack F Vogel * @vmdq: VMDq default pool index 841a621e3c8SJack F Vogel **/ 842a621e3c8SJack F Vogel s32 ixgbe_set_vmdq_san_mac(struct ixgbe_hw *hw, u32 vmdq) 843a621e3c8SJack F Vogel { 844a621e3c8SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vmdq_san_mac, 845a621e3c8SJack F Vogel (hw, vmdq), IXGBE_NOT_IMPLEMENTED); 8469ca4041bSJack F Vogel } 8479ca4041bSJack F Vogel 8489ca4041bSJack F Vogel /** 8495b7f4cedSJack F Vogel * ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address 8505b7f4cedSJack F Vogel * @hw: pointer to hardware structure 8515b7f4cedSJack F Vogel * @rar: receive address register index to disassociate with VMDq index 8525b7f4cedSJack F Vogel * @vmdq: VMDq set or pool index 8535b7f4cedSJack F Vogel **/ 8545b7f4cedSJack F Vogel s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 8555b7f4cedSJack F Vogel { 8565b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq), 8575b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 8585b7f4cedSJack F Vogel } 8595b7f4cedSJack F Vogel 8605b7f4cedSJack F Vogel /** 86113705f88SJack F Vogel * ixgbe_init_rx_addrs - Initializes receive address filters. 86213705f88SJack F Vogel * @hw: pointer to hardware structure 86313705f88SJack F Vogel * 86413705f88SJack F Vogel * Places the MAC address in receive address register 0 and clears the rest 8659ca4041bSJack F Vogel * of the receive address registers. Clears the multicast table. Assumes 86613705f88SJack F Vogel * the receiver is in reset when the routine is called. 86713705f88SJack F Vogel **/ 86813705f88SJack F Vogel s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw) 86913705f88SJack F Vogel { 8709ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw), 87113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 87213705f88SJack F Vogel } 87313705f88SJack F Vogel 87413705f88SJack F Vogel /** 87513705f88SJack F Vogel * ixgbe_get_num_rx_addrs - Returns the number of RAR entries. 87613705f88SJack F Vogel * @hw: pointer to hardware structure 87713705f88SJack F Vogel **/ 87813705f88SJack F Vogel u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw) 87913705f88SJack F Vogel { 8809ca4041bSJack F Vogel return hw->mac.num_rar_entries; 8819ca4041bSJack F Vogel } 8829ca4041bSJack F Vogel 8839ca4041bSJack F Vogel /** 8849ca4041bSJack F Vogel * ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses 8859ca4041bSJack F Vogel * @hw: pointer to hardware structure 8869ca4041bSJack F Vogel * @addr_list: the list of new multicast addresses 8879ca4041bSJack F Vogel * @addr_count: number of addresses 8889ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 8899ca4041bSJack F Vogel * 8909ca4041bSJack F Vogel * The given list replaces any existing list. Clears the secondary addrs from 8919ca4041bSJack F Vogel * receive address registers. Uses unused receive address registers for the 8929ca4041bSJack F Vogel * first secondary addresses, and falls back to promiscuous mode as needed. 8939ca4041bSJack F Vogel **/ 8949ca4041bSJack F Vogel s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list, 8959ca4041bSJack F Vogel u32 addr_count, ixgbe_mc_addr_itr func) 8969ca4041bSJack F Vogel { 8979ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw, 8989ca4041bSJack F Vogel addr_list, addr_count, func), 8999ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 90013705f88SJack F Vogel } 90113705f88SJack F Vogel 90213705f88SJack F Vogel /** 90313705f88SJack F Vogel * ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses 90413705f88SJack F Vogel * @hw: pointer to hardware structure 90513705f88SJack F Vogel * @mc_addr_list: the list of new multicast addresses 90613705f88SJack F Vogel * @mc_addr_count: number of addresses 9079ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 90813705f88SJack F Vogel * 90913705f88SJack F Vogel * The given list replaces any existing list. Clears the MC addrs from receive 9109ca4041bSJack F Vogel * address registers and the multicast table. Uses unused receive address 91113705f88SJack F Vogel * registers for the first multicast addresses, and hashes the rest into the 91213705f88SJack F Vogel * multicast table. 91313705f88SJack F Vogel **/ 91413705f88SJack F Vogel s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list, 91585d0a26eSJack F Vogel u32 mc_addr_count, ixgbe_mc_addr_itr func, 91685d0a26eSJack F Vogel bool clear) 91713705f88SJack F Vogel { 9189ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw, 91985d0a26eSJack F Vogel mc_addr_list, mc_addr_count, func, clear), 92013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 92113705f88SJack F Vogel } 92213705f88SJack F Vogel 92313705f88SJack F Vogel /** 92413705f88SJack F Vogel * ixgbe_enable_mc - Enable multicast address in RAR 92513705f88SJack F Vogel * @hw: pointer to hardware structure 92613705f88SJack F Vogel * 92713705f88SJack F Vogel * Enables multicast address in RAR and the use of the multicast hash table. 92813705f88SJack F Vogel **/ 92913705f88SJack F Vogel s32 ixgbe_enable_mc(struct ixgbe_hw *hw) 93013705f88SJack F Vogel { 9319ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw), 93213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 93313705f88SJack F Vogel } 93413705f88SJack F Vogel 93513705f88SJack F Vogel /** 93613705f88SJack F Vogel * ixgbe_disable_mc - Disable multicast address in RAR 93713705f88SJack F Vogel * @hw: pointer to hardware structure 93813705f88SJack F Vogel * 93913705f88SJack F Vogel * Disables multicast address in RAR and the use of the multicast hash table. 94013705f88SJack F Vogel **/ 94113705f88SJack F Vogel s32 ixgbe_disable_mc(struct ixgbe_hw *hw) 94213705f88SJack F Vogel { 9439ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw), 94413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 94513705f88SJack F Vogel } 94613705f88SJack F Vogel 94713705f88SJack F Vogel /** 94813705f88SJack F Vogel * ixgbe_clear_vfta - Clear VLAN filter table 94913705f88SJack F Vogel * @hw: pointer to hardware structure 95013705f88SJack F Vogel * 95113705f88SJack F Vogel * Clears the VLAN filer table, and the VMDq index associated with the filter 95213705f88SJack F Vogel **/ 95313705f88SJack F Vogel s32 ixgbe_clear_vfta(struct ixgbe_hw *hw) 95413705f88SJack F Vogel { 9559ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw), 95613705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 95713705f88SJack F Vogel } 95813705f88SJack F Vogel 95913705f88SJack F Vogel /** 96013705f88SJack F Vogel * ixgbe_set_vfta - Set VLAN filter table 96113705f88SJack F Vogel * @hw: pointer to hardware structure 96213705f88SJack F Vogel * @vlan: VLAN id to write to VLAN filter 96313705f88SJack F Vogel * @vind: VMDq output index that maps queue to VLAN id in VFTA 96413705f88SJack F Vogel * @vlan_on: boolean flag to turn on/off VLAN in VFTA 96513705f88SJack F Vogel * 96613705f88SJack F Vogel * Turn on/off specified VLAN in the VLAN filter table. 96713705f88SJack F Vogel **/ 96813705f88SJack F Vogel s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on) 96913705f88SJack F Vogel { 9709ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind, 97113705f88SJack F Vogel vlan_on), IXGBE_NOT_IMPLEMENTED); 97213705f88SJack F Vogel } 97313705f88SJack F Vogel 97413705f88SJack F Vogel /** 97585d0a26eSJack F Vogel * ixgbe_set_vlvf - Set VLAN Pool Filter 97685d0a26eSJack F Vogel * @hw: pointer to hardware structure 97785d0a26eSJack F Vogel * @vlan: VLAN id to write to VLAN filter 97885d0a26eSJack F Vogel * @vind: VMDq output index that maps queue to VLAN id in VFVFB 97985d0a26eSJack F Vogel * @vlan_on: boolean flag to turn on/off VLAN in VFVF 98085d0a26eSJack F Vogel * @vfta_changed: pointer to boolean flag which indicates whether VFTA 98185d0a26eSJack F Vogel * should be changed 98285d0a26eSJack F Vogel * 98385d0a26eSJack F Vogel * Turn on/off specified bit in VLVF table. 98485d0a26eSJack F Vogel **/ 98585d0a26eSJack F Vogel s32 ixgbe_set_vlvf(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on, 98685d0a26eSJack F Vogel bool *vfta_changed) 98785d0a26eSJack F Vogel { 98885d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vlvf, (hw, vlan, vind, 98985d0a26eSJack F Vogel vlan_on, vfta_changed), IXGBE_NOT_IMPLEMENTED); 99085d0a26eSJack F Vogel } 99185d0a26eSJack F Vogel 99285d0a26eSJack F Vogel /** 9930ac6dfecSJack F Vogel * ixgbe_fc_enable - Enable flow control 99413705f88SJack F Vogel * @hw: pointer to hardware structure 99513705f88SJack F Vogel * 99613705f88SJack F Vogel * Configures the flow control settings based on SW configuration. 99713705f88SJack F Vogel **/ 998a621e3c8SJack F Vogel s32 ixgbe_fc_enable(struct ixgbe_hw *hw) 99913705f88SJack F Vogel { 1000a621e3c8SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.fc_enable, (hw), 100113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 100213705f88SJack F Vogel } 100313705f88SJack F Vogel 10043ec35e52SJack F Vogel /** 100585d0a26eSJack F Vogel * ixgbe_set_fw_drv_ver - Try to send the driver version number FW 100685d0a26eSJack F Vogel * @hw: pointer to hardware structure 100785d0a26eSJack F Vogel * @maj: driver major number to be sent to firmware 100885d0a26eSJack F Vogel * @min: driver minor number to be sent to firmware 100985d0a26eSJack F Vogel * @build: driver build number to be sent to firmware 101085d0a26eSJack F Vogel * @ver: driver version number to be sent to firmware 101185d0a26eSJack F Vogel **/ 101285d0a26eSJack F Vogel s32 ixgbe_set_fw_drv_ver(struct ixgbe_hw *hw, u8 maj, u8 min, u8 build, 101385d0a26eSJack F Vogel u8 ver) 101485d0a26eSJack F Vogel { 101585d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_fw_drv_ver, (hw, maj, min, 101685d0a26eSJack F Vogel build, ver), IXGBE_NOT_IMPLEMENTED); 101785d0a26eSJack F Vogel } 101885d0a26eSJack F Vogel 101985d0a26eSJack F Vogel 1020fd75b91dSJack F Vogel 1021fd75b91dSJack F Vogel 102285d0a26eSJack F Vogel /** 10233ec35e52SJack F Vogel * ixgbe_read_analog_reg8 - Reads 8 bit analog register 10243ec35e52SJack F Vogel * @hw: pointer to hardware structure 10253ec35e52SJack F Vogel * @reg: analog register to read 10263ec35e52SJack F Vogel * @val: read value 10273ec35e52SJack F Vogel * 10283ec35e52SJack F Vogel * Performs write operation to analog register specified. 10293ec35e52SJack F Vogel **/ 10303ec35e52SJack F Vogel s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val) 10313ec35e52SJack F Vogel { 10329ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg, 10339ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 10343ec35e52SJack F Vogel } 10353ec35e52SJack F Vogel 10363ec35e52SJack F Vogel /** 10373ec35e52SJack F Vogel * ixgbe_write_analog_reg8 - Writes 8 bit analog register 10383ec35e52SJack F Vogel * @hw: pointer to hardware structure 10393ec35e52SJack F Vogel * @reg: analog register to write 10403ec35e52SJack F Vogel * @val: value to write 10413ec35e52SJack F Vogel * 10423ec35e52SJack F Vogel * Performs write operation to Atlas analog register specified. 10433ec35e52SJack F Vogel **/ 10443ec35e52SJack F Vogel s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val) 10453ec35e52SJack F Vogel { 10469ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg, 10479ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 10483ec35e52SJack F Vogel } 10493ec35e52SJack F Vogel 10505b7f4cedSJack F Vogel /** 10515b7f4cedSJack F Vogel * ixgbe_init_uta_tables - Initializes Unicast Table Arrays. 10525b7f4cedSJack F Vogel * @hw: pointer to hardware structure 10535b7f4cedSJack F Vogel * 10545b7f4cedSJack F Vogel * Initializes the Unicast Table Arrays to zero on device load. This 10555b7f4cedSJack F Vogel * is part of the Rx init addr execution path. 10565b7f4cedSJack F Vogel **/ 10575b7f4cedSJack F Vogel s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw) 10585b7f4cedSJack F Vogel { 10595b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw), 10605b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 10615b7f4cedSJack F Vogel } 10621b6e0dbaSJack F Vogel 10631b6e0dbaSJack F Vogel /** 10640ac6dfecSJack F Vogel * ixgbe_read_i2c_byte - Reads 8 bit word over I2C at specified device address 10650ac6dfecSJack F Vogel * @hw: pointer to hardware structure 10660ac6dfecSJack F Vogel * @byte_offset: byte offset to read 10670ac6dfecSJack F Vogel * @data: value read 10680ac6dfecSJack F Vogel * 10690ac6dfecSJack F Vogel * Performs byte read operation to SFP module's EEPROM over I2C interface. 10700ac6dfecSJack F Vogel **/ 10710ac6dfecSJack F Vogel s32 ixgbe_read_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, 10720ac6dfecSJack F Vogel u8 *data) 10730ac6dfecSJack F Vogel { 10740ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte, (hw, byte_offset, 10750ac6dfecSJack F Vogel dev_addr, data), IXGBE_NOT_IMPLEMENTED); 10760ac6dfecSJack F Vogel } 10770ac6dfecSJack F Vogel 10780ac6dfecSJack F Vogel /** 10790ac6dfecSJack F Vogel * ixgbe_write_i2c_byte - Writes 8 bit word over I2C 10800ac6dfecSJack F Vogel * @hw: pointer to hardware structure 10810ac6dfecSJack F Vogel * @byte_offset: byte offset to write 10820ac6dfecSJack F Vogel * @data: value to write 10830ac6dfecSJack F Vogel * 10840ac6dfecSJack F Vogel * Performs byte write operation to SFP module's EEPROM over I2C interface 10850ac6dfecSJack F Vogel * at a specified device address. 10860ac6dfecSJack F Vogel **/ 10870ac6dfecSJack F Vogel s32 ixgbe_write_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, 10880ac6dfecSJack F Vogel u8 data) 10890ac6dfecSJack F Vogel { 10900ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte, (hw, byte_offset, 10910ac6dfecSJack F Vogel dev_addr, data), IXGBE_NOT_IMPLEMENTED); 10920ac6dfecSJack F Vogel } 10930ac6dfecSJack F Vogel 10940ac6dfecSJack F Vogel /** 10950ac6dfecSJack F Vogel * ixgbe_write_i2c_eeprom - Writes 8 bit EEPROM word over I2C interface 10960ac6dfecSJack F Vogel * @hw: pointer to hardware structure 10970ac6dfecSJack F Vogel * @byte_offset: EEPROM byte offset to write 10980ac6dfecSJack F Vogel * @eeprom_data: value to write 10990ac6dfecSJack F Vogel * 11000ac6dfecSJack F Vogel * Performs byte write operation to SFP module's EEPROM over I2C interface. 11010ac6dfecSJack F Vogel **/ 11020ac6dfecSJack F Vogel s32 ixgbe_write_i2c_eeprom(struct ixgbe_hw *hw, 11030ac6dfecSJack F Vogel u8 byte_offset, u8 eeprom_data) 11040ac6dfecSJack F Vogel { 11050ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_i2c_eeprom, 11060ac6dfecSJack F Vogel (hw, byte_offset, eeprom_data), 11070ac6dfecSJack F Vogel IXGBE_NOT_IMPLEMENTED); 11080ac6dfecSJack F Vogel } 11090ac6dfecSJack F Vogel 11100ac6dfecSJack F Vogel /** 11111b6e0dbaSJack F Vogel * ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface 11121b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 11131b6e0dbaSJack F Vogel * @byte_offset: EEPROM byte offset to read 11141b6e0dbaSJack F Vogel * @eeprom_data: value read 11151b6e0dbaSJack F Vogel * 11161b6e0dbaSJack F Vogel * Performs byte read operation to SFP module's EEPROM over I2C interface. 11171b6e0dbaSJack F Vogel **/ 11181b6e0dbaSJack F Vogel s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data) 11191b6e0dbaSJack F Vogel { 11201b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom, 11211b6e0dbaSJack F Vogel (hw, byte_offset, eeprom_data), 11221b6e0dbaSJack F Vogel IXGBE_NOT_IMPLEMENTED); 11231b6e0dbaSJack F Vogel } 11241b6e0dbaSJack F Vogel 11251b6e0dbaSJack F Vogel /** 11261b6e0dbaSJack F Vogel * ixgbe_get_supported_physical_layer - Returns physical layer type 11271b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 11281b6e0dbaSJack F Vogel * 11291b6e0dbaSJack F Vogel * Determines physical layer capabilities of the current configuration. 11301b6e0dbaSJack F Vogel **/ 11311b6e0dbaSJack F Vogel u32 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw) 11321b6e0dbaSJack F Vogel { 11331b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer, 11341b6e0dbaSJack F Vogel (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN); 11351b6e0dbaSJack F Vogel } 11360ac6dfecSJack F Vogel 11370ac6dfecSJack F Vogel /** 1138a621e3c8SJack F Vogel * ixgbe_enable_rx_dma - Enables Rx DMA unit, dependent on device specifics 11390ac6dfecSJack F Vogel * @hw: pointer to hardware structure 11400ac6dfecSJack F Vogel * @regval: bitfield to write to the Rx DMA register 11410ac6dfecSJack F Vogel * 11420ac6dfecSJack F Vogel * Enables the Rx DMA unit of the device. 11430ac6dfecSJack F Vogel **/ 11440ac6dfecSJack F Vogel s32 ixgbe_enable_rx_dma(struct ixgbe_hw *hw, u32 regval) 11450ac6dfecSJack F Vogel { 11460ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_rx_dma, 11470ac6dfecSJack F Vogel (hw, regval), IXGBE_NOT_IMPLEMENTED); 11480ac6dfecSJack F Vogel } 1149d8602bb9SJack F Vogel 1150d8602bb9SJack F Vogel /** 115185d0a26eSJack F Vogel * ixgbe_disable_sec_rx_path - Stops the receive data path 115285d0a26eSJack F Vogel * @hw: pointer to hardware structure 115385d0a26eSJack F Vogel * 115485d0a26eSJack F Vogel * Stops the receive data path. 115585d0a26eSJack F Vogel **/ 115685d0a26eSJack F Vogel s32 ixgbe_disable_sec_rx_path(struct ixgbe_hw *hw) 115785d0a26eSJack F Vogel { 115885d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.disable_sec_rx_path, 115985d0a26eSJack F Vogel (hw), IXGBE_NOT_IMPLEMENTED); 116085d0a26eSJack F Vogel } 116185d0a26eSJack F Vogel 116285d0a26eSJack F Vogel /** 116385d0a26eSJack F Vogel * ixgbe_enable_sec_rx_path - Enables the receive data path 116485d0a26eSJack F Vogel * @hw: pointer to hardware structure 116585d0a26eSJack F Vogel * 116685d0a26eSJack F Vogel * Enables the receive data path. 116785d0a26eSJack F Vogel **/ 116885d0a26eSJack F Vogel s32 ixgbe_enable_sec_rx_path(struct ixgbe_hw *hw) 116985d0a26eSJack F Vogel { 117085d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_sec_rx_path, 117185d0a26eSJack F Vogel (hw), IXGBE_NOT_IMPLEMENTED); 117285d0a26eSJack F Vogel } 117385d0a26eSJack F Vogel 117485d0a26eSJack F Vogel /** 1175d8602bb9SJack F Vogel * ixgbe_acquire_swfw_semaphore - Acquire SWFW semaphore 1176d8602bb9SJack F Vogel * @hw: pointer to hardware structure 1177d8602bb9SJack F Vogel * @mask: Mask to specify which semaphore to acquire 1178d8602bb9SJack F Vogel * 1179d8602bb9SJack F Vogel * Acquires the SWFW semaphore through SW_FW_SYNC register for the specified 1180d8602bb9SJack F Vogel * function (CSR, PHY0, PHY1, EEPROM, Flash) 1181d8602bb9SJack F Vogel **/ 1182d8602bb9SJack F Vogel s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u16 mask) 1183d8602bb9SJack F Vogel { 1184d8602bb9SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.acquire_swfw_sync, 1185d8602bb9SJack F Vogel (hw, mask), IXGBE_NOT_IMPLEMENTED); 1186d8602bb9SJack F Vogel } 1187d8602bb9SJack F Vogel 1188d8602bb9SJack F Vogel /** 1189d8602bb9SJack F Vogel * ixgbe_release_swfw_semaphore - Release SWFW semaphore 1190d8602bb9SJack F Vogel * @hw: pointer to hardware structure 1191d8602bb9SJack F Vogel * @mask: Mask to specify which semaphore to release 1192d8602bb9SJack F Vogel * 1193d8602bb9SJack F Vogel * Releases the SWFW semaphore through SW_FW_SYNC register for the specified 1194d8602bb9SJack F Vogel * function (CSR, PHY0, PHY1, EEPROM, Flash) 1195d8602bb9SJack F Vogel **/ 1196d8602bb9SJack F Vogel void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u16 mask) 1197d8602bb9SJack F Vogel { 1198d8602bb9SJack F Vogel if (hw->mac.ops.release_swfw_sync) 1199d8602bb9SJack F Vogel hw->mac.ops.release_swfw_sync(hw, mask); 1200d8602bb9SJack F Vogel } 1201d8602bb9SJack F Vogel 1202