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 /** 3913705f88SJack F Vogel * ixgbe_init_shared_code - Initialize the shared code 4013705f88SJack F Vogel * @hw: pointer to hardware structure 4113705f88SJack F Vogel * 4213705f88SJack F Vogel * This will assign function pointers and assign the MAC type and PHY code. 4313705f88SJack F Vogel * Does not touch the hardware. This function must be called prior to any 4413705f88SJack F Vogel * other function in the shared code. The ixgbe_hw structure should be 4513705f88SJack F Vogel * memset to 0 prior to calling this function. The following fields in 4613705f88SJack F Vogel * hw structure should be filled in prior to calling this function: 4713705f88SJack F Vogel * hw_addr, back, device_id, vendor_id, subsystem_device_id, 4813705f88SJack F Vogel * subsystem_vendor_id, and revision_id 4913705f88SJack F Vogel **/ 5013705f88SJack F Vogel s32 ixgbe_init_shared_code(struct ixgbe_hw *hw) 5113705f88SJack F Vogel { 523ec35e52SJack F Vogel s32 status; 5313705f88SJack F Vogel 542969bf0eSJack F Vogel DEBUGFUNC("ixgbe_init_shared_code"); 552969bf0eSJack F Vogel 5613705f88SJack F Vogel /* 573ec35e52SJack F Vogel * Set the mac type 583ec35e52SJack F Vogel */ 593ec35e52SJack F Vogel ixgbe_set_mac_type(hw); 603ec35e52SJack F Vogel 613ec35e52SJack F Vogel switch (hw->mac.type) { 623ec35e52SJack F Vogel case ixgbe_mac_82598EB: 639ca4041bSJack F Vogel status = ixgbe_init_ops_82598(hw); 6413705f88SJack F Vogel break; 650ac6dfecSJack F Vogel case ixgbe_mac_82599EB: 660ac6dfecSJack F Vogel status = ixgbe_init_ops_82599(hw); 670ac6dfecSJack F Vogel break; 681a4e3449SJack F Vogel case ixgbe_mac_82599_vf: 6985d0a26eSJack F Vogel case ixgbe_mac_X540_vf: 701a4e3449SJack F Vogel status = ixgbe_init_ops_vf(hw); 711a4e3449SJack F Vogel break; 7285d0a26eSJack F Vogel case ixgbe_mac_X540: 7385d0a26eSJack F Vogel status = ixgbe_init_ops_X540(hw); 7485d0a26eSJack F Vogel break; 7513705f88SJack F Vogel default: 7613705f88SJack F Vogel status = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 7713705f88SJack F Vogel break; 7813705f88SJack F Vogel } 7913705f88SJack F Vogel 8013705f88SJack F Vogel return status; 8113705f88SJack F Vogel } 8213705f88SJack F Vogel 8313705f88SJack F Vogel /** 843ec35e52SJack F Vogel * ixgbe_set_mac_type - Sets MAC type 853ec35e52SJack F Vogel * @hw: pointer to the HW structure 863ec35e52SJack F Vogel * 873ec35e52SJack F Vogel * This function sets the mac type of the adapter based on the 883ec35e52SJack F Vogel * vendor ID and device ID stored in the hw structure. 893ec35e52SJack F Vogel **/ 903ec35e52SJack F Vogel s32 ixgbe_set_mac_type(struct ixgbe_hw *hw) 913ec35e52SJack F Vogel { 923ec35e52SJack F Vogel s32 ret_val = IXGBE_SUCCESS; 933ec35e52SJack F Vogel 949ca4041bSJack F Vogel DEBUGFUNC("ixgbe_set_mac_type\n"); 953ec35e52SJack F Vogel 963ec35e52SJack F Vogel switch (hw->device_id) { 971b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598: 980ac6dfecSJack F Vogel case IXGBE_DEV_ID_82598_BX: 993ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_SINGLE_PORT: 1003ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_DUAL_PORT: 1019ca4041bSJack F Vogel case IXGBE_DEV_ID_82598AT: 1022969bf0eSJack F Vogel case IXGBE_DEV_ID_82598AT2: 1033ec35e52SJack F Vogel case IXGBE_DEV_ID_82598EB_CX4: 1049ca4041bSJack F Vogel case IXGBE_DEV_ID_82598_CX4_DUAL_PORT: 1051b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_DA_DUAL_PORT: 1061b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM: 1079ca4041bSJack F Vogel case IXGBE_DEV_ID_82598EB_XF_LR: 1081b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598EB_SFP_LOM: 1093ec35e52SJack F Vogel hw->mac.type = ixgbe_mac_82598EB; 1103ec35e52SJack F Vogel break; 1110ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_KX4: 1122969bf0eSJack F Vogel case IXGBE_DEV_ID_82599_KX4_MEZZ: 113d8602bb9SJack F Vogel case IXGBE_DEV_ID_82599_XAUI_LOM: 1142969bf0eSJack F Vogel case IXGBE_DEV_ID_82599_COMBO_BACKPLANE: 11585d0a26eSJack F Vogel case IXGBE_DEV_ID_82599_KR: 1160ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_SFP: 1171a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_BACKPLANE_FCOE: 1181a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_SFP_FCOE: 11985d0a26eSJack F Vogel case IXGBE_DEV_ID_82599_SFP_EM: 120a621e3c8SJack F Vogel case IXGBE_DEV_ID_82599_SFP_SF2: 1210ecc2ff0SJack F Vogel case IXGBE_DEV_ID_82599_SFP_SF_QP: 12285d0a26eSJack F Vogel case IXGBE_DEV_ID_82599EN_SFP: 1230ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_CX4: 1240ecc2ff0SJack F Vogel case IXGBE_DEV_ID_82599_BYPASS: 125c0014855SJack F Vogel case IXGBE_DEV_ID_82599_T3_LOM: 1260ac6dfecSJack F Vogel hw->mac.type = ixgbe_mac_82599EB; 1270ac6dfecSJack F Vogel break; 1281a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_VF: 1290ecc2ff0SJack F Vogel case IXGBE_DEV_ID_82599_VF_HV: 1301a4e3449SJack F Vogel hw->mac.type = ixgbe_mac_82599_vf; 1311a4e3449SJack F Vogel break; 13285d0a26eSJack F Vogel case IXGBE_DEV_ID_X540_VF: 1330ecc2ff0SJack F Vogel case IXGBE_DEV_ID_X540_VF_HV: 13485d0a26eSJack F Vogel hw->mac.type = ixgbe_mac_X540_vf; 13585d0a26eSJack F Vogel break; 13685d0a26eSJack F Vogel case IXGBE_DEV_ID_X540T: 1370ecc2ff0SJack F Vogel case IXGBE_DEV_ID_X540_BYPASS: 13885d0a26eSJack F Vogel hw->mac.type = ixgbe_mac_X540; 13985d0a26eSJack F Vogel break; 1403ec35e52SJack F Vogel default: 1413ec35e52SJack F Vogel ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 1423ec35e52SJack F Vogel break; 1433ec35e52SJack F Vogel } 1443ec35e52SJack F Vogel 1459ca4041bSJack F Vogel DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n", 1469ca4041bSJack F Vogel hw->mac.type, ret_val); 1473ec35e52SJack F Vogel return ret_val; 1483ec35e52SJack F Vogel } 1493ec35e52SJack F Vogel 1503ec35e52SJack F Vogel /** 15113705f88SJack F Vogel * ixgbe_init_hw - Initialize the hardware 15213705f88SJack F Vogel * @hw: pointer to hardware structure 15313705f88SJack F Vogel * 15413705f88SJack F Vogel * Initialize the hardware by resetting and then starting the hardware 15513705f88SJack F Vogel **/ 15613705f88SJack F Vogel s32 ixgbe_init_hw(struct ixgbe_hw *hw) 15713705f88SJack F Vogel { 1589ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw), 15913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 16013705f88SJack F Vogel } 16113705f88SJack F Vogel 16213705f88SJack F Vogel /** 16313705f88SJack F Vogel * ixgbe_reset_hw - Performs a hardware reset 16413705f88SJack F Vogel * @hw: pointer to hardware structure 16513705f88SJack F Vogel * 16613705f88SJack F Vogel * Resets the hardware by resetting the transmit and receive units, masks and 16713705f88SJack F Vogel * clears all interrupts, performs a PHY reset, and performs a MAC reset 16813705f88SJack F Vogel **/ 16913705f88SJack F Vogel s32 ixgbe_reset_hw(struct ixgbe_hw *hw) 17013705f88SJack F Vogel { 1719ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw), 17213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 17313705f88SJack F Vogel } 17413705f88SJack F Vogel 17513705f88SJack F Vogel /** 1769ca4041bSJack F Vogel * ixgbe_start_hw - Prepares hardware for Rx/Tx 17713705f88SJack F Vogel * @hw: pointer to hardware structure 17813705f88SJack F Vogel * 17913705f88SJack F Vogel * Starts the hardware by filling the bus info structure and media type, 18013705f88SJack F Vogel * clears all on chip counters, initializes receive address registers, 18113705f88SJack F Vogel * multicast table, VLAN filter table, calls routine to setup link and 18213705f88SJack F Vogel * flow control settings, and leaves transmit and receive units disabled 18313705f88SJack F Vogel * and uninitialized. 18413705f88SJack F Vogel **/ 18513705f88SJack F Vogel s32 ixgbe_start_hw(struct ixgbe_hw *hw) 18613705f88SJack F Vogel { 1879ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw), 18813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 18913705f88SJack F Vogel } 19013705f88SJack F Vogel 19113705f88SJack F Vogel /** 192c0014855SJack F Vogel * ixgbe_enable_relaxed_ordering - Enables tx relaxed ordering, 193c0014855SJack F Vogel * which is disabled by default in ixgbe_start_hw(); 194c0014855SJack F Vogel * 195c0014855SJack F Vogel * @hw: pointer to hardware structure 196c0014855SJack F Vogel * 197c0014855SJack F Vogel * Enable relaxed ordering; 198c0014855SJack F Vogel **/ 199c0014855SJack F Vogel void ixgbe_enable_relaxed_ordering(struct ixgbe_hw *hw) 200c0014855SJack F Vogel { 201c0014855SJack F Vogel if (hw->mac.ops.enable_relaxed_ordering) 202c0014855SJack F Vogel hw->mac.ops.enable_relaxed_ordering(hw); 203c0014855SJack F Vogel } 204c0014855SJack F Vogel 205c0014855SJack F Vogel /** 20613705f88SJack F Vogel * ixgbe_clear_hw_cntrs - Clear hardware counters 20713705f88SJack F Vogel * @hw: pointer to hardware structure 20813705f88SJack F Vogel * 20913705f88SJack F Vogel * Clears all hardware statistics counters by reading them from the hardware 21013705f88SJack F Vogel * Statistics counters are clear on read. 21113705f88SJack F Vogel **/ 21213705f88SJack F Vogel s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw) 21313705f88SJack F Vogel { 2149ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw), 21513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 21613705f88SJack F Vogel } 21713705f88SJack F Vogel 21813705f88SJack F Vogel /** 21913705f88SJack F Vogel * ixgbe_get_media_type - Get media type 22013705f88SJack F Vogel * @hw: pointer to hardware structure 22113705f88SJack F Vogel * 22213705f88SJack F Vogel * Returns the media type (fiber, copper, backplane) 22313705f88SJack F Vogel **/ 22413705f88SJack F Vogel enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw) 22513705f88SJack F Vogel { 2269ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw), 22713705f88SJack F Vogel ixgbe_media_type_unknown); 22813705f88SJack F Vogel } 22913705f88SJack F Vogel 23013705f88SJack F Vogel /** 23113705f88SJack F Vogel * ixgbe_get_mac_addr - Get MAC address 23213705f88SJack F Vogel * @hw: pointer to hardware structure 23313705f88SJack F Vogel * @mac_addr: Adapter MAC address 23413705f88SJack F Vogel * 23513705f88SJack F Vogel * Reads the adapter's MAC address from the first Receive Address Register 2369ca4041bSJack F Vogel * (RAR0) A reset of the adapter must have been performed prior to calling 2379ca4041bSJack F Vogel * this function in order for the MAC address to have been loaded from the 2389ca4041bSJack F Vogel * EEPROM into RAR0 23913705f88SJack F Vogel **/ 24013705f88SJack F Vogel s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr) 24113705f88SJack F Vogel { 2429ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr, 24313705f88SJack F Vogel (hw, mac_addr), IXGBE_NOT_IMPLEMENTED); 24413705f88SJack F Vogel } 24513705f88SJack F Vogel 24613705f88SJack F Vogel /** 2470ac6dfecSJack F Vogel * ixgbe_get_san_mac_addr - Get SAN MAC address 2480ac6dfecSJack F Vogel * @hw: pointer to hardware structure 2490ac6dfecSJack F Vogel * @san_mac_addr: SAN MAC address 2500ac6dfecSJack F Vogel * 2510ac6dfecSJack F Vogel * Reads the SAN MAC address from the EEPROM, if it's available. This is 2520ac6dfecSJack F Vogel * per-port, so set_lan_id() must be called before reading the addresses. 2530ac6dfecSJack F Vogel **/ 2540ac6dfecSJack F Vogel s32 ixgbe_get_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr) 2550ac6dfecSJack F Vogel { 2560ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_san_mac_addr, 2570ac6dfecSJack F Vogel (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED); 2580ac6dfecSJack F Vogel } 2590ac6dfecSJack F Vogel 2600ac6dfecSJack F Vogel /** 2610ac6dfecSJack F Vogel * ixgbe_set_san_mac_addr - Write a SAN MAC address 2620ac6dfecSJack F Vogel * @hw: pointer to hardware structure 2630ac6dfecSJack F Vogel * @san_mac_addr: SAN MAC address 2640ac6dfecSJack F Vogel * 2650ac6dfecSJack F Vogel * Writes A SAN MAC address to the EEPROM. 2660ac6dfecSJack F Vogel **/ 2670ac6dfecSJack F Vogel s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr) 2680ac6dfecSJack F Vogel { 2690ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_san_mac_addr, 2700ac6dfecSJack F Vogel (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED); 2710ac6dfecSJack F Vogel } 2720ac6dfecSJack F Vogel 2730ac6dfecSJack F Vogel /** 2740ac6dfecSJack F Vogel * ixgbe_get_device_caps - Get additional device capabilities 2750ac6dfecSJack F Vogel * @hw: pointer to hardware structure 2760ac6dfecSJack F Vogel * @device_caps: the EEPROM word for device capabilities 2770ac6dfecSJack F Vogel * 2780ac6dfecSJack F Vogel * Reads the extra device capabilities from the EEPROM 2790ac6dfecSJack F Vogel **/ 2800ac6dfecSJack F Vogel s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps) 2810ac6dfecSJack F Vogel { 2820ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_device_caps, 2830ac6dfecSJack F Vogel (hw, device_caps), IXGBE_NOT_IMPLEMENTED); 2840ac6dfecSJack F Vogel } 2850ac6dfecSJack F Vogel 2860ac6dfecSJack F Vogel /** 2872969bf0eSJack F Vogel * ixgbe_get_wwn_prefix - Get alternative WWNN/WWPN prefix from the EEPROM 2882969bf0eSJack F Vogel * @hw: pointer to hardware structure 2892969bf0eSJack F Vogel * @wwnn_prefix: the alternative WWNN prefix 2902969bf0eSJack F Vogel * @wwpn_prefix: the alternative WWPN prefix 2912969bf0eSJack F Vogel * 2922969bf0eSJack F Vogel * This function will read the EEPROM from the alternative SAN MAC address 2932969bf0eSJack F Vogel * block to check the support for the alternative WWNN/WWPN prefix support. 2942969bf0eSJack F Vogel **/ 2952969bf0eSJack F Vogel s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix, 2962969bf0eSJack F Vogel u16 *wwpn_prefix) 2972969bf0eSJack F Vogel { 2982969bf0eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_wwn_prefix, 2992969bf0eSJack F Vogel (hw, wwnn_prefix, wwpn_prefix), 3002969bf0eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 3012969bf0eSJack F Vogel } 3022969bf0eSJack F Vogel 3032969bf0eSJack F Vogel /** 3041a4e3449SJack F Vogel * ixgbe_get_fcoe_boot_status - Get FCOE boot status from EEPROM 3051a4e3449SJack F Vogel * @hw: pointer to hardware structure 3061a4e3449SJack F Vogel * @bs: the fcoe boot status 3071a4e3449SJack F Vogel * 3081a4e3449SJack F Vogel * This function will read the FCOE boot status from the iSCSI FCOE block 3091a4e3449SJack F Vogel **/ 3101a4e3449SJack F Vogel s32 ixgbe_get_fcoe_boot_status(struct ixgbe_hw *hw, u16 *bs) 3111a4e3449SJack F Vogel { 3121a4e3449SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_fcoe_boot_status, 3131a4e3449SJack F Vogel (hw, bs), 3141a4e3449SJack F Vogel IXGBE_NOT_IMPLEMENTED); 3151a4e3449SJack F Vogel } 3161a4e3449SJack F Vogel 3171a4e3449SJack F Vogel /** 31813705f88SJack F Vogel * ixgbe_get_bus_info - Set PCI bus info 31913705f88SJack F Vogel * @hw: pointer to hardware structure 32013705f88SJack F Vogel * 32113705f88SJack F Vogel * Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure 32213705f88SJack F Vogel **/ 32313705f88SJack F Vogel s32 ixgbe_get_bus_info(struct ixgbe_hw *hw) 32413705f88SJack F Vogel { 3259ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw), 32613705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 32713705f88SJack F Vogel } 32813705f88SJack F Vogel 32913705f88SJack F Vogel /** 3309ca4041bSJack F Vogel * ixgbe_get_num_of_tx_queues - Get Tx queues 33113705f88SJack F Vogel * @hw: pointer to hardware structure 33213705f88SJack F Vogel * 33313705f88SJack F Vogel * Returns the number of transmit queues for the given adapter. 33413705f88SJack F Vogel **/ 33513705f88SJack F Vogel u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw) 33613705f88SJack F Vogel { 3379ca4041bSJack F Vogel return hw->mac.max_tx_queues; 33813705f88SJack F Vogel } 33913705f88SJack F Vogel 34013705f88SJack F Vogel /** 3419ca4041bSJack F Vogel * ixgbe_get_num_of_rx_queues - Get Rx queues 34213705f88SJack F Vogel * @hw: pointer to hardware structure 34313705f88SJack F Vogel * 34413705f88SJack F Vogel * Returns the number of receive queues for the given adapter. 34513705f88SJack F Vogel **/ 34613705f88SJack F Vogel u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw) 34713705f88SJack F Vogel { 3489ca4041bSJack F Vogel return hw->mac.max_rx_queues; 34913705f88SJack F Vogel } 35013705f88SJack F Vogel 35113705f88SJack F Vogel /** 3529ca4041bSJack F Vogel * ixgbe_stop_adapter - Disable Rx/Tx units 35313705f88SJack F Vogel * @hw: pointer to hardware structure 35413705f88SJack F Vogel * 35513705f88SJack F Vogel * Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts, 35613705f88SJack F Vogel * disables transmit and receive units. The adapter_stopped flag is used by 35713705f88SJack F Vogel * the shared code and drivers to determine if the adapter is in a stopped 35813705f88SJack F Vogel * state and should not touch the hardware. 35913705f88SJack F Vogel **/ 36013705f88SJack F Vogel s32 ixgbe_stop_adapter(struct ixgbe_hw *hw) 36113705f88SJack F Vogel { 3629ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw), 36313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 36413705f88SJack F Vogel } 36513705f88SJack F Vogel 36613705f88SJack F Vogel /** 3671a4e3449SJack F Vogel * ixgbe_read_pba_string - Reads part number string from EEPROM 3681a4e3449SJack F Vogel * @hw: pointer to hardware structure 3691a4e3449SJack F Vogel * @pba_num: stores the part number string from the EEPROM 3701a4e3449SJack F Vogel * @pba_num_size: part number string buffer length 3711a4e3449SJack F Vogel * 3721a4e3449SJack F Vogel * Reads the part number string from the EEPROM. 3731a4e3449SJack F Vogel **/ 3741a4e3449SJack F Vogel s32 ixgbe_read_pba_string(struct ixgbe_hw *hw, u8 *pba_num, u32 pba_num_size) 3751a4e3449SJack F Vogel { 3761a4e3449SJack F Vogel return ixgbe_read_pba_string_generic(hw, pba_num, pba_num_size); 3771a4e3449SJack F Vogel } 3781a4e3449SJack F Vogel 3791a4e3449SJack F Vogel /** 3809ca4041bSJack F Vogel * ixgbe_read_pba_num - Reads part number from EEPROM 3819ca4041bSJack F Vogel * @hw: pointer to hardware structure 3829ca4041bSJack F Vogel * @pba_num: stores the part number from the EEPROM 3839ca4041bSJack F Vogel * 3849ca4041bSJack F Vogel * Reads the part number from the EEPROM. 3859ca4041bSJack F Vogel **/ 3869ca4041bSJack F Vogel s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num) 3879ca4041bSJack F Vogel { 3889ca4041bSJack F Vogel return ixgbe_read_pba_num_generic(hw, pba_num); 3899ca4041bSJack F Vogel } 3909ca4041bSJack F Vogel 3919ca4041bSJack F Vogel /** 39213705f88SJack F Vogel * ixgbe_identify_phy - Get PHY type 39313705f88SJack F Vogel * @hw: pointer to hardware structure 39413705f88SJack F Vogel * 39513705f88SJack F Vogel * Determines the physical layer module found on the current adapter. 39613705f88SJack F Vogel **/ 39713705f88SJack F Vogel s32 ixgbe_identify_phy(struct ixgbe_hw *hw) 39813705f88SJack F Vogel { 39913705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 40013705f88SJack F Vogel 40113705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 4021a4e3449SJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.identify, (hw), 40313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 40413705f88SJack F Vogel } 40513705f88SJack F Vogel 40613705f88SJack F Vogel return status; 40713705f88SJack F Vogel } 40813705f88SJack F Vogel 40913705f88SJack F Vogel /** 41013705f88SJack F Vogel * ixgbe_reset_phy - Perform a PHY reset 41113705f88SJack F Vogel * @hw: pointer to hardware structure 41213705f88SJack F Vogel **/ 41313705f88SJack F Vogel s32 ixgbe_reset_phy(struct ixgbe_hw *hw) 41413705f88SJack F Vogel { 41513705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 41613705f88SJack F Vogel 41713705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 4181b6e0dbaSJack F Vogel if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS) 41913705f88SJack F Vogel status = IXGBE_ERR_PHY; 42013705f88SJack F Vogel } 42113705f88SJack F Vogel 42213705f88SJack F Vogel if (status == IXGBE_SUCCESS) { 4239ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw), 42413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 42513705f88SJack F Vogel } 42613705f88SJack F Vogel return status; 42713705f88SJack F Vogel } 42813705f88SJack F Vogel 42913705f88SJack F Vogel /** 4309ca4041bSJack F Vogel * ixgbe_get_phy_firmware_version - 4319ca4041bSJack F Vogel * @hw: pointer to hardware structure 4329ca4041bSJack F Vogel * @firmware_version: pointer to firmware version 4339ca4041bSJack F Vogel **/ 4349ca4041bSJack F Vogel s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version) 4359ca4041bSJack F Vogel { 4369ca4041bSJack F Vogel s32 status = IXGBE_SUCCESS; 4379ca4041bSJack F Vogel 4389ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version, 4399ca4041bSJack F Vogel (hw, firmware_version), 4409ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 4419ca4041bSJack F Vogel return status; 4429ca4041bSJack F Vogel } 4439ca4041bSJack F Vogel 4449ca4041bSJack F Vogel /** 44513705f88SJack F Vogel * ixgbe_read_phy_reg - Read PHY register 44613705f88SJack F Vogel * @hw: pointer to hardware structure 44713705f88SJack F Vogel * @reg_addr: 32 bit address of PHY register to read 44813705f88SJack F Vogel * @phy_data: Pointer to read data from PHY register 44913705f88SJack F Vogel * 45013705f88SJack F Vogel * Reads a value from a specified PHY register 45113705f88SJack F Vogel **/ 45213705f88SJack F Vogel s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 45313705f88SJack F Vogel u16 *phy_data) 45413705f88SJack F Vogel { 4550ac6dfecSJack F Vogel if (hw->phy.id == 0) 4560ac6dfecSJack F Vogel ixgbe_identify_phy(hw); 4570ac6dfecSJack F Vogel 4589ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr, 4599ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 46013705f88SJack F Vogel } 46113705f88SJack F Vogel 46213705f88SJack F Vogel /** 46313705f88SJack F Vogel * ixgbe_write_phy_reg - Write PHY register 46413705f88SJack F Vogel * @hw: pointer to hardware structure 46513705f88SJack F Vogel * @reg_addr: 32 bit PHY register to write 46613705f88SJack F Vogel * @phy_data: Data to write to the PHY register 46713705f88SJack F Vogel * 46813705f88SJack F Vogel * Writes a value to specified PHY register 46913705f88SJack F Vogel **/ 47013705f88SJack F Vogel s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 47113705f88SJack F Vogel u16 phy_data) 47213705f88SJack F Vogel { 4730ac6dfecSJack F Vogel if (hw->phy.id == 0) 4740ac6dfecSJack F Vogel ixgbe_identify_phy(hw); 4750ac6dfecSJack F Vogel 4769ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr, 4779ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 47813705f88SJack F Vogel } 47913705f88SJack F Vogel 4809ca4041bSJack F Vogel /** 4819ca4041bSJack F Vogel * ixgbe_setup_phy_link - Restart PHY autoneg 4829ca4041bSJack F Vogel * @hw: pointer to hardware structure 4839ca4041bSJack F Vogel * 4849ca4041bSJack F Vogel * Restart autonegotiation and PHY and waits for completion. 4859ca4041bSJack F Vogel **/ 4869ca4041bSJack F Vogel s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw) 4879ca4041bSJack F Vogel { 4889ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw), 48913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 49013705f88SJack F Vogel } 4919ca4041bSJack F Vogel 4929ca4041bSJack F Vogel /** 4939ca4041bSJack F Vogel * ixgbe_check_phy_link - Determine link and speed status 4949ca4041bSJack F Vogel * @hw: pointer to hardware structure 4959ca4041bSJack F Vogel * 4969ca4041bSJack F Vogel * Reads a PHY register to determine if link is up and the current speed for 4979ca4041bSJack F Vogel * the PHY. 4989ca4041bSJack F Vogel **/ 4999ca4041bSJack F Vogel s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 5009ca4041bSJack F Vogel bool *link_up) 5019ca4041bSJack F Vogel { 5029ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed, 5039ca4041bSJack F Vogel link_up), IXGBE_NOT_IMPLEMENTED); 5049ca4041bSJack F Vogel } 5059ca4041bSJack F Vogel 5069ca4041bSJack F Vogel /** 5079ca4041bSJack F Vogel * ixgbe_setup_phy_link_speed - Set auto advertise 5089ca4041bSJack F Vogel * @hw: pointer to hardware structure 5099ca4041bSJack F Vogel * @speed: new link speed 5109ca4041bSJack F Vogel * 5119ca4041bSJack F Vogel * Sets the auto advertised capabilities 5129ca4041bSJack F Vogel **/ 5139ca4041bSJack F Vogel s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed, 5149ca4041bSJack F Vogel bool autoneg_wait_to_complete) 5159ca4041bSJack F Vogel { 5169ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_link_speed, (hw, speed, 5170ecc2ff0SJack F Vogel autoneg_wait_to_complete), 5189ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 51913705f88SJack F Vogel } 52013705f88SJack F Vogel 52113705f88SJack F Vogel /** 52213705f88SJack F Vogel * ixgbe_check_link - Get link and speed status 52313705f88SJack F Vogel * @hw: pointer to hardware structure 52413705f88SJack F Vogel * 52513705f88SJack F Vogel * Reads the links register to determine if link is up and the current speed 52613705f88SJack F Vogel **/ 52713705f88SJack F Vogel s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 5289ca4041bSJack F Vogel bool *link_up, bool link_up_wait_to_complete) 52913705f88SJack F Vogel { 5309ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.check_link, (hw, speed, 5319ca4041bSJack F Vogel link_up, link_up_wait_to_complete), 53213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 53313705f88SJack F Vogel } 53413705f88SJack F Vogel 53513705f88SJack F Vogel /** 5361a4e3449SJack F Vogel * ixgbe_disable_tx_laser - Disable Tx laser 5371a4e3449SJack F Vogel * @hw: pointer to hardware structure 5381a4e3449SJack F Vogel * 5391a4e3449SJack F Vogel * If the driver needs to disable the laser on SFI optics. 5401a4e3449SJack F Vogel **/ 5411a4e3449SJack F Vogel void ixgbe_disable_tx_laser(struct ixgbe_hw *hw) 5421a4e3449SJack F Vogel { 5431a4e3449SJack F Vogel if (hw->mac.ops.disable_tx_laser) 5441a4e3449SJack F Vogel hw->mac.ops.disable_tx_laser(hw); 5451a4e3449SJack F Vogel } 5461a4e3449SJack F Vogel 5471a4e3449SJack F Vogel /** 5481a4e3449SJack F Vogel * ixgbe_enable_tx_laser - Enable Tx laser 5491a4e3449SJack F Vogel * @hw: pointer to hardware structure 5501a4e3449SJack F Vogel * 5511a4e3449SJack F Vogel * If the driver needs to enable the laser on SFI optics. 5521a4e3449SJack F Vogel **/ 5531a4e3449SJack F Vogel void ixgbe_enable_tx_laser(struct ixgbe_hw *hw) 5541a4e3449SJack F Vogel { 5551a4e3449SJack F Vogel if (hw->mac.ops.enable_tx_laser) 5561a4e3449SJack F Vogel hw->mac.ops.enable_tx_laser(hw); 5571a4e3449SJack F Vogel } 5581a4e3449SJack F Vogel 5591a4e3449SJack F Vogel /** 5601a4e3449SJack F Vogel * ixgbe_flap_tx_laser - flap Tx laser to start autotry process 5611a4e3449SJack F Vogel * @hw: pointer to hardware structure 5621a4e3449SJack F Vogel * 5631a4e3449SJack F Vogel * When the driver changes the link speeds that it can support then 5641a4e3449SJack F Vogel * flap the tx laser to alert the link partner to start autotry 5651a4e3449SJack F Vogel * process on its end. 5661a4e3449SJack F Vogel **/ 5671a4e3449SJack F Vogel void ixgbe_flap_tx_laser(struct ixgbe_hw *hw) 5681a4e3449SJack F Vogel { 5691a4e3449SJack F Vogel if (hw->mac.ops.flap_tx_laser) 5701a4e3449SJack F Vogel hw->mac.ops.flap_tx_laser(hw); 5711a4e3449SJack F Vogel } 5721a4e3449SJack F Vogel 5731a4e3449SJack F Vogel /** 5742969bf0eSJack F Vogel * ixgbe_setup_link - Set link speed 57513705f88SJack F Vogel * @hw: pointer to hardware structure 57613705f88SJack F Vogel * @speed: new link speed 57713705f88SJack F Vogel * 5782969bf0eSJack F Vogel * Configures link settings. Restarts the link. 5792969bf0eSJack F Vogel * Performs autonegotiation if needed. 58013705f88SJack F Vogel **/ 5812969bf0eSJack F Vogel s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed, 58213705f88SJack F Vogel bool autoneg_wait_to_complete) 58313705f88SJack F Vogel { 5842969bf0eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw, speed, 5850ecc2ff0SJack F Vogel autoneg_wait_to_complete), 58613705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 58713705f88SJack F Vogel } 58813705f88SJack F Vogel 58913705f88SJack F Vogel /** 5909ca4041bSJack F Vogel * ixgbe_get_link_capabilities - Returns link capabilities 59113705f88SJack F Vogel * @hw: pointer to hardware structure 59213705f88SJack F Vogel * 5939ca4041bSJack F Vogel * Determines the link capabilities of the current configuration. 59413705f88SJack F Vogel **/ 5959ca4041bSJack F Vogel s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 59613705f88SJack F Vogel bool *autoneg) 59713705f88SJack F Vogel { 5989ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw, 5999ca4041bSJack F Vogel speed, autoneg), IXGBE_NOT_IMPLEMENTED); 60013705f88SJack F Vogel } 60113705f88SJack F Vogel 60213705f88SJack F Vogel /** 6039ca4041bSJack F Vogel * ixgbe_led_on - Turn on LEDs 60413705f88SJack F Vogel * @hw: pointer to hardware structure 60513705f88SJack F Vogel * @index: led number to turn on 60613705f88SJack F Vogel * 60713705f88SJack F Vogel * Turns on the software controllable LEDs. 60813705f88SJack F Vogel **/ 60913705f88SJack F Vogel s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index) 61013705f88SJack F Vogel { 6119ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index), 61213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 61313705f88SJack F Vogel } 61413705f88SJack F Vogel 61513705f88SJack F Vogel /** 6169ca4041bSJack F Vogel * ixgbe_led_off - Turn off LEDs 61713705f88SJack F Vogel * @hw: pointer to hardware structure 61813705f88SJack F Vogel * @index: led number to turn off 61913705f88SJack F Vogel * 62013705f88SJack F Vogel * Turns off the software controllable LEDs. 62113705f88SJack F Vogel **/ 62213705f88SJack F Vogel s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index) 62313705f88SJack F Vogel { 6249ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index), 62513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 62613705f88SJack F Vogel } 62713705f88SJack F Vogel 62813705f88SJack F Vogel /** 6299ca4041bSJack F Vogel * ixgbe_blink_led_start - Blink LEDs 63013705f88SJack F Vogel * @hw: pointer to hardware structure 63113705f88SJack F Vogel * @index: led number to blink 63213705f88SJack F Vogel * 63313705f88SJack F Vogel * Blink LED based on index. 63413705f88SJack F Vogel **/ 63513705f88SJack F Vogel s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index) 63613705f88SJack F Vogel { 6379ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index), 63813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 63913705f88SJack F Vogel } 64013705f88SJack F Vogel 64113705f88SJack F Vogel /** 6429ca4041bSJack F Vogel * ixgbe_blink_led_stop - Stop blinking LEDs 64313705f88SJack F Vogel * @hw: pointer to hardware structure 64413705f88SJack F Vogel * 64513705f88SJack F Vogel * Stop blinking LED based on index. 64613705f88SJack F Vogel **/ 64713705f88SJack F Vogel s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index) 64813705f88SJack F Vogel { 6499ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index), 65013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 65113705f88SJack F Vogel } 65213705f88SJack F Vogel 65313705f88SJack F Vogel /** 6549ca4041bSJack F Vogel * ixgbe_init_eeprom_params - Initialize EEPROM parameters 65513705f88SJack F Vogel * @hw: pointer to hardware structure 65613705f88SJack F Vogel * 65713705f88SJack F Vogel * Initializes the EEPROM parameters ixgbe_eeprom_info within the 65813705f88SJack F Vogel * ixgbe_hw struct in order to set up EEPROM access. 65913705f88SJack F Vogel **/ 66013705f88SJack F Vogel s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw) 66113705f88SJack F Vogel { 6629ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw), 66313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 66413705f88SJack F Vogel } 66513705f88SJack F Vogel 66613705f88SJack F Vogel 66713705f88SJack F Vogel /** 66813705f88SJack F Vogel * ixgbe_write_eeprom - Write word to EEPROM 66913705f88SJack F Vogel * @hw: pointer to hardware structure 67013705f88SJack F Vogel * @offset: offset within the EEPROM to be written to 67113705f88SJack F Vogel * @data: 16 bit word to be written to the EEPROM 67213705f88SJack F Vogel * 67313705f88SJack F Vogel * Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not 67413705f88SJack F Vogel * called after this function, the EEPROM will most likely contain an 67513705f88SJack F Vogel * invalid checksum. 67613705f88SJack F Vogel **/ 67713705f88SJack F Vogel s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data) 67813705f88SJack F Vogel { 6799ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data), 68013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 68113705f88SJack F Vogel } 68213705f88SJack F Vogel 68313705f88SJack F Vogel /** 68485d0a26eSJack F Vogel * ixgbe_write_eeprom_buffer - Write word(s) to EEPROM 68585d0a26eSJack F Vogel * @hw: pointer to hardware structure 68685d0a26eSJack F Vogel * @offset: offset within the EEPROM to be written to 68785d0a26eSJack F Vogel * @data: 16 bit word(s) to be written to the EEPROM 68885d0a26eSJack F Vogel * @words: number of words 68985d0a26eSJack F Vogel * 69085d0a26eSJack F Vogel * Writes 16 bit word(s) to EEPROM. If ixgbe_eeprom_update_checksum is not 69185d0a26eSJack F Vogel * called after this function, the EEPROM will most likely contain an 69285d0a26eSJack F Vogel * invalid checksum. 69385d0a26eSJack F Vogel **/ 69485d0a26eSJack F Vogel s32 ixgbe_write_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, u16 words, 69585d0a26eSJack F Vogel u16 *data) 69685d0a26eSJack F Vogel { 69785d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.write_buffer, 69885d0a26eSJack F Vogel (hw, offset, words, data), 69985d0a26eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 70085d0a26eSJack F Vogel } 70185d0a26eSJack F Vogel 70285d0a26eSJack F Vogel /** 70313705f88SJack F Vogel * ixgbe_read_eeprom - Read word from EEPROM 70413705f88SJack F Vogel * @hw: pointer to hardware structure 70513705f88SJack F Vogel * @offset: offset within the EEPROM to be read 70613705f88SJack F Vogel * @data: read 16 bit value from EEPROM 70713705f88SJack F Vogel * 70813705f88SJack F Vogel * Reads 16 bit value from EEPROM 70913705f88SJack F Vogel **/ 71013705f88SJack F Vogel s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data) 71113705f88SJack F Vogel { 7129ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data), 71313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 71413705f88SJack F Vogel } 71513705f88SJack F Vogel 71613705f88SJack F Vogel /** 71785d0a26eSJack F Vogel * ixgbe_read_eeprom_buffer - Read word(s) from EEPROM 71885d0a26eSJack F Vogel * @hw: pointer to hardware structure 71985d0a26eSJack F Vogel * @offset: offset within the EEPROM to be read 72085d0a26eSJack F Vogel * @data: read 16 bit word(s) from EEPROM 72185d0a26eSJack F Vogel * @words: number of words 72285d0a26eSJack F Vogel * 72385d0a26eSJack F Vogel * Reads 16 bit word(s) from EEPROM 72485d0a26eSJack F Vogel **/ 72585d0a26eSJack F Vogel s32 ixgbe_read_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, 72685d0a26eSJack F Vogel u16 words, u16 *data) 72785d0a26eSJack F Vogel { 72885d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.read_buffer, 72985d0a26eSJack F Vogel (hw, offset, words, data), 73085d0a26eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 73185d0a26eSJack F Vogel } 73285d0a26eSJack F Vogel 73385d0a26eSJack F Vogel /** 73413705f88SJack F Vogel * ixgbe_validate_eeprom_checksum - Validate EEPROM checksum 73513705f88SJack F Vogel * @hw: pointer to hardware structure 73613705f88SJack F Vogel * @checksum_val: calculated checksum 73713705f88SJack F Vogel * 73813705f88SJack F Vogel * Performs checksum calculation and validates the EEPROM checksum 73913705f88SJack F Vogel **/ 74013705f88SJack F Vogel s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val) 74113705f88SJack F Vogel { 7429ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum, 74313705f88SJack F Vogel (hw, checksum_val), IXGBE_NOT_IMPLEMENTED); 74413705f88SJack F Vogel } 74513705f88SJack F Vogel 74613705f88SJack F Vogel /** 74713705f88SJack F Vogel * ixgbe_eeprom_update_checksum - Updates the EEPROM checksum 74813705f88SJack F Vogel * @hw: pointer to hardware structure 74913705f88SJack F Vogel **/ 75013705f88SJack F Vogel s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw) 75113705f88SJack F Vogel { 7529ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw), 75313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 75413705f88SJack F Vogel } 75513705f88SJack F Vogel 75613705f88SJack F Vogel /** 7570ac6dfecSJack F Vogel * ixgbe_insert_mac_addr - Find a RAR for this mac address 7580ac6dfecSJack F Vogel * @hw: pointer to hardware structure 7590ac6dfecSJack F Vogel * @addr: Address to put into receive address register 7600ac6dfecSJack F Vogel * @vmdq: VMDq pool to assign 7610ac6dfecSJack F Vogel * 7620ac6dfecSJack F Vogel * Puts an ethernet address into a receive address register, or 7630ac6dfecSJack F Vogel * finds the rar that it is aleady in; adds to the pool list 7640ac6dfecSJack F Vogel **/ 7650ac6dfecSJack F Vogel s32 ixgbe_insert_mac_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq) 7660ac6dfecSJack F Vogel { 7670ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.insert_mac_addr, 7680ac6dfecSJack F Vogel (hw, addr, vmdq), 7690ac6dfecSJack F Vogel IXGBE_NOT_IMPLEMENTED); 7700ac6dfecSJack F Vogel } 7710ac6dfecSJack F Vogel 7720ac6dfecSJack F Vogel /** 7739ca4041bSJack F Vogel * ixgbe_set_rar - Set Rx address register 77413705f88SJack F Vogel * @hw: pointer to hardware structure 77513705f88SJack F Vogel * @index: Receive address register to write 7769ca4041bSJack F Vogel * @addr: Address to put into receive address register 7779ca4041bSJack F Vogel * @vmdq: VMDq "set" 77813705f88SJack F Vogel * @enable_addr: set flag that address is active 77913705f88SJack F Vogel * 78013705f88SJack F Vogel * Puts an ethernet address into a receive address register. 78113705f88SJack F Vogel **/ 7829ca4041bSJack F Vogel s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq, 78313705f88SJack F Vogel u32 enable_addr) 78413705f88SJack F Vogel { 7859ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq, 78613705f88SJack F Vogel enable_addr), IXGBE_NOT_IMPLEMENTED); 78713705f88SJack F Vogel } 78813705f88SJack F Vogel 78913705f88SJack F Vogel /** 7905b7f4cedSJack F Vogel * ixgbe_clear_rar - Clear Rx address register 7915b7f4cedSJack F Vogel * @hw: pointer to hardware structure 7925b7f4cedSJack F Vogel * @index: Receive address register to write 7935b7f4cedSJack F Vogel * 7945b7f4cedSJack F Vogel * Puts an ethernet address into a receive address register. 7955b7f4cedSJack F Vogel **/ 7965b7f4cedSJack F Vogel s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index) 7975b7f4cedSJack F Vogel { 7985b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index), 7995b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 8005b7f4cedSJack F Vogel } 8015b7f4cedSJack F Vogel 8025b7f4cedSJack F Vogel /** 8039ca4041bSJack F Vogel * ixgbe_set_vmdq - Associate a VMDq index with a receive address 8049ca4041bSJack F Vogel * @hw: pointer to hardware structure 8059ca4041bSJack F Vogel * @rar: receive address register index to associate with VMDq index 8069ca4041bSJack F Vogel * @vmdq: VMDq set or pool index 8079ca4041bSJack F Vogel **/ 8089ca4041bSJack F Vogel s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 8099ca4041bSJack F Vogel { 8109ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq), 8119ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 812a621e3c8SJack F Vogel 813a621e3c8SJack F Vogel } 814a621e3c8SJack F Vogel 815a621e3c8SJack F Vogel /** 816a621e3c8SJack F Vogel * ixgbe_set_vmdq_san_mac - Associate VMDq index 127 with a receive address 817a621e3c8SJack F Vogel * @hw: pointer to hardware structure 818a621e3c8SJack F Vogel * @vmdq: VMDq default pool index 819a621e3c8SJack F Vogel **/ 820a621e3c8SJack F Vogel s32 ixgbe_set_vmdq_san_mac(struct ixgbe_hw *hw, u32 vmdq) 821a621e3c8SJack F Vogel { 822a621e3c8SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vmdq_san_mac, 823a621e3c8SJack F Vogel (hw, vmdq), IXGBE_NOT_IMPLEMENTED); 8249ca4041bSJack F Vogel } 8259ca4041bSJack F Vogel 8269ca4041bSJack F Vogel /** 8275b7f4cedSJack F Vogel * ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address 8285b7f4cedSJack F Vogel * @hw: pointer to hardware structure 8295b7f4cedSJack F Vogel * @rar: receive address register index to disassociate with VMDq index 8305b7f4cedSJack F Vogel * @vmdq: VMDq set or pool index 8315b7f4cedSJack F Vogel **/ 8325b7f4cedSJack F Vogel s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 8335b7f4cedSJack F Vogel { 8345b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq), 8355b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 8365b7f4cedSJack F Vogel } 8375b7f4cedSJack F Vogel 8385b7f4cedSJack F Vogel /** 83913705f88SJack F Vogel * ixgbe_init_rx_addrs - Initializes receive address filters. 84013705f88SJack F Vogel * @hw: pointer to hardware structure 84113705f88SJack F Vogel * 84213705f88SJack F Vogel * Places the MAC address in receive address register 0 and clears the rest 8439ca4041bSJack F Vogel * of the receive address registers. Clears the multicast table. Assumes 84413705f88SJack F Vogel * the receiver is in reset when the routine is called. 84513705f88SJack F Vogel **/ 84613705f88SJack F Vogel s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw) 84713705f88SJack F Vogel { 8489ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw), 84913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 85013705f88SJack F Vogel } 85113705f88SJack F Vogel 85213705f88SJack F Vogel /** 85313705f88SJack F Vogel * ixgbe_get_num_rx_addrs - Returns the number of RAR entries. 85413705f88SJack F Vogel * @hw: pointer to hardware structure 85513705f88SJack F Vogel **/ 85613705f88SJack F Vogel u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw) 85713705f88SJack F Vogel { 8589ca4041bSJack F Vogel return hw->mac.num_rar_entries; 8599ca4041bSJack F Vogel } 8609ca4041bSJack F Vogel 8619ca4041bSJack F Vogel /** 8629ca4041bSJack F Vogel * ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses 8639ca4041bSJack F Vogel * @hw: pointer to hardware structure 8649ca4041bSJack F Vogel * @addr_list: the list of new multicast addresses 8659ca4041bSJack F Vogel * @addr_count: number of addresses 8669ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 8679ca4041bSJack F Vogel * 8689ca4041bSJack F Vogel * The given list replaces any existing list. Clears the secondary addrs from 8699ca4041bSJack F Vogel * receive address registers. Uses unused receive address registers for the 8709ca4041bSJack F Vogel * first secondary addresses, and falls back to promiscuous mode as needed. 8719ca4041bSJack F Vogel **/ 8729ca4041bSJack F Vogel s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list, 8739ca4041bSJack F Vogel u32 addr_count, ixgbe_mc_addr_itr func) 8749ca4041bSJack F Vogel { 8759ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw, 8769ca4041bSJack F Vogel addr_list, addr_count, func), 8779ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 87813705f88SJack F Vogel } 87913705f88SJack F Vogel 88013705f88SJack F Vogel /** 88113705f88SJack F Vogel * ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses 88213705f88SJack F Vogel * @hw: pointer to hardware structure 88313705f88SJack F Vogel * @mc_addr_list: the list of new multicast addresses 88413705f88SJack F Vogel * @mc_addr_count: number of addresses 8859ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 88613705f88SJack F Vogel * 88713705f88SJack F Vogel * The given list replaces any existing list. Clears the MC addrs from receive 8889ca4041bSJack F Vogel * address registers and the multicast table. Uses unused receive address 88913705f88SJack F Vogel * registers for the first multicast addresses, and hashes the rest into the 89013705f88SJack F Vogel * multicast table. 89113705f88SJack F Vogel **/ 89213705f88SJack F Vogel s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list, 89385d0a26eSJack F Vogel u32 mc_addr_count, ixgbe_mc_addr_itr func, 89485d0a26eSJack F Vogel bool clear) 89513705f88SJack F Vogel { 8969ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw, 89785d0a26eSJack F Vogel mc_addr_list, mc_addr_count, func, clear), 89813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 89913705f88SJack F Vogel } 90013705f88SJack F Vogel 90113705f88SJack F Vogel /** 90213705f88SJack F Vogel * ixgbe_enable_mc - Enable multicast address in RAR 90313705f88SJack F Vogel * @hw: pointer to hardware structure 90413705f88SJack F Vogel * 90513705f88SJack F Vogel * Enables multicast address in RAR and the use of the multicast hash table. 90613705f88SJack F Vogel **/ 90713705f88SJack F Vogel s32 ixgbe_enable_mc(struct ixgbe_hw *hw) 90813705f88SJack F Vogel { 9099ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw), 91013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 91113705f88SJack F Vogel } 91213705f88SJack F Vogel 91313705f88SJack F Vogel /** 91413705f88SJack F Vogel * ixgbe_disable_mc - Disable multicast address in RAR 91513705f88SJack F Vogel * @hw: pointer to hardware structure 91613705f88SJack F Vogel * 91713705f88SJack F Vogel * Disables multicast address in RAR and the use of the multicast hash table. 91813705f88SJack F Vogel **/ 91913705f88SJack F Vogel s32 ixgbe_disable_mc(struct ixgbe_hw *hw) 92013705f88SJack F Vogel { 9219ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw), 92213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 92313705f88SJack F Vogel } 92413705f88SJack F Vogel 92513705f88SJack F Vogel /** 92613705f88SJack F Vogel * ixgbe_clear_vfta - Clear VLAN filter table 92713705f88SJack F Vogel * @hw: pointer to hardware structure 92813705f88SJack F Vogel * 92913705f88SJack F Vogel * Clears the VLAN filer table, and the VMDq index associated with the filter 93013705f88SJack F Vogel **/ 93113705f88SJack F Vogel s32 ixgbe_clear_vfta(struct ixgbe_hw *hw) 93213705f88SJack F Vogel { 9339ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw), 93413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 93513705f88SJack F Vogel } 93613705f88SJack F Vogel 93713705f88SJack F Vogel /** 93813705f88SJack F Vogel * ixgbe_set_vfta - Set VLAN filter table 93913705f88SJack F Vogel * @hw: pointer to hardware structure 94013705f88SJack F Vogel * @vlan: VLAN id to write to VLAN filter 94113705f88SJack F Vogel * @vind: VMDq output index that maps queue to VLAN id in VFTA 94213705f88SJack F Vogel * @vlan_on: boolean flag to turn on/off VLAN in VFTA 94313705f88SJack F Vogel * 94413705f88SJack F Vogel * Turn on/off specified VLAN in the VLAN filter table. 94513705f88SJack F Vogel **/ 94613705f88SJack F Vogel s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on) 94713705f88SJack F Vogel { 9489ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind, 94913705f88SJack F Vogel vlan_on), IXGBE_NOT_IMPLEMENTED); 95013705f88SJack F Vogel } 95113705f88SJack F Vogel 95213705f88SJack F Vogel /** 95385d0a26eSJack F Vogel * ixgbe_set_vlvf - Set VLAN Pool Filter 95485d0a26eSJack F Vogel * @hw: pointer to hardware structure 95585d0a26eSJack F Vogel * @vlan: VLAN id to write to VLAN filter 95685d0a26eSJack F Vogel * @vind: VMDq output index that maps queue to VLAN id in VFVFB 95785d0a26eSJack F Vogel * @vlan_on: boolean flag to turn on/off VLAN in VFVF 95885d0a26eSJack F Vogel * @vfta_changed: pointer to boolean flag which indicates whether VFTA 95985d0a26eSJack F Vogel * should be changed 96085d0a26eSJack F Vogel * 96185d0a26eSJack F Vogel * Turn on/off specified bit in VLVF table. 96285d0a26eSJack F Vogel **/ 96385d0a26eSJack F Vogel s32 ixgbe_set_vlvf(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on, 96485d0a26eSJack F Vogel bool *vfta_changed) 96585d0a26eSJack F Vogel { 96685d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vlvf, (hw, vlan, vind, 96785d0a26eSJack F Vogel vlan_on, vfta_changed), IXGBE_NOT_IMPLEMENTED); 96885d0a26eSJack F Vogel } 96985d0a26eSJack F Vogel 97085d0a26eSJack F Vogel /** 9710ac6dfecSJack F Vogel * ixgbe_fc_enable - Enable flow control 97213705f88SJack F Vogel * @hw: pointer to hardware structure 97313705f88SJack F Vogel * 97413705f88SJack F Vogel * Configures the flow control settings based on SW configuration. 97513705f88SJack F Vogel **/ 976a621e3c8SJack F Vogel s32 ixgbe_fc_enable(struct ixgbe_hw *hw) 97713705f88SJack F Vogel { 978a621e3c8SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.fc_enable, (hw), 97913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 98013705f88SJack F Vogel } 98113705f88SJack F Vogel 9823ec35e52SJack F Vogel /** 98385d0a26eSJack F Vogel * ixgbe_set_fw_drv_ver - Try to send the driver version number FW 98485d0a26eSJack F Vogel * @hw: pointer to hardware structure 98585d0a26eSJack F Vogel * @maj: driver major number to be sent to firmware 98685d0a26eSJack F Vogel * @min: driver minor number to be sent to firmware 98785d0a26eSJack F Vogel * @build: driver build number to be sent to firmware 98885d0a26eSJack F Vogel * @ver: driver version number to be sent to firmware 98985d0a26eSJack F Vogel **/ 99085d0a26eSJack F Vogel s32 ixgbe_set_fw_drv_ver(struct ixgbe_hw *hw, u8 maj, u8 min, u8 build, 99185d0a26eSJack F Vogel u8 ver) 99285d0a26eSJack F Vogel { 99385d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_fw_drv_ver, (hw, maj, min, 99485d0a26eSJack F Vogel build, ver), IXGBE_NOT_IMPLEMENTED); 99585d0a26eSJack F Vogel } 99685d0a26eSJack F Vogel 99785d0a26eSJack F Vogel 99885d0a26eSJack F Vogel /** 9993ec35e52SJack F Vogel * ixgbe_read_analog_reg8 - Reads 8 bit analog register 10003ec35e52SJack F Vogel * @hw: pointer to hardware structure 10013ec35e52SJack F Vogel * @reg: analog register to read 10023ec35e52SJack F Vogel * @val: read value 10033ec35e52SJack F Vogel * 10043ec35e52SJack F Vogel * Performs write operation to analog register specified. 10053ec35e52SJack F Vogel **/ 10063ec35e52SJack F Vogel s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val) 10073ec35e52SJack F Vogel { 10089ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg, 10099ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 10103ec35e52SJack F Vogel } 10113ec35e52SJack F Vogel 10123ec35e52SJack F Vogel /** 10133ec35e52SJack F Vogel * ixgbe_write_analog_reg8 - Writes 8 bit analog register 10143ec35e52SJack F Vogel * @hw: pointer to hardware structure 10153ec35e52SJack F Vogel * @reg: analog register to write 10163ec35e52SJack F Vogel * @val: value to write 10173ec35e52SJack F Vogel * 10183ec35e52SJack F Vogel * Performs write operation to Atlas analog register specified. 10193ec35e52SJack F Vogel **/ 10203ec35e52SJack F Vogel s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val) 10213ec35e52SJack F Vogel { 10229ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg, 10239ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 10243ec35e52SJack F Vogel } 10253ec35e52SJack F Vogel 10265b7f4cedSJack F Vogel /** 10275b7f4cedSJack F Vogel * ixgbe_init_uta_tables - Initializes Unicast Table Arrays. 10285b7f4cedSJack F Vogel * @hw: pointer to hardware structure 10295b7f4cedSJack F Vogel * 10305b7f4cedSJack F Vogel * Initializes the Unicast Table Arrays to zero on device load. This 10315b7f4cedSJack F Vogel * is part of the Rx init addr execution path. 10325b7f4cedSJack F Vogel **/ 10335b7f4cedSJack F Vogel s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw) 10345b7f4cedSJack F Vogel { 10355b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw), 10365b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 10375b7f4cedSJack F Vogel } 10381b6e0dbaSJack F Vogel 10391b6e0dbaSJack F Vogel /** 10400ac6dfecSJack F Vogel * ixgbe_read_i2c_byte - Reads 8 bit word over I2C at specified device address 10410ac6dfecSJack F Vogel * @hw: pointer to hardware structure 10420ac6dfecSJack F Vogel * @byte_offset: byte offset to read 10430ac6dfecSJack F Vogel * @data: value read 10440ac6dfecSJack F Vogel * 10450ac6dfecSJack F Vogel * Performs byte read operation to SFP module's EEPROM over I2C interface. 10460ac6dfecSJack F Vogel **/ 10470ac6dfecSJack F Vogel s32 ixgbe_read_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, 10480ac6dfecSJack F Vogel u8 *data) 10490ac6dfecSJack F Vogel { 10500ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte, (hw, byte_offset, 10510ac6dfecSJack F Vogel dev_addr, data), IXGBE_NOT_IMPLEMENTED); 10520ac6dfecSJack F Vogel } 10530ac6dfecSJack F Vogel 10540ac6dfecSJack F Vogel /** 10550ac6dfecSJack F Vogel * ixgbe_write_i2c_byte - Writes 8 bit word over I2C 10560ac6dfecSJack F Vogel * @hw: pointer to hardware structure 10570ac6dfecSJack F Vogel * @byte_offset: byte offset to write 10580ac6dfecSJack F Vogel * @data: value to write 10590ac6dfecSJack F Vogel * 10600ac6dfecSJack F Vogel * Performs byte write operation to SFP module's EEPROM over I2C interface 10610ac6dfecSJack F Vogel * at a specified device address. 10620ac6dfecSJack F Vogel **/ 10630ac6dfecSJack F Vogel s32 ixgbe_write_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, 10640ac6dfecSJack F Vogel u8 data) 10650ac6dfecSJack F Vogel { 10660ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte, (hw, byte_offset, 10670ac6dfecSJack F Vogel dev_addr, data), IXGBE_NOT_IMPLEMENTED); 10680ac6dfecSJack F Vogel } 10690ac6dfecSJack F Vogel 10700ac6dfecSJack F Vogel /** 10710ac6dfecSJack F Vogel * ixgbe_write_i2c_eeprom - Writes 8 bit EEPROM word over I2C interface 10720ac6dfecSJack F Vogel * @hw: pointer to hardware structure 10730ac6dfecSJack F Vogel * @byte_offset: EEPROM byte offset to write 10740ac6dfecSJack F Vogel * @eeprom_data: value to write 10750ac6dfecSJack F Vogel * 10760ac6dfecSJack F Vogel * Performs byte write operation to SFP module's EEPROM over I2C interface. 10770ac6dfecSJack F Vogel **/ 10780ac6dfecSJack F Vogel s32 ixgbe_write_i2c_eeprom(struct ixgbe_hw *hw, 10790ac6dfecSJack F Vogel u8 byte_offset, u8 eeprom_data) 10800ac6dfecSJack F Vogel { 10810ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_i2c_eeprom, 10820ac6dfecSJack F Vogel (hw, byte_offset, eeprom_data), 10830ac6dfecSJack F Vogel IXGBE_NOT_IMPLEMENTED); 10840ac6dfecSJack F Vogel } 10850ac6dfecSJack F Vogel 10860ac6dfecSJack F Vogel /** 10871b6e0dbaSJack F Vogel * ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface 10881b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 10891b6e0dbaSJack F Vogel * @byte_offset: EEPROM byte offset to read 10901b6e0dbaSJack F Vogel * @eeprom_data: value read 10911b6e0dbaSJack F Vogel * 10921b6e0dbaSJack F Vogel * Performs byte read operation to SFP module's EEPROM over I2C interface. 10931b6e0dbaSJack F Vogel **/ 10941b6e0dbaSJack F Vogel s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data) 10951b6e0dbaSJack F Vogel { 10961b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom, 10971b6e0dbaSJack F Vogel (hw, byte_offset, eeprom_data), 10981b6e0dbaSJack F Vogel IXGBE_NOT_IMPLEMENTED); 10991b6e0dbaSJack F Vogel } 11001b6e0dbaSJack F Vogel 11011b6e0dbaSJack F Vogel /** 11021b6e0dbaSJack F Vogel * ixgbe_get_supported_physical_layer - Returns physical layer type 11031b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 11041b6e0dbaSJack F Vogel * 11051b6e0dbaSJack F Vogel * Determines physical layer capabilities of the current configuration. 11061b6e0dbaSJack F Vogel **/ 11071b6e0dbaSJack F Vogel u32 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw) 11081b6e0dbaSJack F Vogel { 11091b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer, 11101b6e0dbaSJack F Vogel (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN); 11111b6e0dbaSJack F Vogel } 11120ac6dfecSJack F Vogel 11130ac6dfecSJack F Vogel /** 1114a621e3c8SJack F Vogel * ixgbe_enable_rx_dma - Enables Rx DMA unit, dependent on device specifics 11150ac6dfecSJack F Vogel * @hw: pointer to hardware structure 11160ac6dfecSJack F Vogel * @regval: bitfield to write to the Rx DMA register 11170ac6dfecSJack F Vogel * 11180ac6dfecSJack F Vogel * Enables the Rx DMA unit of the device. 11190ac6dfecSJack F Vogel **/ 11200ac6dfecSJack F Vogel s32 ixgbe_enable_rx_dma(struct ixgbe_hw *hw, u32 regval) 11210ac6dfecSJack F Vogel { 11220ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_rx_dma, 11230ac6dfecSJack F Vogel (hw, regval), IXGBE_NOT_IMPLEMENTED); 11240ac6dfecSJack F Vogel } 1125d8602bb9SJack F Vogel 1126d8602bb9SJack F Vogel /** 112785d0a26eSJack F Vogel * ixgbe_disable_sec_rx_path - Stops the receive data path 112885d0a26eSJack F Vogel * @hw: pointer to hardware structure 112985d0a26eSJack F Vogel * 113085d0a26eSJack F Vogel * Stops the receive data path. 113185d0a26eSJack F Vogel **/ 113285d0a26eSJack F Vogel s32 ixgbe_disable_sec_rx_path(struct ixgbe_hw *hw) 113385d0a26eSJack F Vogel { 113485d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.disable_sec_rx_path, 113585d0a26eSJack F Vogel (hw), IXGBE_NOT_IMPLEMENTED); 113685d0a26eSJack F Vogel } 113785d0a26eSJack F Vogel 113885d0a26eSJack F Vogel /** 113985d0a26eSJack F Vogel * ixgbe_enable_sec_rx_path - Enables the receive data path 114085d0a26eSJack F Vogel * @hw: pointer to hardware structure 114185d0a26eSJack F Vogel * 114285d0a26eSJack F Vogel * Enables the receive data path. 114385d0a26eSJack F Vogel **/ 114485d0a26eSJack F Vogel s32 ixgbe_enable_sec_rx_path(struct ixgbe_hw *hw) 114585d0a26eSJack F Vogel { 114685d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_sec_rx_path, 114785d0a26eSJack F Vogel (hw), IXGBE_NOT_IMPLEMENTED); 114885d0a26eSJack F Vogel } 114985d0a26eSJack F Vogel 115085d0a26eSJack F Vogel /** 1151d8602bb9SJack F Vogel * ixgbe_acquire_swfw_semaphore - Acquire SWFW semaphore 1152d8602bb9SJack F Vogel * @hw: pointer to hardware structure 1153d8602bb9SJack F Vogel * @mask: Mask to specify which semaphore to acquire 1154d8602bb9SJack F Vogel * 1155d8602bb9SJack F Vogel * Acquires the SWFW semaphore through SW_FW_SYNC register for the specified 1156d8602bb9SJack F Vogel * function (CSR, PHY0, PHY1, EEPROM, Flash) 1157d8602bb9SJack F Vogel **/ 1158d8602bb9SJack F Vogel s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u16 mask) 1159d8602bb9SJack F Vogel { 1160d8602bb9SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.acquire_swfw_sync, 1161d8602bb9SJack F Vogel (hw, mask), IXGBE_NOT_IMPLEMENTED); 1162d8602bb9SJack F Vogel } 1163d8602bb9SJack F Vogel 1164d8602bb9SJack F Vogel /** 1165d8602bb9SJack F Vogel * ixgbe_release_swfw_semaphore - Release SWFW semaphore 1166d8602bb9SJack F Vogel * @hw: pointer to hardware structure 1167d8602bb9SJack F Vogel * @mask: Mask to specify which semaphore to release 1168d8602bb9SJack F Vogel * 1169d8602bb9SJack F Vogel * Releases the SWFW semaphore through SW_FW_SYNC register for the specified 1170d8602bb9SJack F Vogel * function (CSR, PHY0, PHY1, EEPROM, Flash) 1171d8602bb9SJack F Vogel **/ 1172d8602bb9SJack F Vogel void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u16 mask) 1173d8602bb9SJack F Vogel { 1174d8602bb9SJack F Vogel if (hw->mac.ops.release_swfw_sync) 1175d8602bb9SJack F Vogel hw->mac.ops.release_swfw_sync(hw, mask); 1176d8602bb9SJack F Vogel } 1177d8602bb9SJack F Vogel 1178