19ca4041bSJack F Vogel /****************************************************************************** 213705f88SJack F Vogel 385d0a26eSJack F Vogel Copyright (c) 2001-2012, 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 if (hw->vendor_id == IXGBE_INTEL_VENDOR_ID) { 973ec35e52SJack F Vogel switch (hw->device_id) { 981b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598: 990ac6dfecSJack F Vogel case IXGBE_DEV_ID_82598_BX: 1003ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_SINGLE_PORT: 1013ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_DUAL_PORT: 1029ca4041bSJack F Vogel case IXGBE_DEV_ID_82598AT: 1032969bf0eSJack F Vogel case IXGBE_DEV_ID_82598AT2: 1043ec35e52SJack F Vogel case IXGBE_DEV_ID_82598EB_CX4: 1059ca4041bSJack F Vogel case IXGBE_DEV_ID_82598_CX4_DUAL_PORT: 1061b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_DA_DUAL_PORT: 1071b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM: 1089ca4041bSJack F Vogel case IXGBE_DEV_ID_82598EB_XF_LR: 1091b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598EB_SFP_LOM: 1103ec35e52SJack F Vogel hw->mac.type = ixgbe_mac_82598EB; 1113ec35e52SJack F Vogel break; 1120ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_KX4: 1132969bf0eSJack F Vogel case IXGBE_DEV_ID_82599_KX4_MEZZ: 114d8602bb9SJack F Vogel case IXGBE_DEV_ID_82599_XAUI_LOM: 1152969bf0eSJack F Vogel case IXGBE_DEV_ID_82599_COMBO_BACKPLANE: 11685d0a26eSJack F Vogel case IXGBE_DEV_ID_82599_KR: 1170ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_SFP: 1181a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_BACKPLANE_FCOE: 1191a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_SFP_FCOE: 12085d0a26eSJack F Vogel case IXGBE_DEV_ID_82599_SFP_EM: 12185d0a26eSJack F Vogel case IXGBE_DEV_ID_82599EN_SFP: 1220ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_CX4: 123c0014855SJack F Vogel case IXGBE_DEV_ID_82599_T3_LOM: 1240ac6dfecSJack F Vogel hw->mac.type = ixgbe_mac_82599EB; 1250ac6dfecSJack F Vogel break; 1261a4e3449SJack F Vogel case IXGBE_DEV_ID_82599_VF: 1271a4e3449SJack F Vogel hw->mac.type = ixgbe_mac_82599_vf; 1281a4e3449SJack F Vogel break; 12985d0a26eSJack F Vogel case IXGBE_DEV_ID_X540_VF: 13085d0a26eSJack F Vogel hw->mac.type = ixgbe_mac_X540_vf; 13185d0a26eSJack F Vogel break; 13285d0a26eSJack F Vogel case IXGBE_DEV_ID_X540T: 13385d0a26eSJack F Vogel hw->mac.type = ixgbe_mac_X540; 13485d0a26eSJack F Vogel break; 1353ec35e52SJack F Vogel default: 1363ec35e52SJack F Vogel ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 1373ec35e52SJack F Vogel break; 1383ec35e52SJack F Vogel } 1393ec35e52SJack F Vogel } else { 1403ec35e52SJack F Vogel ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 1413ec35e52SJack F Vogel } 1423ec35e52SJack F Vogel 1439ca4041bSJack F Vogel DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n", 1449ca4041bSJack F Vogel hw->mac.type, ret_val); 1453ec35e52SJack F Vogel return ret_val; 1463ec35e52SJack F Vogel } 1473ec35e52SJack F Vogel 1483ec35e52SJack F Vogel /** 14913705f88SJack F Vogel * ixgbe_init_hw - Initialize the hardware 15013705f88SJack F Vogel * @hw: pointer to hardware structure 15113705f88SJack F Vogel * 15213705f88SJack F Vogel * Initialize the hardware by resetting and then starting the hardware 15313705f88SJack F Vogel **/ 15413705f88SJack F Vogel s32 ixgbe_init_hw(struct ixgbe_hw *hw) 15513705f88SJack F Vogel { 1569ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw), 15713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 15813705f88SJack F Vogel } 15913705f88SJack F Vogel 16013705f88SJack F Vogel /** 16113705f88SJack F Vogel * ixgbe_reset_hw - Performs a hardware reset 16213705f88SJack F Vogel * @hw: pointer to hardware structure 16313705f88SJack F Vogel * 16413705f88SJack F Vogel * Resets the hardware by resetting the transmit and receive units, masks and 16513705f88SJack F Vogel * clears all interrupts, performs a PHY reset, and performs a MAC reset 16613705f88SJack F Vogel **/ 16713705f88SJack F Vogel s32 ixgbe_reset_hw(struct ixgbe_hw *hw) 16813705f88SJack F Vogel { 1699ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw), 17013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 17113705f88SJack F Vogel } 17213705f88SJack F Vogel 17313705f88SJack F Vogel /** 1749ca4041bSJack F Vogel * ixgbe_start_hw - Prepares hardware for Rx/Tx 17513705f88SJack F Vogel * @hw: pointer to hardware structure 17613705f88SJack F Vogel * 17713705f88SJack F Vogel * Starts the hardware by filling the bus info structure and media type, 17813705f88SJack F Vogel * clears all on chip counters, initializes receive address registers, 17913705f88SJack F Vogel * multicast table, VLAN filter table, calls routine to setup link and 18013705f88SJack F Vogel * flow control settings, and leaves transmit and receive units disabled 18113705f88SJack F Vogel * and uninitialized. 18213705f88SJack F Vogel **/ 18313705f88SJack F Vogel s32 ixgbe_start_hw(struct ixgbe_hw *hw) 18413705f88SJack F Vogel { 1859ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw), 18613705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 18713705f88SJack F Vogel } 18813705f88SJack F Vogel 18913705f88SJack F Vogel /** 190c0014855SJack F Vogel * ixgbe_enable_relaxed_ordering - Enables tx relaxed ordering, 191c0014855SJack F Vogel * which is disabled by default in ixgbe_start_hw(); 192c0014855SJack F Vogel * 193c0014855SJack F Vogel * @hw: pointer to hardware structure 194c0014855SJack F Vogel * 195c0014855SJack F Vogel * Enable relaxed ordering; 196c0014855SJack F Vogel **/ 197c0014855SJack F Vogel void ixgbe_enable_relaxed_ordering(struct ixgbe_hw *hw) 198c0014855SJack F Vogel { 199c0014855SJack F Vogel if (hw->mac.ops.enable_relaxed_ordering) 200c0014855SJack F Vogel hw->mac.ops.enable_relaxed_ordering(hw); 201c0014855SJack F Vogel } 202c0014855SJack F Vogel 203c0014855SJack F Vogel /** 20413705f88SJack F Vogel * ixgbe_clear_hw_cntrs - Clear hardware counters 20513705f88SJack F Vogel * @hw: pointer to hardware structure 20613705f88SJack F Vogel * 20713705f88SJack F Vogel * Clears all hardware statistics counters by reading them from the hardware 20813705f88SJack F Vogel * Statistics counters are clear on read. 20913705f88SJack F Vogel **/ 21013705f88SJack F Vogel s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw) 21113705f88SJack F Vogel { 2129ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw), 21313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 21413705f88SJack F Vogel } 21513705f88SJack F Vogel 21613705f88SJack F Vogel /** 21713705f88SJack F Vogel * ixgbe_get_media_type - Get media type 21813705f88SJack F Vogel * @hw: pointer to hardware structure 21913705f88SJack F Vogel * 22013705f88SJack F Vogel * Returns the media type (fiber, copper, backplane) 22113705f88SJack F Vogel **/ 22213705f88SJack F Vogel enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw) 22313705f88SJack F Vogel { 2249ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw), 22513705f88SJack F Vogel ixgbe_media_type_unknown); 22613705f88SJack F Vogel } 22713705f88SJack F Vogel 22813705f88SJack F Vogel /** 22913705f88SJack F Vogel * ixgbe_get_mac_addr - Get MAC address 23013705f88SJack F Vogel * @hw: pointer to hardware structure 23113705f88SJack F Vogel * @mac_addr: Adapter MAC address 23213705f88SJack F Vogel * 23313705f88SJack F Vogel * Reads the adapter's MAC address from the first Receive Address Register 2349ca4041bSJack F Vogel * (RAR0) A reset of the adapter must have been performed prior to calling 2359ca4041bSJack F Vogel * this function in order for the MAC address to have been loaded from the 2369ca4041bSJack F Vogel * EEPROM into RAR0 23713705f88SJack F Vogel **/ 23813705f88SJack F Vogel s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr) 23913705f88SJack F Vogel { 2409ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr, 24113705f88SJack F Vogel (hw, mac_addr), IXGBE_NOT_IMPLEMENTED); 24213705f88SJack F Vogel } 24313705f88SJack F Vogel 24413705f88SJack F Vogel /** 2450ac6dfecSJack F Vogel * ixgbe_get_san_mac_addr - Get SAN MAC address 2460ac6dfecSJack F Vogel * @hw: pointer to hardware structure 2470ac6dfecSJack F Vogel * @san_mac_addr: SAN MAC address 2480ac6dfecSJack F Vogel * 2490ac6dfecSJack F Vogel * Reads the SAN MAC address from the EEPROM, if it's available. This is 2500ac6dfecSJack F Vogel * per-port, so set_lan_id() must be called before reading the addresses. 2510ac6dfecSJack F Vogel **/ 2520ac6dfecSJack F Vogel s32 ixgbe_get_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr) 2530ac6dfecSJack F Vogel { 2540ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_san_mac_addr, 2550ac6dfecSJack F Vogel (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED); 2560ac6dfecSJack F Vogel } 2570ac6dfecSJack F Vogel 2580ac6dfecSJack F Vogel /** 2590ac6dfecSJack F Vogel * ixgbe_set_san_mac_addr - Write a SAN MAC address 2600ac6dfecSJack F Vogel * @hw: pointer to hardware structure 2610ac6dfecSJack F Vogel * @san_mac_addr: SAN MAC address 2620ac6dfecSJack F Vogel * 2630ac6dfecSJack F Vogel * Writes A SAN MAC address to the EEPROM. 2640ac6dfecSJack F Vogel **/ 2650ac6dfecSJack F Vogel s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr) 2660ac6dfecSJack F Vogel { 2670ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_san_mac_addr, 2680ac6dfecSJack F Vogel (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED); 2690ac6dfecSJack F Vogel } 2700ac6dfecSJack F Vogel 2710ac6dfecSJack F Vogel /** 2720ac6dfecSJack F Vogel * ixgbe_get_device_caps - Get additional device capabilities 2730ac6dfecSJack F Vogel * @hw: pointer to hardware structure 2740ac6dfecSJack F Vogel * @device_caps: the EEPROM word for device capabilities 2750ac6dfecSJack F Vogel * 2760ac6dfecSJack F Vogel * Reads the extra device capabilities from the EEPROM 2770ac6dfecSJack F Vogel **/ 2780ac6dfecSJack F Vogel s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps) 2790ac6dfecSJack F Vogel { 2800ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_device_caps, 2810ac6dfecSJack F Vogel (hw, device_caps), IXGBE_NOT_IMPLEMENTED); 2820ac6dfecSJack F Vogel } 2830ac6dfecSJack F Vogel 2840ac6dfecSJack F Vogel /** 2852969bf0eSJack F Vogel * ixgbe_get_wwn_prefix - Get alternative WWNN/WWPN prefix from the EEPROM 2862969bf0eSJack F Vogel * @hw: pointer to hardware structure 2872969bf0eSJack F Vogel * @wwnn_prefix: the alternative WWNN prefix 2882969bf0eSJack F Vogel * @wwpn_prefix: the alternative WWPN prefix 2892969bf0eSJack F Vogel * 2902969bf0eSJack F Vogel * This function will read the EEPROM from the alternative SAN MAC address 2912969bf0eSJack F Vogel * block to check the support for the alternative WWNN/WWPN prefix support. 2922969bf0eSJack F Vogel **/ 2932969bf0eSJack F Vogel s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix, 2942969bf0eSJack F Vogel u16 *wwpn_prefix) 2952969bf0eSJack F Vogel { 2962969bf0eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_wwn_prefix, 2972969bf0eSJack F Vogel (hw, wwnn_prefix, wwpn_prefix), 2982969bf0eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 2992969bf0eSJack F Vogel } 3002969bf0eSJack F Vogel 3012969bf0eSJack F Vogel /** 3021a4e3449SJack F Vogel * ixgbe_get_fcoe_boot_status - Get FCOE boot status from EEPROM 3031a4e3449SJack F Vogel * @hw: pointer to hardware structure 3041a4e3449SJack F Vogel * @bs: the fcoe boot status 3051a4e3449SJack F Vogel * 3061a4e3449SJack F Vogel * This function will read the FCOE boot status from the iSCSI FCOE block 3071a4e3449SJack F Vogel **/ 3081a4e3449SJack F Vogel s32 ixgbe_get_fcoe_boot_status(struct ixgbe_hw *hw, u16 *bs) 3091a4e3449SJack F Vogel { 3101a4e3449SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_fcoe_boot_status, 3111a4e3449SJack F Vogel (hw, bs), 3121a4e3449SJack F Vogel IXGBE_NOT_IMPLEMENTED); 3131a4e3449SJack F Vogel } 3141a4e3449SJack F Vogel 3151a4e3449SJack F Vogel /** 31613705f88SJack F Vogel * ixgbe_get_bus_info - Set PCI bus info 31713705f88SJack F Vogel * @hw: pointer to hardware structure 31813705f88SJack F Vogel * 31913705f88SJack F Vogel * Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure 32013705f88SJack F Vogel **/ 32113705f88SJack F Vogel s32 ixgbe_get_bus_info(struct ixgbe_hw *hw) 32213705f88SJack F Vogel { 3239ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw), 32413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 32513705f88SJack F Vogel } 32613705f88SJack F Vogel 32713705f88SJack F Vogel /** 3289ca4041bSJack F Vogel * ixgbe_get_num_of_tx_queues - Get Tx queues 32913705f88SJack F Vogel * @hw: pointer to hardware structure 33013705f88SJack F Vogel * 33113705f88SJack F Vogel * Returns the number of transmit queues for the given adapter. 33213705f88SJack F Vogel **/ 33313705f88SJack F Vogel u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw) 33413705f88SJack F Vogel { 3359ca4041bSJack F Vogel return hw->mac.max_tx_queues; 33613705f88SJack F Vogel } 33713705f88SJack F Vogel 33813705f88SJack F Vogel /** 3399ca4041bSJack F Vogel * ixgbe_get_num_of_rx_queues - Get Rx queues 34013705f88SJack F Vogel * @hw: pointer to hardware structure 34113705f88SJack F Vogel * 34213705f88SJack F Vogel * Returns the number of receive queues for the given adapter. 34313705f88SJack F Vogel **/ 34413705f88SJack F Vogel u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw) 34513705f88SJack F Vogel { 3469ca4041bSJack F Vogel return hw->mac.max_rx_queues; 34713705f88SJack F Vogel } 34813705f88SJack F Vogel 34913705f88SJack F Vogel /** 3509ca4041bSJack F Vogel * ixgbe_stop_adapter - Disable Rx/Tx units 35113705f88SJack F Vogel * @hw: pointer to hardware structure 35213705f88SJack F Vogel * 35313705f88SJack F Vogel * Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts, 35413705f88SJack F Vogel * disables transmit and receive units. The adapter_stopped flag is used by 35513705f88SJack F Vogel * the shared code and drivers to determine if the adapter is in a stopped 35613705f88SJack F Vogel * state and should not touch the hardware. 35713705f88SJack F Vogel **/ 35813705f88SJack F Vogel s32 ixgbe_stop_adapter(struct ixgbe_hw *hw) 35913705f88SJack F Vogel { 3609ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw), 36113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 36213705f88SJack F Vogel } 36313705f88SJack F Vogel 36413705f88SJack F Vogel /** 3651a4e3449SJack F Vogel * ixgbe_read_pba_string - Reads part number string from EEPROM 3661a4e3449SJack F Vogel * @hw: pointer to hardware structure 3671a4e3449SJack F Vogel * @pba_num: stores the part number string from the EEPROM 3681a4e3449SJack F Vogel * @pba_num_size: part number string buffer length 3691a4e3449SJack F Vogel * 3701a4e3449SJack F Vogel * Reads the part number string from the EEPROM. 3711a4e3449SJack F Vogel **/ 3721a4e3449SJack F Vogel s32 ixgbe_read_pba_string(struct ixgbe_hw *hw, u8 *pba_num, u32 pba_num_size) 3731a4e3449SJack F Vogel { 3741a4e3449SJack F Vogel return ixgbe_read_pba_string_generic(hw, pba_num, pba_num_size); 3751a4e3449SJack F Vogel } 3761a4e3449SJack F Vogel 3771a4e3449SJack F Vogel /** 3789ca4041bSJack F Vogel * ixgbe_read_pba_num - Reads part number from EEPROM 3799ca4041bSJack F Vogel * @hw: pointer to hardware structure 3809ca4041bSJack F Vogel * @pba_num: stores the part number from the EEPROM 3819ca4041bSJack F Vogel * 3829ca4041bSJack F Vogel * Reads the part number from the EEPROM. 3839ca4041bSJack F Vogel **/ 3849ca4041bSJack F Vogel s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num) 3859ca4041bSJack F Vogel { 3869ca4041bSJack F Vogel return ixgbe_read_pba_num_generic(hw, pba_num); 3879ca4041bSJack F Vogel } 3889ca4041bSJack F Vogel 3899ca4041bSJack F Vogel /** 39013705f88SJack F Vogel * ixgbe_identify_phy - Get PHY type 39113705f88SJack F Vogel * @hw: pointer to hardware structure 39213705f88SJack F Vogel * 39313705f88SJack F Vogel * Determines the physical layer module found on the current adapter. 39413705f88SJack F Vogel **/ 39513705f88SJack F Vogel s32 ixgbe_identify_phy(struct ixgbe_hw *hw) 39613705f88SJack F Vogel { 39713705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 39813705f88SJack F Vogel 39913705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 4001a4e3449SJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.identify, (hw), 40113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 40213705f88SJack F Vogel } 40313705f88SJack F Vogel 40413705f88SJack F Vogel return status; 40513705f88SJack F Vogel } 40613705f88SJack F Vogel 40713705f88SJack F Vogel /** 40813705f88SJack F Vogel * ixgbe_reset_phy - Perform a PHY reset 40913705f88SJack F Vogel * @hw: pointer to hardware structure 41013705f88SJack F Vogel **/ 41113705f88SJack F Vogel s32 ixgbe_reset_phy(struct ixgbe_hw *hw) 41213705f88SJack F Vogel { 41313705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 41413705f88SJack F Vogel 41513705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 4161b6e0dbaSJack F Vogel if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS) 41713705f88SJack F Vogel status = IXGBE_ERR_PHY; 41813705f88SJack F Vogel } 41913705f88SJack F Vogel 42013705f88SJack F Vogel if (status == IXGBE_SUCCESS) { 4219ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw), 42213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 42313705f88SJack F Vogel } 42413705f88SJack F Vogel return status; 42513705f88SJack F Vogel } 42613705f88SJack F Vogel 42713705f88SJack F Vogel /** 4289ca4041bSJack F Vogel * ixgbe_get_phy_firmware_version - 4299ca4041bSJack F Vogel * @hw: pointer to hardware structure 4309ca4041bSJack F Vogel * @firmware_version: pointer to firmware version 4319ca4041bSJack F Vogel **/ 4329ca4041bSJack F Vogel s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version) 4339ca4041bSJack F Vogel { 4349ca4041bSJack F Vogel s32 status = IXGBE_SUCCESS; 4359ca4041bSJack F Vogel 4369ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version, 4379ca4041bSJack F Vogel (hw, firmware_version), 4389ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 4399ca4041bSJack F Vogel return status; 4409ca4041bSJack F Vogel } 4419ca4041bSJack F Vogel 4429ca4041bSJack F Vogel /** 44313705f88SJack F Vogel * ixgbe_read_phy_reg - Read PHY register 44413705f88SJack F Vogel * @hw: pointer to hardware structure 44513705f88SJack F Vogel * @reg_addr: 32 bit address of PHY register to read 44613705f88SJack F Vogel * @phy_data: Pointer to read data from PHY register 44713705f88SJack F Vogel * 44813705f88SJack F Vogel * Reads a value from a specified PHY register 44913705f88SJack F Vogel **/ 45013705f88SJack F Vogel s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 45113705f88SJack F Vogel u16 *phy_data) 45213705f88SJack F Vogel { 4530ac6dfecSJack F Vogel if (hw->phy.id == 0) 4540ac6dfecSJack F Vogel ixgbe_identify_phy(hw); 4550ac6dfecSJack F Vogel 4569ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr, 4579ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 45813705f88SJack F Vogel } 45913705f88SJack F Vogel 46013705f88SJack F Vogel /** 46113705f88SJack F Vogel * ixgbe_write_phy_reg - Write PHY register 46213705f88SJack F Vogel * @hw: pointer to hardware structure 46313705f88SJack F Vogel * @reg_addr: 32 bit PHY register to write 46413705f88SJack F Vogel * @phy_data: Data to write to the PHY register 46513705f88SJack F Vogel * 46613705f88SJack F Vogel * Writes a value to specified PHY register 46713705f88SJack F Vogel **/ 46813705f88SJack F Vogel s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 46913705f88SJack F Vogel u16 phy_data) 47013705f88SJack F Vogel { 4710ac6dfecSJack F Vogel if (hw->phy.id == 0) 4720ac6dfecSJack F Vogel ixgbe_identify_phy(hw); 4730ac6dfecSJack F Vogel 4749ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr, 4759ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 47613705f88SJack F Vogel } 47713705f88SJack F Vogel 4789ca4041bSJack F Vogel /** 4799ca4041bSJack F Vogel * ixgbe_setup_phy_link - Restart PHY autoneg 4809ca4041bSJack F Vogel * @hw: pointer to hardware structure 4819ca4041bSJack F Vogel * 4829ca4041bSJack F Vogel * Restart autonegotiation and PHY and waits for completion. 4839ca4041bSJack F Vogel **/ 4849ca4041bSJack F Vogel s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw) 4859ca4041bSJack F Vogel { 4869ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw), 48713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 48813705f88SJack F Vogel } 4899ca4041bSJack F Vogel 4909ca4041bSJack F Vogel /** 4919ca4041bSJack F Vogel * ixgbe_check_phy_link - Determine link and speed status 4929ca4041bSJack F Vogel * @hw: pointer to hardware structure 4939ca4041bSJack F Vogel * 4949ca4041bSJack F Vogel * Reads a PHY register to determine if link is up and the current speed for 4959ca4041bSJack F Vogel * the PHY. 4969ca4041bSJack F Vogel **/ 4979ca4041bSJack F Vogel s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 4989ca4041bSJack F Vogel bool *link_up) 4999ca4041bSJack F Vogel { 5009ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed, 5019ca4041bSJack F Vogel link_up), IXGBE_NOT_IMPLEMENTED); 5029ca4041bSJack F Vogel } 5039ca4041bSJack F Vogel 5049ca4041bSJack F Vogel /** 5059ca4041bSJack F Vogel * ixgbe_setup_phy_link_speed - Set auto advertise 5069ca4041bSJack F Vogel * @hw: pointer to hardware structure 5079ca4041bSJack F Vogel * @speed: new link speed 5089ca4041bSJack F Vogel * @autoneg: TRUE if autonegotiation enabled 5099ca4041bSJack F Vogel * 5109ca4041bSJack F Vogel * Sets the auto advertised capabilities 5119ca4041bSJack F Vogel **/ 5129ca4041bSJack F Vogel s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed, 5139ca4041bSJack F Vogel bool autoneg, 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, 5179ca4041bSJack F Vogel autoneg, 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 * @autoneg: TRUE if autonegotiation enabled 57813705f88SJack F Vogel * 5792969bf0eSJack F Vogel * Configures link settings. Restarts the link. 5802969bf0eSJack F Vogel * Performs autonegotiation if needed. 58113705f88SJack F Vogel **/ 5822969bf0eSJack F Vogel s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed, 58313705f88SJack F Vogel bool autoneg, 58413705f88SJack F Vogel bool autoneg_wait_to_complete) 58513705f88SJack F Vogel { 5862969bf0eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw, speed, 58713705f88SJack F Vogel autoneg, autoneg_wait_to_complete), 58813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 58913705f88SJack F Vogel } 59013705f88SJack F Vogel 59113705f88SJack F Vogel /** 5929ca4041bSJack F Vogel * ixgbe_get_link_capabilities - Returns link capabilities 59313705f88SJack F Vogel * @hw: pointer to hardware structure 59413705f88SJack F Vogel * 5959ca4041bSJack F Vogel * Determines the link capabilities of the current configuration. 59613705f88SJack F Vogel **/ 5979ca4041bSJack F Vogel s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 59813705f88SJack F Vogel bool *autoneg) 59913705f88SJack F Vogel { 6009ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw, 6019ca4041bSJack F Vogel speed, autoneg), IXGBE_NOT_IMPLEMENTED); 60213705f88SJack F Vogel } 60313705f88SJack F Vogel 60413705f88SJack F Vogel /** 6059ca4041bSJack F Vogel * ixgbe_led_on - Turn on LEDs 60613705f88SJack F Vogel * @hw: pointer to hardware structure 60713705f88SJack F Vogel * @index: led number to turn on 60813705f88SJack F Vogel * 60913705f88SJack F Vogel * Turns on the software controllable LEDs. 61013705f88SJack F Vogel **/ 61113705f88SJack F Vogel s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index) 61213705f88SJack F Vogel { 6139ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index), 61413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 61513705f88SJack F Vogel } 61613705f88SJack F Vogel 61713705f88SJack F Vogel /** 6189ca4041bSJack F Vogel * ixgbe_led_off - Turn off LEDs 61913705f88SJack F Vogel * @hw: pointer to hardware structure 62013705f88SJack F Vogel * @index: led number to turn off 62113705f88SJack F Vogel * 62213705f88SJack F Vogel * Turns off the software controllable LEDs. 62313705f88SJack F Vogel **/ 62413705f88SJack F Vogel s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index) 62513705f88SJack F Vogel { 6269ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index), 62713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 62813705f88SJack F Vogel } 62913705f88SJack F Vogel 63013705f88SJack F Vogel /** 6319ca4041bSJack F Vogel * ixgbe_blink_led_start - Blink LEDs 63213705f88SJack F Vogel * @hw: pointer to hardware structure 63313705f88SJack F Vogel * @index: led number to blink 63413705f88SJack F Vogel * 63513705f88SJack F Vogel * Blink LED based on index. 63613705f88SJack F Vogel **/ 63713705f88SJack F Vogel s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index) 63813705f88SJack F Vogel { 6399ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index), 64013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 64113705f88SJack F Vogel } 64213705f88SJack F Vogel 64313705f88SJack F Vogel /** 6449ca4041bSJack F Vogel * ixgbe_blink_led_stop - Stop blinking LEDs 64513705f88SJack F Vogel * @hw: pointer to hardware structure 64613705f88SJack F Vogel * 64713705f88SJack F Vogel * Stop blinking LED based on index. 64813705f88SJack F Vogel **/ 64913705f88SJack F Vogel s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index) 65013705f88SJack F Vogel { 6519ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index), 65213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 65313705f88SJack F Vogel } 65413705f88SJack F Vogel 65513705f88SJack F Vogel /** 6569ca4041bSJack F Vogel * ixgbe_init_eeprom_params - Initialize EEPROM parameters 65713705f88SJack F Vogel * @hw: pointer to hardware structure 65813705f88SJack F Vogel * 65913705f88SJack F Vogel * Initializes the EEPROM parameters ixgbe_eeprom_info within the 66013705f88SJack F Vogel * ixgbe_hw struct in order to set up EEPROM access. 66113705f88SJack F Vogel **/ 66213705f88SJack F Vogel s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw) 66313705f88SJack F Vogel { 6649ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw), 66513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 66613705f88SJack F Vogel } 66713705f88SJack F Vogel 66813705f88SJack F Vogel 66913705f88SJack F Vogel /** 67013705f88SJack F Vogel * ixgbe_write_eeprom - Write word to EEPROM 67113705f88SJack F Vogel * @hw: pointer to hardware structure 67213705f88SJack F Vogel * @offset: offset within the EEPROM to be written to 67313705f88SJack F Vogel * @data: 16 bit word to be written to the EEPROM 67413705f88SJack F Vogel * 67513705f88SJack F Vogel * Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not 67613705f88SJack F Vogel * called after this function, the EEPROM will most likely contain an 67713705f88SJack F Vogel * invalid checksum. 67813705f88SJack F Vogel **/ 67913705f88SJack F Vogel s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data) 68013705f88SJack F Vogel { 6819ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data), 68213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 68313705f88SJack F Vogel } 68413705f88SJack F Vogel 68513705f88SJack F Vogel /** 68685d0a26eSJack F Vogel * ixgbe_write_eeprom_buffer - Write word(s) to EEPROM 68785d0a26eSJack F Vogel * @hw: pointer to hardware structure 68885d0a26eSJack F Vogel * @offset: offset within the EEPROM to be written to 68985d0a26eSJack F Vogel * @data: 16 bit word(s) to be written to the EEPROM 69085d0a26eSJack F Vogel * @words: number of words 69185d0a26eSJack F Vogel * 69285d0a26eSJack F Vogel * Writes 16 bit word(s) to EEPROM. If ixgbe_eeprom_update_checksum is not 69385d0a26eSJack F Vogel * called after this function, the EEPROM will most likely contain an 69485d0a26eSJack F Vogel * invalid checksum. 69585d0a26eSJack F Vogel **/ 69685d0a26eSJack F Vogel s32 ixgbe_write_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, u16 words, 69785d0a26eSJack F Vogel u16 *data) 69885d0a26eSJack F Vogel { 69985d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.write_buffer, 70085d0a26eSJack F Vogel (hw, offset, words, data), 70185d0a26eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 70285d0a26eSJack F Vogel } 70385d0a26eSJack F Vogel 70485d0a26eSJack F Vogel /** 70513705f88SJack F Vogel * ixgbe_read_eeprom - Read word from EEPROM 70613705f88SJack F Vogel * @hw: pointer to hardware structure 70713705f88SJack F Vogel * @offset: offset within the EEPROM to be read 70813705f88SJack F Vogel * @data: read 16 bit value from EEPROM 70913705f88SJack F Vogel * 71013705f88SJack F Vogel * Reads 16 bit value from EEPROM 71113705f88SJack F Vogel **/ 71213705f88SJack F Vogel s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data) 71313705f88SJack F Vogel { 7149ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data), 71513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 71613705f88SJack F Vogel } 71713705f88SJack F Vogel 71813705f88SJack F Vogel /** 71985d0a26eSJack F Vogel * ixgbe_read_eeprom_buffer - Read word(s) from EEPROM 72085d0a26eSJack F Vogel * @hw: pointer to hardware structure 72185d0a26eSJack F Vogel * @offset: offset within the EEPROM to be read 72285d0a26eSJack F Vogel * @data: read 16 bit word(s) from EEPROM 72385d0a26eSJack F Vogel * @words: number of words 72485d0a26eSJack F Vogel * 72585d0a26eSJack F Vogel * Reads 16 bit word(s) from EEPROM 72685d0a26eSJack F Vogel **/ 72785d0a26eSJack F Vogel s32 ixgbe_read_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, 72885d0a26eSJack F Vogel u16 words, u16 *data) 72985d0a26eSJack F Vogel { 73085d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.read_buffer, 73185d0a26eSJack F Vogel (hw, offset, words, data), 73285d0a26eSJack F Vogel IXGBE_NOT_IMPLEMENTED); 73385d0a26eSJack F Vogel } 73485d0a26eSJack F Vogel 73585d0a26eSJack F Vogel /** 73613705f88SJack F Vogel * ixgbe_validate_eeprom_checksum - Validate EEPROM checksum 73713705f88SJack F Vogel * @hw: pointer to hardware structure 73813705f88SJack F Vogel * @checksum_val: calculated checksum 73913705f88SJack F Vogel * 74013705f88SJack F Vogel * Performs checksum calculation and validates the EEPROM checksum 74113705f88SJack F Vogel **/ 74213705f88SJack F Vogel s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val) 74313705f88SJack F Vogel { 7449ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum, 74513705f88SJack F Vogel (hw, checksum_val), IXGBE_NOT_IMPLEMENTED); 74613705f88SJack F Vogel } 74713705f88SJack F Vogel 74813705f88SJack F Vogel /** 74913705f88SJack F Vogel * ixgbe_eeprom_update_checksum - Updates the EEPROM checksum 75013705f88SJack F Vogel * @hw: pointer to hardware structure 75113705f88SJack F Vogel **/ 75213705f88SJack F Vogel s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw) 75313705f88SJack F Vogel { 7549ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw), 75513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 75613705f88SJack F Vogel } 75713705f88SJack F Vogel 75813705f88SJack F Vogel /** 7590ac6dfecSJack F Vogel * ixgbe_insert_mac_addr - Find a RAR for this mac address 7600ac6dfecSJack F Vogel * @hw: pointer to hardware structure 7610ac6dfecSJack F Vogel * @addr: Address to put into receive address register 7620ac6dfecSJack F Vogel * @vmdq: VMDq pool to assign 7630ac6dfecSJack F Vogel * 7640ac6dfecSJack F Vogel * Puts an ethernet address into a receive address register, or 7650ac6dfecSJack F Vogel * finds the rar that it is aleady in; adds to the pool list 7660ac6dfecSJack F Vogel **/ 7670ac6dfecSJack F Vogel s32 ixgbe_insert_mac_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq) 7680ac6dfecSJack F Vogel { 7690ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.insert_mac_addr, 7700ac6dfecSJack F Vogel (hw, addr, vmdq), 7710ac6dfecSJack F Vogel IXGBE_NOT_IMPLEMENTED); 7720ac6dfecSJack F Vogel } 7730ac6dfecSJack F Vogel 7740ac6dfecSJack F Vogel /** 7759ca4041bSJack F Vogel * ixgbe_set_rar - Set Rx address register 77613705f88SJack F Vogel * @hw: pointer to hardware structure 77713705f88SJack F Vogel * @index: Receive address register to write 7789ca4041bSJack F Vogel * @addr: Address to put into receive address register 7799ca4041bSJack F Vogel * @vmdq: VMDq "set" 78013705f88SJack F Vogel * @enable_addr: set flag that address is active 78113705f88SJack F Vogel * 78213705f88SJack F Vogel * Puts an ethernet address into a receive address register. 78313705f88SJack F Vogel **/ 7849ca4041bSJack F Vogel s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq, 78513705f88SJack F Vogel u32 enable_addr) 78613705f88SJack F Vogel { 7879ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq, 78813705f88SJack F Vogel enable_addr), IXGBE_NOT_IMPLEMENTED); 78913705f88SJack F Vogel } 79013705f88SJack F Vogel 79113705f88SJack F Vogel /** 7925b7f4cedSJack F Vogel * ixgbe_clear_rar - Clear Rx address register 7935b7f4cedSJack F Vogel * @hw: pointer to hardware structure 7945b7f4cedSJack F Vogel * @index: Receive address register to write 7955b7f4cedSJack F Vogel * 7965b7f4cedSJack F Vogel * Puts an ethernet address into a receive address register. 7975b7f4cedSJack F Vogel **/ 7985b7f4cedSJack F Vogel s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index) 7995b7f4cedSJack F Vogel { 8005b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index), 8015b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 8025b7f4cedSJack F Vogel } 8035b7f4cedSJack F Vogel 8045b7f4cedSJack F Vogel /** 8059ca4041bSJack F Vogel * ixgbe_set_vmdq - Associate a VMDq index with a receive address 8069ca4041bSJack F Vogel * @hw: pointer to hardware structure 8079ca4041bSJack F Vogel * @rar: receive address register index to associate with VMDq index 8089ca4041bSJack F Vogel * @vmdq: VMDq set or pool index 8099ca4041bSJack F Vogel **/ 8109ca4041bSJack F Vogel s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 8119ca4041bSJack F Vogel { 8129ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq), 8139ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 8149ca4041bSJack F Vogel } 8159ca4041bSJack F Vogel 8169ca4041bSJack F Vogel /** 8175b7f4cedSJack F Vogel * ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address 8185b7f4cedSJack F Vogel * @hw: pointer to hardware structure 8195b7f4cedSJack F Vogel * @rar: receive address register index to disassociate with VMDq index 8205b7f4cedSJack F Vogel * @vmdq: VMDq set or pool index 8215b7f4cedSJack F Vogel **/ 8225b7f4cedSJack F Vogel s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 8235b7f4cedSJack F Vogel { 8245b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq), 8255b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 8265b7f4cedSJack F Vogel } 8275b7f4cedSJack F Vogel 8285b7f4cedSJack F Vogel /** 82913705f88SJack F Vogel * ixgbe_init_rx_addrs - Initializes receive address filters. 83013705f88SJack F Vogel * @hw: pointer to hardware structure 83113705f88SJack F Vogel * 83213705f88SJack F Vogel * Places the MAC address in receive address register 0 and clears the rest 8339ca4041bSJack F Vogel * of the receive address registers. Clears the multicast table. Assumes 83413705f88SJack F Vogel * the receiver is in reset when the routine is called. 83513705f88SJack F Vogel **/ 83613705f88SJack F Vogel s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw) 83713705f88SJack F Vogel { 8389ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw), 83913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 84013705f88SJack F Vogel } 84113705f88SJack F Vogel 84213705f88SJack F Vogel /** 84313705f88SJack F Vogel * ixgbe_get_num_rx_addrs - Returns the number of RAR entries. 84413705f88SJack F Vogel * @hw: pointer to hardware structure 84513705f88SJack F Vogel **/ 84613705f88SJack F Vogel u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw) 84713705f88SJack F Vogel { 8489ca4041bSJack F Vogel return hw->mac.num_rar_entries; 8499ca4041bSJack F Vogel } 8509ca4041bSJack F Vogel 8519ca4041bSJack F Vogel /** 8529ca4041bSJack F Vogel * ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses 8539ca4041bSJack F Vogel * @hw: pointer to hardware structure 8549ca4041bSJack F Vogel * @addr_list: the list of new multicast addresses 8559ca4041bSJack F Vogel * @addr_count: number of addresses 8569ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 8579ca4041bSJack F Vogel * 8589ca4041bSJack F Vogel * The given list replaces any existing list. Clears the secondary addrs from 8599ca4041bSJack F Vogel * receive address registers. Uses unused receive address registers for the 8609ca4041bSJack F Vogel * first secondary addresses, and falls back to promiscuous mode as needed. 8619ca4041bSJack F Vogel **/ 8629ca4041bSJack F Vogel s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list, 8639ca4041bSJack F Vogel u32 addr_count, ixgbe_mc_addr_itr func) 8649ca4041bSJack F Vogel { 8659ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw, 8669ca4041bSJack F Vogel addr_list, addr_count, func), 8679ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 86813705f88SJack F Vogel } 86913705f88SJack F Vogel 87013705f88SJack F Vogel /** 87113705f88SJack F Vogel * ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses 87213705f88SJack F Vogel * @hw: pointer to hardware structure 87313705f88SJack F Vogel * @mc_addr_list: the list of new multicast addresses 87413705f88SJack F Vogel * @mc_addr_count: number of addresses 8759ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 87613705f88SJack F Vogel * 87713705f88SJack F Vogel * The given list replaces any existing list. Clears the MC addrs from receive 8789ca4041bSJack F Vogel * address registers and the multicast table. Uses unused receive address 87913705f88SJack F Vogel * registers for the first multicast addresses, and hashes the rest into the 88013705f88SJack F Vogel * multicast table. 88113705f88SJack F Vogel **/ 88213705f88SJack F Vogel s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list, 88385d0a26eSJack F Vogel u32 mc_addr_count, ixgbe_mc_addr_itr func, 88485d0a26eSJack F Vogel bool clear) 88513705f88SJack F Vogel { 8869ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw, 88785d0a26eSJack F Vogel mc_addr_list, mc_addr_count, func, clear), 88813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 88913705f88SJack F Vogel } 89013705f88SJack F Vogel 89113705f88SJack F Vogel /** 89213705f88SJack F Vogel * ixgbe_enable_mc - Enable multicast address in RAR 89313705f88SJack F Vogel * @hw: pointer to hardware structure 89413705f88SJack F Vogel * 89513705f88SJack F Vogel * Enables multicast address in RAR and the use of the multicast hash table. 89613705f88SJack F Vogel **/ 89713705f88SJack F Vogel s32 ixgbe_enable_mc(struct ixgbe_hw *hw) 89813705f88SJack F Vogel { 8999ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw), 90013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 90113705f88SJack F Vogel } 90213705f88SJack F Vogel 90313705f88SJack F Vogel /** 90413705f88SJack F Vogel * ixgbe_disable_mc - Disable multicast address in RAR 90513705f88SJack F Vogel * @hw: pointer to hardware structure 90613705f88SJack F Vogel * 90713705f88SJack F Vogel * Disables multicast address in RAR and the use of the multicast hash table. 90813705f88SJack F Vogel **/ 90913705f88SJack F Vogel s32 ixgbe_disable_mc(struct ixgbe_hw *hw) 91013705f88SJack F Vogel { 9119ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw), 91213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 91313705f88SJack F Vogel } 91413705f88SJack F Vogel 91513705f88SJack F Vogel /** 91613705f88SJack F Vogel * ixgbe_clear_vfta - Clear VLAN filter table 91713705f88SJack F Vogel * @hw: pointer to hardware structure 91813705f88SJack F Vogel * 91913705f88SJack F Vogel * Clears the VLAN filer table, and the VMDq index associated with the filter 92013705f88SJack F Vogel **/ 92113705f88SJack F Vogel s32 ixgbe_clear_vfta(struct ixgbe_hw *hw) 92213705f88SJack F Vogel { 9239ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw), 92413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 92513705f88SJack F Vogel } 92613705f88SJack F Vogel 92713705f88SJack F Vogel /** 92813705f88SJack F Vogel * ixgbe_set_vfta - Set VLAN filter table 92913705f88SJack F Vogel * @hw: pointer to hardware structure 93013705f88SJack F Vogel * @vlan: VLAN id to write to VLAN filter 93113705f88SJack F Vogel * @vind: VMDq output index that maps queue to VLAN id in VFTA 93213705f88SJack F Vogel * @vlan_on: boolean flag to turn on/off VLAN in VFTA 93313705f88SJack F Vogel * 93413705f88SJack F Vogel * Turn on/off specified VLAN in the VLAN filter table. 93513705f88SJack F Vogel **/ 93613705f88SJack F Vogel s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on) 93713705f88SJack F Vogel { 9389ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind, 93913705f88SJack F Vogel vlan_on), IXGBE_NOT_IMPLEMENTED); 94013705f88SJack F Vogel } 94113705f88SJack F Vogel 94213705f88SJack F Vogel /** 94385d0a26eSJack F Vogel * ixgbe_set_vlvf - Set VLAN Pool Filter 94485d0a26eSJack F Vogel * @hw: pointer to hardware structure 94585d0a26eSJack F Vogel * @vlan: VLAN id to write to VLAN filter 94685d0a26eSJack F Vogel * @vind: VMDq output index that maps queue to VLAN id in VFVFB 94785d0a26eSJack F Vogel * @vlan_on: boolean flag to turn on/off VLAN in VFVF 94885d0a26eSJack F Vogel * @vfta_changed: pointer to boolean flag which indicates whether VFTA 94985d0a26eSJack F Vogel * should be changed 95085d0a26eSJack F Vogel * 95185d0a26eSJack F Vogel * Turn on/off specified bit in VLVF table. 95285d0a26eSJack F Vogel **/ 95385d0a26eSJack F Vogel s32 ixgbe_set_vlvf(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on, 95485d0a26eSJack F Vogel bool *vfta_changed) 95585d0a26eSJack F Vogel { 95685d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vlvf, (hw, vlan, vind, 95785d0a26eSJack F Vogel vlan_on, vfta_changed), IXGBE_NOT_IMPLEMENTED); 95885d0a26eSJack F Vogel } 95985d0a26eSJack F Vogel 96085d0a26eSJack F Vogel /** 9610ac6dfecSJack F Vogel * ixgbe_fc_enable - Enable flow control 96213705f88SJack F Vogel * @hw: pointer to hardware structure 96313705f88SJack F Vogel * @packetbuf_num: packet buffer number (0-7) 96413705f88SJack F Vogel * 96513705f88SJack F Vogel * Configures the flow control settings based on SW configuration. 96613705f88SJack F Vogel **/ 9670ac6dfecSJack F Vogel s32 ixgbe_fc_enable(struct ixgbe_hw *hw, s32 packetbuf_num) 96813705f88SJack F Vogel { 9690ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.fc_enable, (hw, packetbuf_num), 97013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 97113705f88SJack F Vogel } 97213705f88SJack F Vogel 9733ec35e52SJack F Vogel /** 97485d0a26eSJack F Vogel * ixgbe_set_fw_drv_ver - Try to send the driver version number FW 97585d0a26eSJack F Vogel * @hw: pointer to hardware structure 97685d0a26eSJack F Vogel * @maj: driver major number to be sent to firmware 97785d0a26eSJack F Vogel * @min: driver minor number to be sent to firmware 97885d0a26eSJack F Vogel * @build: driver build number to be sent to firmware 97985d0a26eSJack F Vogel * @ver: driver version number to be sent to firmware 98085d0a26eSJack F Vogel **/ 98185d0a26eSJack F Vogel s32 ixgbe_set_fw_drv_ver(struct ixgbe_hw *hw, u8 maj, u8 min, u8 build, 98285d0a26eSJack F Vogel u8 ver) 98385d0a26eSJack F Vogel { 98485d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_fw_drv_ver, (hw, maj, min, 98585d0a26eSJack F Vogel build, ver), IXGBE_NOT_IMPLEMENTED); 98685d0a26eSJack F Vogel } 98785d0a26eSJack F Vogel 98885d0a26eSJack F Vogel 98985d0a26eSJack F Vogel /** 9903ec35e52SJack F Vogel * ixgbe_read_analog_reg8 - Reads 8 bit analog register 9913ec35e52SJack F Vogel * @hw: pointer to hardware structure 9923ec35e52SJack F Vogel * @reg: analog register to read 9933ec35e52SJack F Vogel * @val: read value 9943ec35e52SJack F Vogel * 9953ec35e52SJack F Vogel * Performs write operation to analog register specified. 9963ec35e52SJack F Vogel **/ 9973ec35e52SJack F Vogel s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val) 9983ec35e52SJack F Vogel { 9999ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg, 10009ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 10013ec35e52SJack F Vogel } 10023ec35e52SJack F Vogel 10033ec35e52SJack F Vogel /** 10043ec35e52SJack F Vogel * ixgbe_write_analog_reg8 - Writes 8 bit analog register 10053ec35e52SJack F Vogel * @hw: pointer to hardware structure 10063ec35e52SJack F Vogel * @reg: analog register to write 10073ec35e52SJack F Vogel * @val: value to write 10083ec35e52SJack F Vogel * 10093ec35e52SJack F Vogel * Performs write operation to Atlas analog register specified. 10103ec35e52SJack F Vogel **/ 10113ec35e52SJack F Vogel s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val) 10123ec35e52SJack F Vogel { 10139ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg, 10149ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 10153ec35e52SJack F Vogel } 10163ec35e52SJack F Vogel 10175b7f4cedSJack F Vogel /** 10185b7f4cedSJack F Vogel * ixgbe_init_uta_tables - Initializes Unicast Table Arrays. 10195b7f4cedSJack F Vogel * @hw: pointer to hardware structure 10205b7f4cedSJack F Vogel * 10215b7f4cedSJack F Vogel * Initializes the Unicast Table Arrays to zero on device load. This 10225b7f4cedSJack F Vogel * is part of the Rx init addr execution path. 10235b7f4cedSJack F Vogel **/ 10245b7f4cedSJack F Vogel s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw) 10255b7f4cedSJack F Vogel { 10265b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw), 10275b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 10285b7f4cedSJack F Vogel } 10291b6e0dbaSJack F Vogel 10301b6e0dbaSJack F Vogel /** 10310ac6dfecSJack F Vogel * ixgbe_read_i2c_byte - Reads 8 bit word over I2C at specified device address 10320ac6dfecSJack F Vogel * @hw: pointer to hardware structure 10330ac6dfecSJack F Vogel * @byte_offset: byte offset to read 10340ac6dfecSJack F Vogel * @data: value read 10350ac6dfecSJack F Vogel * 10360ac6dfecSJack F Vogel * Performs byte read operation to SFP module's EEPROM over I2C interface. 10370ac6dfecSJack F Vogel **/ 10380ac6dfecSJack F Vogel s32 ixgbe_read_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, 10390ac6dfecSJack F Vogel u8 *data) 10400ac6dfecSJack F Vogel { 10410ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte, (hw, byte_offset, 10420ac6dfecSJack F Vogel dev_addr, data), IXGBE_NOT_IMPLEMENTED); 10430ac6dfecSJack F Vogel } 10440ac6dfecSJack F Vogel 10450ac6dfecSJack F Vogel /** 10460ac6dfecSJack F Vogel * ixgbe_write_i2c_byte - Writes 8 bit word over I2C 10470ac6dfecSJack F Vogel * @hw: pointer to hardware structure 10480ac6dfecSJack F Vogel * @byte_offset: byte offset to write 10490ac6dfecSJack F Vogel * @data: value to write 10500ac6dfecSJack F Vogel * 10510ac6dfecSJack F Vogel * Performs byte write operation to SFP module's EEPROM over I2C interface 10520ac6dfecSJack F Vogel * at a specified device address. 10530ac6dfecSJack F Vogel **/ 10540ac6dfecSJack F Vogel s32 ixgbe_write_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, 10550ac6dfecSJack F Vogel u8 data) 10560ac6dfecSJack F Vogel { 10570ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte, (hw, byte_offset, 10580ac6dfecSJack F Vogel dev_addr, data), IXGBE_NOT_IMPLEMENTED); 10590ac6dfecSJack F Vogel } 10600ac6dfecSJack F Vogel 10610ac6dfecSJack F Vogel /** 10620ac6dfecSJack F Vogel * ixgbe_write_i2c_eeprom - Writes 8 bit EEPROM word over I2C interface 10630ac6dfecSJack F Vogel * @hw: pointer to hardware structure 10640ac6dfecSJack F Vogel * @byte_offset: EEPROM byte offset to write 10650ac6dfecSJack F Vogel * @eeprom_data: value to write 10660ac6dfecSJack F Vogel * 10670ac6dfecSJack F Vogel * Performs byte write operation to SFP module's EEPROM over I2C interface. 10680ac6dfecSJack F Vogel **/ 10690ac6dfecSJack F Vogel s32 ixgbe_write_i2c_eeprom(struct ixgbe_hw *hw, 10700ac6dfecSJack F Vogel u8 byte_offset, u8 eeprom_data) 10710ac6dfecSJack F Vogel { 10720ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_i2c_eeprom, 10730ac6dfecSJack F Vogel (hw, byte_offset, eeprom_data), 10740ac6dfecSJack F Vogel IXGBE_NOT_IMPLEMENTED); 10750ac6dfecSJack F Vogel } 10760ac6dfecSJack F Vogel 10770ac6dfecSJack F Vogel /** 10781b6e0dbaSJack F Vogel * ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface 10791b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 10801b6e0dbaSJack F Vogel * @byte_offset: EEPROM byte offset to read 10811b6e0dbaSJack F Vogel * @eeprom_data: value read 10821b6e0dbaSJack F Vogel * 10831b6e0dbaSJack F Vogel * Performs byte read operation to SFP module's EEPROM over I2C interface. 10841b6e0dbaSJack F Vogel **/ 10851b6e0dbaSJack F Vogel s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data) 10861b6e0dbaSJack F Vogel { 10871b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom, 10881b6e0dbaSJack F Vogel (hw, byte_offset, eeprom_data), 10891b6e0dbaSJack F Vogel IXGBE_NOT_IMPLEMENTED); 10901b6e0dbaSJack F Vogel } 10911b6e0dbaSJack F Vogel 10921b6e0dbaSJack F Vogel /** 10931b6e0dbaSJack F Vogel * ixgbe_get_supported_physical_layer - Returns physical layer type 10941b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 10951b6e0dbaSJack F Vogel * 10961b6e0dbaSJack F Vogel * Determines physical layer capabilities of the current configuration. 10971b6e0dbaSJack F Vogel **/ 10981b6e0dbaSJack F Vogel u32 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw) 10991b6e0dbaSJack F Vogel { 11001b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer, 11011b6e0dbaSJack F Vogel (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN); 11021b6e0dbaSJack F Vogel } 11030ac6dfecSJack F Vogel 11040ac6dfecSJack F Vogel /** 11050ac6dfecSJack F Vogel * ixgbe_enable_rx_dma - Enables Rx DMA unit, dependant on device specifics 11060ac6dfecSJack F Vogel * @hw: pointer to hardware structure 11070ac6dfecSJack F Vogel * @regval: bitfield to write to the Rx DMA register 11080ac6dfecSJack F Vogel * 11090ac6dfecSJack F Vogel * Enables the Rx DMA unit of the device. 11100ac6dfecSJack F Vogel **/ 11110ac6dfecSJack F Vogel s32 ixgbe_enable_rx_dma(struct ixgbe_hw *hw, u32 regval) 11120ac6dfecSJack F Vogel { 11130ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_rx_dma, 11140ac6dfecSJack F Vogel (hw, regval), IXGBE_NOT_IMPLEMENTED); 11150ac6dfecSJack F Vogel } 1116d8602bb9SJack F Vogel 1117d8602bb9SJack F Vogel /** 111885d0a26eSJack F Vogel * ixgbe_disable_sec_rx_path - Stops the receive data path 111985d0a26eSJack F Vogel * @hw: pointer to hardware structure 112085d0a26eSJack F Vogel * 112185d0a26eSJack F Vogel * Stops the receive data path. 112285d0a26eSJack F Vogel **/ 112385d0a26eSJack F Vogel s32 ixgbe_disable_sec_rx_path(struct ixgbe_hw *hw) 112485d0a26eSJack F Vogel { 112585d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.disable_sec_rx_path, 112685d0a26eSJack F Vogel (hw), IXGBE_NOT_IMPLEMENTED); 112785d0a26eSJack F Vogel } 112885d0a26eSJack F Vogel 112985d0a26eSJack F Vogel /** 113085d0a26eSJack F Vogel * ixgbe_enable_sec_rx_path - Enables the receive data path 113185d0a26eSJack F Vogel * @hw: pointer to hardware structure 113285d0a26eSJack F Vogel * 113385d0a26eSJack F Vogel * Enables the receive data path. 113485d0a26eSJack F Vogel **/ 113585d0a26eSJack F Vogel s32 ixgbe_enable_sec_rx_path(struct ixgbe_hw *hw) 113685d0a26eSJack F Vogel { 113785d0a26eSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_sec_rx_path, 113885d0a26eSJack F Vogel (hw), IXGBE_NOT_IMPLEMENTED); 113985d0a26eSJack F Vogel } 114085d0a26eSJack F Vogel 114185d0a26eSJack F Vogel /** 1142d8602bb9SJack F Vogel * ixgbe_acquire_swfw_semaphore - Acquire SWFW semaphore 1143d8602bb9SJack F Vogel * @hw: pointer to hardware structure 1144d8602bb9SJack F Vogel * @mask: Mask to specify which semaphore to acquire 1145d8602bb9SJack F Vogel * 1146d8602bb9SJack F Vogel * Acquires the SWFW semaphore through SW_FW_SYNC register for the specified 1147d8602bb9SJack F Vogel * function (CSR, PHY0, PHY1, EEPROM, Flash) 1148d8602bb9SJack F Vogel **/ 1149d8602bb9SJack F Vogel s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u16 mask) 1150d8602bb9SJack F Vogel { 1151d8602bb9SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.acquire_swfw_sync, 1152d8602bb9SJack F Vogel (hw, mask), IXGBE_NOT_IMPLEMENTED); 1153d8602bb9SJack F Vogel } 1154d8602bb9SJack F Vogel 1155d8602bb9SJack F Vogel /** 1156d8602bb9SJack F Vogel * ixgbe_release_swfw_semaphore - Release SWFW semaphore 1157d8602bb9SJack F Vogel * @hw: pointer to hardware structure 1158d8602bb9SJack F Vogel * @mask: Mask to specify which semaphore to release 1159d8602bb9SJack F Vogel * 1160d8602bb9SJack F Vogel * Releases the SWFW semaphore through SW_FW_SYNC register for the specified 1161d8602bb9SJack F Vogel * function (CSR, PHY0, PHY1, EEPROM, Flash) 1162d8602bb9SJack F Vogel **/ 1163d8602bb9SJack F Vogel void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u16 mask) 1164d8602bb9SJack F Vogel { 1165d8602bb9SJack F Vogel if (hw->mac.ops.release_swfw_sync) 1166d8602bb9SJack F Vogel hw->mac.ops.release_swfw_sync(hw, mask); 1167d8602bb9SJack F Vogel } 1168d8602bb9SJack F Vogel 1169