19ca4041bSJack F Vogel /****************************************************************************** 213705f88SJack F Vogel 30ac6dfecSJack F Vogel Copyright (c) 2001-2009, 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 389ca4041bSJack F Vogel extern s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw); 390ac6dfecSJack F Vogel extern s32 ixgbe_init_ops_82599(struct ixgbe_hw *hw); 4013705f88SJack F Vogel 4113705f88SJack F Vogel /** 4213705f88SJack F Vogel * ixgbe_init_shared_code - Initialize the shared code 4313705f88SJack F Vogel * @hw: pointer to hardware structure 4413705f88SJack F Vogel * 4513705f88SJack F Vogel * This will assign function pointers and assign the MAC type and PHY code. 4613705f88SJack F Vogel * Does not touch the hardware. This function must be called prior to any 4713705f88SJack F Vogel * other function in the shared code. The ixgbe_hw structure should be 4813705f88SJack F Vogel * memset to 0 prior to calling this function. The following fields in 4913705f88SJack F Vogel * hw structure should be filled in prior to calling this function: 5013705f88SJack F Vogel * hw_addr, back, device_id, vendor_id, subsystem_device_id, 5113705f88SJack F Vogel * subsystem_vendor_id, and revision_id 5213705f88SJack F Vogel **/ 5313705f88SJack F Vogel s32 ixgbe_init_shared_code(struct ixgbe_hw *hw) 5413705f88SJack F Vogel { 553ec35e52SJack F Vogel s32 status; 5613705f88SJack F Vogel 5713705f88SJack F Vogel /* 583ec35e52SJack F Vogel * Set the mac type 593ec35e52SJack F Vogel */ 603ec35e52SJack F Vogel ixgbe_set_mac_type(hw); 613ec35e52SJack F Vogel 623ec35e52SJack F Vogel switch (hw->mac.type) { 633ec35e52SJack F Vogel case ixgbe_mac_82598EB: 649ca4041bSJack F Vogel status = ixgbe_init_ops_82598(hw); 6513705f88SJack F Vogel break; 660ac6dfecSJack F Vogel case ixgbe_mac_82599EB: 670ac6dfecSJack F Vogel status = ixgbe_init_ops_82599(hw); 680ac6dfecSJack F Vogel break; 6913705f88SJack F Vogel default: 7013705f88SJack F Vogel status = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 7113705f88SJack F Vogel break; 7213705f88SJack F Vogel } 7313705f88SJack F Vogel 7413705f88SJack F Vogel return status; 7513705f88SJack F Vogel } 7613705f88SJack F Vogel 7713705f88SJack F Vogel /** 783ec35e52SJack F Vogel * ixgbe_set_mac_type - Sets MAC type 793ec35e52SJack F Vogel * @hw: pointer to the HW structure 803ec35e52SJack F Vogel * 813ec35e52SJack F Vogel * This function sets the mac type of the adapter based on the 823ec35e52SJack F Vogel * vendor ID and device ID stored in the hw structure. 833ec35e52SJack F Vogel **/ 843ec35e52SJack F Vogel s32 ixgbe_set_mac_type(struct ixgbe_hw *hw) 853ec35e52SJack F Vogel { 863ec35e52SJack F Vogel s32 ret_val = IXGBE_SUCCESS; 873ec35e52SJack F Vogel 889ca4041bSJack F Vogel DEBUGFUNC("ixgbe_set_mac_type\n"); 893ec35e52SJack F Vogel 903ec35e52SJack F Vogel if (hw->vendor_id == IXGBE_INTEL_VENDOR_ID) { 913ec35e52SJack F Vogel switch (hw->device_id) { 921b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598: 930ac6dfecSJack F Vogel case IXGBE_DEV_ID_82598_BX: 943ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_SINGLE_PORT: 953ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_DUAL_PORT: 969ca4041bSJack F Vogel case IXGBE_DEV_ID_82598AT: 973ec35e52SJack F Vogel case IXGBE_DEV_ID_82598EB_CX4: 989ca4041bSJack F Vogel case IXGBE_DEV_ID_82598_CX4_DUAL_PORT: 991b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_DA_DUAL_PORT: 1001b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM: 1019ca4041bSJack F Vogel case IXGBE_DEV_ID_82598EB_XF_LR: 1021b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598EB_SFP_LOM: 1033ec35e52SJack F Vogel hw->mac.type = ixgbe_mac_82598EB; 1043ec35e52SJack F Vogel break; 1050ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_KX4: 106d8602bb9SJack F Vogel case IXGBE_DEV_ID_82599_XAUI_LOM: 1070ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_SFP: 1080ac6dfecSJack F Vogel case IXGBE_DEV_ID_82599_CX4: 1090ac6dfecSJack F Vogel hw->mac.type = ixgbe_mac_82599EB; 1100ac6dfecSJack F Vogel break; 1113ec35e52SJack F Vogel default: 1123ec35e52SJack F Vogel ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 1133ec35e52SJack F Vogel break; 1143ec35e52SJack F Vogel } 1153ec35e52SJack F Vogel } else { 1163ec35e52SJack F Vogel ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 1173ec35e52SJack F Vogel } 1183ec35e52SJack F Vogel 1199ca4041bSJack F Vogel DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n", 1209ca4041bSJack F Vogel hw->mac.type, ret_val); 1213ec35e52SJack F Vogel return ret_val; 1223ec35e52SJack F Vogel } 1233ec35e52SJack F Vogel 1243ec35e52SJack F Vogel /** 12513705f88SJack F Vogel * ixgbe_init_hw - Initialize the hardware 12613705f88SJack F Vogel * @hw: pointer to hardware structure 12713705f88SJack F Vogel * 12813705f88SJack F Vogel * Initialize the hardware by resetting and then starting the hardware 12913705f88SJack F Vogel **/ 13013705f88SJack F Vogel s32 ixgbe_init_hw(struct ixgbe_hw *hw) 13113705f88SJack F Vogel { 1329ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw), 13313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 13413705f88SJack F Vogel } 13513705f88SJack F Vogel 13613705f88SJack F Vogel /** 13713705f88SJack F Vogel * ixgbe_reset_hw - Performs a hardware reset 13813705f88SJack F Vogel * @hw: pointer to hardware structure 13913705f88SJack F Vogel * 14013705f88SJack F Vogel * Resets the hardware by resetting the transmit and receive units, masks and 14113705f88SJack F Vogel * clears all interrupts, performs a PHY reset, and performs a MAC reset 14213705f88SJack F Vogel **/ 14313705f88SJack F Vogel s32 ixgbe_reset_hw(struct ixgbe_hw *hw) 14413705f88SJack F Vogel { 1459ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw), 14613705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 14713705f88SJack F Vogel } 14813705f88SJack F Vogel 14913705f88SJack F Vogel /** 1509ca4041bSJack F Vogel * ixgbe_start_hw - Prepares hardware for Rx/Tx 15113705f88SJack F Vogel * @hw: pointer to hardware structure 15213705f88SJack F Vogel * 15313705f88SJack F Vogel * Starts the hardware by filling the bus info structure and media type, 15413705f88SJack F Vogel * clears all on chip counters, initializes receive address registers, 15513705f88SJack F Vogel * multicast table, VLAN filter table, calls routine to setup link and 15613705f88SJack F Vogel * flow control settings, and leaves transmit and receive units disabled 15713705f88SJack F Vogel * and uninitialized. 15813705f88SJack F Vogel **/ 15913705f88SJack F Vogel s32 ixgbe_start_hw(struct ixgbe_hw *hw) 16013705f88SJack F Vogel { 1619ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw), 16213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 16313705f88SJack F Vogel } 16413705f88SJack F Vogel 16513705f88SJack F Vogel /** 16613705f88SJack F Vogel * ixgbe_clear_hw_cntrs - Clear hardware counters 16713705f88SJack F Vogel * @hw: pointer to hardware structure 16813705f88SJack F Vogel * 16913705f88SJack F Vogel * Clears all hardware statistics counters by reading them from the hardware 17013705f88SJack F Vogel * Statistics counters are clear on read. 17113705f88SJack F Vogel **/ 17213705f88SJack F Vogel s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw) 17313705f88SJack F Vogel { 1749ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw), 17513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 17613705f88SJack F Vogel } 17713705f88SJack F Vogel 17813705f88SJack F Vogel /** 17913705f88SJack F Vogel * ixgbe_get_media_type - Get media type 18013705f88SJack F Vogel * @hw: pointer to hardware structure 18113705f88SJack F Vogel * 18213705f88SJack F Vogel * Returns the media type (fiber, copper, backplane) 18313705f88SJack F Vogel **/ 18413705f88SJack F Vogel enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw) 18513705f88SJack F Vogel { 1869ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw), 18713705f88SJack F Vogel ixgbe_media_type_unknown); 18813705f88SJack F Vogel } 18913705f88SJack F Vogel 19013705f88SJack F Vogel /** 19113705f88SJack F Vogel * ixgbe_get_mac_addr - Get MAC address 19213705f88SJack F Vogel * @hw: pointer to hardware structure 19313705f88SJack F Vogel * @mac_addr: Adapter MAC address 19413705f88SJack F Vogel * 19513705f88SJack F Vogel * Reads the adapter's MAC address from the first Receive Address Register 1969ca4041bSJack F Vogel * (RAR0) A reset of the adapter must have been performed prior to calling 1979ca4041bSJack F Vogel * this function in order for the MAC address to have been loaded from the 1989ca4041bSJack F Vogel * EEPROM into RAR0 19913705f88SJack F Vogel **/ 20013705f88SJack F Vogel s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr) 20113705f88SJack F Vogel { 2029ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr, 20313705f88SJack F Vogel (hw, mac_addr), IXGBE_NOT_IMPLEMENTED); 20413705f88SJack F Vogel } 20513705f88SJack F Vogel 20613705f88SJack F Vogel /** 2070ac6dfecSJack F Vogel * ixgbe_get_san_mac_addr - Get SAN MAC address 2080ac6dfecSJack F Vogel * @hw: pointer to hardware structure 2090ac6dfecSJack F Vogel * @san_mac_addr: SAN MAC address 2100ac6dfecSJack F Vogel * 2110ac6dfecSJack F Vogel * Reads the SAN MAC address from the EEPROM, if it's available. This is 2120ac6dfecSJack F Vogel * per-port, so set_lan_id() must be called before reading the addresses. 2130ac6dfecSJack F Vogel **/ 2140ac6dfecSJack F Vogel s32 ixgbe_get_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr) 2150ac6dfecSJack F Vogel { 2160ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_san_mac_addr, 2170ac6dfecSJack F Vogel (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED); 2180ac6dfecSJack F Vogel } 2190ac6dfecSJack F Vogel 2200ac6dfecSJack F Vogel /** 2210ac6dfecSJack F Vogel * ixgbe_set_san_mac_addr - Write a SAN MAC address 2220ac6dfecSJack F Vogel * @hw: pointer to hardware structure 2230ac6dfecSJack F Vogel * @san_mac_addr: SAN MAC address 2240ac6dfecSJack F Vogel * 2250ac6dfecSJack F Vogel * Writes A SAN MAC address to the EEPROM. 2260ac6dfecSJack F Vogel **/ 2270ac6dfecSJack F Vogel s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr) 2280ac6dfecSJack F Vogel { 2290ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_san_mac_addr, 2300ac6dfecSJack F Vogel (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED); 2310ac6dfecSJack F Vogel } 2320ac6dfecSJack F Vogel 2330ac6dfecSJack F Vogel /** 2340ac6dfecSJack F Vogel * ixgbe_get_device_caps - Get additional device capabilities 2350ac6dfecSJack F Vogel * @hw: pointer to hardware structure 2360ac6dfecSJack F Vogel * @device_caps: the EEPROM word for device capabilities 2370ac6dfecSJack F Vogel * 2380ac6dfecSJack F Vogel * Reads the extra device capabilities from the EEPROM 2390ac6dfecSJack F Vogel **/ 2400ac6dfecSJack F Vogel s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps) 2410ac6dfecSJack F Vogel { 2420ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_device_caps, 2430ac6dfecSJack F Vogel (hw, device_caps), IXGBE_NOT_IMPLEMENTED); 2440ac6dfecSJack F Vogel } 2450ac6dfecSJack F Vogel 2460ac6dfecSJack F Vogel /** 24713705f88SJack F Vogel * ixgbe_get_bus_info - Set PCI bus info 24813705f88SJack F Vogel * @hw: pointer to hardware structure 24913705f88SJack F Vogel * 25013705f88SJack F Vogel * Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure 25113705f88SJack F Vogel **/ 25213705f88SJack F Vogel s32 ixgbe_get_bus_info(struct ixgbe_hw *hw) 25313705f88SJack F Vogel { 2549ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw), 25513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 25613705f88SJack F Vogel } 25713705f88SJack F Vogel 25813705f88SJack F Vogel /** 2599ca4041bSJack F Vogel * ixgbe_get_num_of_tx_queues - Get Tx queues 26013705f88SJack F Vogel * @hw: pointer to hardware structure 26113705f88SJack F Vogel * 26213705f88SJack F Vogel * Returns the number of transmit queues for the given adapter. 26313705f88SJack F Vogel **/ 26413705f88SJack F Vogel u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw) 26513705f88SJack F Vogel { 2669ca4041bSJack F Vogel return hw->mac.max_tx_queues; 26713705f88SJack F Vogel } 26813705f88SJack F Vogel 26913705f88SJack F Vogel /** 2709ca4041bSJack F Vogel * ixgbe_get_num_of_rx_queues - Get Rx queues 27113705f88SJack F Vogel * @hw: pointer to hardware structure 27213705f88SJack F Vogel * 27313705f88SJack F Vogel * Returns the number of receive queues for the given adapter. 27413705f88SJack F Vogel **/ 27513705f88SJack F Vogel u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw) 27613705f88SJack F Vogel { 2779ca4041bSJack F Vogel return hw->mac.max_rx_queues; 27813705f88SJack F Vogel } 27913705f88SJack F Vogel 28013705f88SJack F Vogel /** 2819ca4041bSJack F Vogel * ixgbe_stop_adapter - Disable Rx/Tx units 28213705f88SJack F Vogel * @hw: pointer to hardware structure 28313705f88SJack F Vogel * 28413705f88SJack F Vogel * Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts, 28513705f88SJack F Vogel * disables transmit and receive units. The adapter_stopped flag is used by 28613705f88SJack F Vogel * the shared code and drivers to determine if the adapter is in a stopped 28713705f88SJack F Vogel * state and should not touch the hardware. 28813705f88SJack F Vogel **/ 28913705f88SJack F Vogel s32 ixgbe_stop_adapter(struct ixgbe_hw *hw) 29013705f88SJack F Vogel { 2919ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw), 29213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 29313705f88SJack F Vogel } 29413705f88SJack F Vogel 29513705f88SJack F Vogel /** 2969ca4041bSJack F Vogel * ixgbe_read_pba_num - Reads part number from EEPROM 2979ca4041bSJack F Vogel * @hw: pointer to hardware structure 2989ca4041bSJack F Vogel * @pba_num: stores the part number from the EEPROM 2999ca4041bSJack F Vogel * 3009ca4041bSJack F Vogel * Reads the part number from the EEPROM. 3019ca4041bSJack F Vogel **/ 3029ca4041bSJack F Vogel s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num) 3039ca4041bSJack F Vogel { 3049ca4041bSJack F Vogel return ixgbe_read_pba_num_generic(hw, pba_num); 3059ca4041bSJack F Vogel } 3069ca4041bSJack F Vogel 3079ca4041bSJack F Vogel /** 30813705f88SJack F Vogel * ixgbe_identify_phy - Get PHY type 30913705f88SJack F Vogel * @hw: pointer to hardware structure 31013705f88SJack F Vogel * 31113705f88SJack F Vogel * Determines the physical layer module found on the current adapter. 31213705f88SJack F Vogel **/ 31313705f88SJack F Vogel s32 ixgbe_identify_phy(struct ixgbe_hw *hw) 31413705f88SJack F Vogel { 31513705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 31613705f88SJack F Vogel 31713705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 31813705f88SJack F Vogel status = ixgbe_call_func(hw, 3199ca4041bSJack F Vogel hw->phy.ops.identify, 32013705f88SJack F Vogel (hw), 32113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 32213705f88SJack F Vogel } 32313705f88SJack F Vogel 32413705f88SJack F Vogel return status; 32513705f88SJack F Vogel } 32613705f88SJack F Vogel 32713705f88SJack F Vogel /** 32813705f88SJack F Vogel * ixgbe_reset_phy - Perform a PHY reset 32913705f88SJack F Vogel * @hw: pointer to hardware structure 33013705f88SJack F Vogel **/ 33113705f88SJack F Vogel s32 ixgbe_reset_phy(struct ixgbe_hw *hw) 33213705f88SJack F Vogel { 33313705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 33413705f88SJack F Vogel 33513705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 3361b6e0dbaSJack F Vogel if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS) 33713705f88SJack F Vogel status = IXGBE_ERR_PHY; 33813705f88SJack F Vogel } 33913705f88SJack F Vogel 34013705f88SJack F Vogel if (status == IXGBE_SUCCESS) { 3419ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw), 34213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 34313705f88SJack F Vogel } 34413705f88SJack F Vogel return status; 34513705f88SJack F Vogel } 34613705f88SJack F Vogel 34713705f88SJack F Vogel /** 3489ca4041bSJack F Vogel * ixgbe_get_phy_firmware_version - 3499ca4041bSJack F Vogel * @hw: pointer to hardware structure 3509ca4041bSJack F Vogel * @firmware_version: pointer to firmware version 3519ca4041bSJack F Vogel **/ 3529ca4041bSJack F Vogel s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version) 3539ca4041bSJack F Vogel { 3549ca4041bSJack F Vogel s32 status = IXGBE_SUCCESS; 3559ca4041bSJack F Vogel 3569ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version, 3579ca4041bSJack F Vogel (hw, firmware_version), 3589ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 3599ca4041bSJack F Vogel return status; 3609ca4041bSJack F Vogel } 3619ca4041bSJack F Vogel 3629ca4041bSJack F Vogel /** 36313705f88SJack F Vogel * ixgbe_read_phy_reg - Read PHY register 36413705f88SJack F Vogel * @hw: pointer to hardware structure 36513705f88SJack F Vogel * @reg_addr: 32 bit address of PHY register to read 36613705f88SJack F Vogel * @phy_data: Pointer to read data from PHY register 36713705f88SJack F Vogel * 36813705f88SJack F Vogel * Reads a value from a specified PHY register 36913705f88SJack F Vogel **/ 37013705f88SJack F Vogel s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 37113705f88SJack F Vogel u16 *phy_data) 37213705f88SJack F Vogel { 3730ac6dfecSJack F Vogel if (hw->phy.id == 0) 3740ac6dfecSJack F Vogel ixgbe_identify_phy(hw); 3750ac6dfecSJack F Vogel 3769ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr, 3779ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 37813705f88SJack F Vogel } 37913705f88SJack F Vogel 38013705f88SJack F Vogel /** 38113705f88SJack F Vogel * ixgbe_write_phy_reg - Write PHY register 38213705f88SJack F Vogel * @hw: pointer to hardware structure 38313705f88SJack F Vogel * @reg_addr: 32 bit PHY register to write 38413705f88SJack F Vogel * @phy_data: Data to write to the PHY register 38513705f88SJack F Vogel * 38613705f88SJack F Vogel * Writes a value to specified PHY register 38713705f88SJack F Vogel **/ 38813705f88SJack F Vogel s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 38913705f88SJack F Vogel u16 phy_data) 39013705f88SJack F Vogel { 3910ac6dfecSJack F Vogel if (hw->phy.id == 0) 3920ac6dfecSJack F Vogel ixgbe_identify_phy(hw); 3930ac6dfecSJack F Vogel 3949ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr, 3959ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 39613705f88SJack F Vogel } 39713705f88SJack F Vogel 3989ca4041bSJack F Vogel /** 3999ca4041bSJack F Vogel * ixgbe_setup_phy_link - Restart PHY autoneg 4009ca4041bSJack F Vogel * @hw: pointer to hardware structure 4019ca4041bSJack F Vogel * 4029ca4041bSJack F Vogel * Restart autonegotiation and PHY and waits for completion. 4039ca4041bSJack F Vogel **/ 4049ca4041bSJack F Vogel s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw) 4059ca4041bSJack F Vogel { 4069ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw), 40713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 40813705f88SJack F Vogel } 4099ca4041bSJack F Vogel 4109ca4041bSJack F Vogel /** 4119ca4041bSJack F Vogel * ixgbe_check_phy_link - Determine link and speed status 4129ca4041bSJack F Vogel * @hw: pointer to hardware structure 4139ca4041bSJack F Vogel * 4149ca4041bSJack F Vogel * Reads a PHY register to determine if link is up and the current speed for 4159ca4041bSJack F Vogel * the PHY. 4169ca4041bSJack F Vogel **/ 4179ca4041bSJack F Vogel s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 4189ca4041bSJack F Vogel bool *link_up) 4199ca4041bSJack F Vogel { 4209ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed, 4219ca4041bSJack F Vogel link_up), IXGBE_NOT_IMPLEMENTED); 4229ca4041bSJack F Vogel } 4239ca4041bSJack F Vogel 4249ca4041bSJack F Vogel /** 4259ca4041bSJack F Vogel * ixgbe_setup_phy_link_speed - Set auto advertise 4269ca4041bSJack F Vogel * @hw: pointer to hardware structure 4279ca4041bSJack F Vogel * @speed: new link speed 4289ca4041bSJack F Vogel * @autoneg: TRUE if autonegotiation enabled 4299ca4041bSJack F Vogel * 4309ca4041bSJack F Vogel * Sets the auto advertised capabilities 4319ca4041bSJack F Vogel **/ 4329ca4041bSJack F Vogel s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed, 4339ca4041bSJack F Vogel bool autoneg, 4349ca4041bSJack F Vogel bool autoneg_wait_to_complete) 4359ca4041bSJack F Vogel { 4369ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_link_speed, (hw, speed, 4379ca4041bSJack F Vogel autoneg, autoneg_wait_to_complete), 4389ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 43913705f88SJack F Vogel } 44013705f88SJack F Vogel 44113705f88SJack F Vogel /** 44213705f88SJack F Vogel * ixgbe_setup_link - Configure link settings 44313705f88SJack F Vogel * @hw: pointer to hardware structure 44413705f88SJack F Vogel * 44513705f88SJack F Vogel * Configures link settings based on values in the ixgbe_hw struct. 44613705f88SJack F Vogel * Restarts the link. Performs autonegotiation if needed. 44713705f88SJack F Vogel **/ 44813705f88SJack F Vogel s32 ixgbe_setup_link(struct ixgbe_hw *hw) 44913705f88SJack F Vogel { 4509ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw), 45113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 45213705f88SJack F Vogel } 45313705f88SJack F Vogel 45413705f88SJack F Vogel /** 45513705f88SJack F Vogel * ixgbe_check_link - Get link and speed status 45613705f88SJack F Vogel * @hw: pointer to hardware structure 45713705f88SJack F Vogel * 45813705f88SJack F Vogel * Reads the links register to determine if link is up and the current speed 45913705f88SJack F Vogel **/ 46013705f88SJack F Vogel s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 4619ca4041bSJack F Vogel bool *link_up, bool link_up_wait_to_complete) 46213705f88SJack F Vogel { 4639ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.check_link, (hw, speed, 4649ca4041bSJack F Vogel link_up, link_up_wait_to_complete), 46513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 46613705f88SJack F Vogel } 46713705f88SJack F Vogel 46813705f88SJack F Vogel /** 46913705f88SJack F Vogel * ixgbe_setup_link_speed - Set link speed 47013705f88SJack F Vogel * @hw: pointer to hardware structure 47113705f88SJack F Vogel * @speed: new link speed 47213705f88SJack F Vogel * @autoneg: TRUE if autonegotiation enabled 47313705f88SJack F Vogel * 47413705f88SJack F Vogel * Set the link speed and restarts the link. 47513705f88SJack F Vogel **/ 47613705f88SJack F Vogel s32 ixgbe_setup_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed, 47713705f88SJack F Vogel bool autoneg, 47813705f88SJack F Vogel bool autoneg_wait_to_complete) 47913705f88SJack F Vogel { 4809ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_link_speed, (hw, speed, 48113705f88SJack F Vogel autoneg, autoneg_wait_to_complete), 48213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 48313705f88SJack F Vogel } 48413705f88SJack F Vogel 48513705f88SJack F Vogel /** 4869ca4041bSJack F Vogel * ixgbe_get_link_capabilities - Returns link capabilities 48713705f88SJack F Vogel * @hw: pointer to hardware structure 48813705f88SJack F Vogel * 4899ca4041bSJack F Vogel * Determines the link capabilities of the current configuration. 49013705f88SJack F Vogel **/ 4919ca4041bSJack F Vogel s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 49213705f88SJack F Vogel bool *autoneg) 49313705f88SJack F Vogel { 4949ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw, 4959ca4041bSJack F Vogel speed, autoneg), IXGBE_NOT_IMPLEMENTED); 49613705f88SJack F Vogel } 49713705f88SJack F Vogel 49813705f88SJack F Vogel /** 4999ca4041bSJack F Vogel * ixgbe_led_on - Turn on LEDs 50013705f88SJack F Vogel * @hw: pointer to hardware structure 50113705f88SJack F Vogel * @index: led number to turn on 50213705f88SJack F Vogel * 50313705f88SJack F Vogel * Turns on the software controllable LEDs. 50413705f88SJack F Vogel **/ 50513705f88SJack F Vogel s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index) 50613705f88SJack F Vogel { 5079ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index), 50813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 50913705f88SJack F Vogel } 51013705f88SJack F Vogel 51113705f88SJack F Vogel /** 5129ca4041bSJack F Vogel * ixgbe_led_off - Turn off LEDs 51313705f88SJack F Vogel * @hw: pointer to hardware structure 51413705f88SJack F Vogel * @index: led number to turn off 51513705f88SJack F Vogel * 51613705f88SJack F Vogel * Turns off the software controllable LEDs. 51713705f88SJack F Vogel **/ 51813705f88SJack F Vogel s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index) 51913705f88SJack F Vogel { 5209ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index), 52113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 52213705f88SJack F Vogel } 52313705f88SJack F Vogel 52413705f88SJack F Vogel /** 5259ca4041bSJack F Vogel * ixgbe_blink_led_start - Blink LEDs 52613705f88SJack F Vogel * @hw: pointer to hardware structure 52713705f88SJack F Vogel * @index: led number to blink 52813705f88SJack F Vogel * 52913705f88SJack F Vogel * Blink LED based on index. 53013705f88SJack F Vogel **/ 53113705f88SJack F Vogel s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index) 53213705f88SJack F Vogel { 5339ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index), 53413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 53513705f88SJack F Vogel } 53613705f88SJack F Vogel 53713705f88SJack F Vogel /** 5389ca4041bSJack F Vogel * ixgbe_blink_led_stop - Stop blinking LEDs 53913705f88SJack F Vogel * @hw: pointer to hardware structure 54013705f88SJack F Vogel * 54113705f88SJack F Vogel * Stop blinking LED based on index. 54213705f88SJack F Vogel **/ 54313705f88SJack F Vogel s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index) 54413705f88SJack F Vogel { 5459ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index), 54613705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 54713705f88SJack F Vogel } 54813705f88SJack F Vogel 54913705f88SJack F Vogel /** 5509ca4041bSJack F Vogel * ixgbe_init_eeprom_params - Initialize EEPROM parameters 55113705f88SJack F Vogel * @hw: pointer to hardware structure 55213705f88SJack F Vogel * 55313705f88SJack F Vogel * Initializes the EEPROM parameters ixgbe_eeprom_info within the 55413705f88SJack F Vogel * ixgbe_hw struct in order to set up EEPROM access. 55513705f88SJack F Vogel **/ 55613705f88SJack F Vogel s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw) 55713705f88SJack F Vogel { 5589ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw), 55913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 56013705f88SJack F Vogel } 56113705f88SJack F Vogel 56213705f88SJack F Vogel 56313705f88SJack F Vogel /** 56413705f88SJack F Vogel * ixgbe_write_eeprom - Write word to EEPROM 56513705f88SJack F Vogel * @hw: pointer to hardware structure 56613705f88SJack F Vogel * @offset: offset within the EEPROM to be written to 56713705f88SJack F Vogel * @data: 16 bit word to be written to the EEPROM 56813705f88SJack F Vogel * 56913705f88SJack F Vogel * Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not 57013705f88SJack F Vogel * called after this function, the EEPROM will most likely contain an 57113705f88SJack F Vogel * invalid checksum. 57213705f88SJack F Vogel **/ 57313705f88SJack F Vogel s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data) 57413705f88SJack F Vogel { 5759ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data), 57613705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 57713705f88SJack F Vogel } 57813705f88SJack F Vogel 57913705f88SJack F Vogel /** 58013705f88SJack F Vogel * ixgbe_read_eeprom - Read word from EEPROM 58113705f88SJack F Vogel * @hw: pointer to hardware structure 58213705f88SJack F Vogel * @offset: offset within the EEPROM to be read 58313705f88SJack F Vogel * @data: read 16 bit value from EEPROM 58413705f88SJack F Vogel * 58513705f88SJack F Vogel * Reads 16 bit value from EEPROM 58613705f88SJack F Vogel **/ 58713705f88SJack F Vogel s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data) 58813705f88SJack F Vogel { 5899ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data), 59013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 59113705f88SJack F Vogel } 59213705f88SJack F Vogel 59313705f88SJack F Vogel /** 59413705f88SJack F Vogel * ixgbe_validate_eeprom_checksum - Validate EEPROM checksum 59513705f88SJack F Vogel * @hw: pointer to hardware structure 59613705f88SJack F Vogel * @checksum_val: calculated checksum 59713705f88SJack F Vogel * 59813705f88SJack F Vogel * Performs checksum calculation and validates the EEPROM checksum 59913705f88SJack F Vogel **/ 60013705f88SJack F Vogel s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val) 60113705f88SJack F Vogel { 6029ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum, 60313705f88SJack F Vogel (hw, checksum_val), IXGBE_NOT_IMPLEMENTED); 60413705f88SJack F Vogel } 60513705f88SJack F Vogel 60613705f88SJack F Vogel /** 60713705f88SJack F Vogel * ixgbe_eeprom_update_checksum - Updates the EEPROM checksum 60813705f88SJack F Vogel * @hw: pointer to hardware structure 60913705f88SJack F Vogel **/ 61013705f88SJack F Vogel s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw) 61113705f88SJack F Vogel { 6129ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw), 61313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 61413705f88SJack F Vogel } 61513705f88SJack F Vogel 61613705f88SJack F Vogel /** 6170ac6dfecSJack F Vogel * ixgbe_insert_mac_addr - Find a RAR for this mac address 6180ac6dfecSJack F Vogel * @hw: pointer to hardware structure 6190ac6dfecSJack F Vogel * @addr: Address to put into receive address register 6200ac6dfecSJack F Vogel * @vmdq: VMDq pool to assign 6210ac6dfecSJack F Vogel * 6220ac6dfecSJack F Vogel * Puts an ethernet address into a receive address register, or 6230ac6dfecSJack F Vogel * finds the rar that it is aleady in; adds to the pool list 6240ac6dfecSJack F Vogel **/ 6250ac6dfecSJack F Vogel s32 ixgbe_insert_mac_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq) 6260ac6dfecSJack F Vogel { 6270ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.insert_mac_addr, 6280ac6dfecSJack F Vogel (hw, addr, vmdq), 6290ac6dfecSJack F Vogel IXGBE_NOT_IMPLEMENTED); 6300ac6dfecSJack F Vogel } 6310ac6dfecSJack F Vogel 6320ac6dfecSJack F Vogel /** 6339ca4041bSJack F Vogel * ixgbe_set_rar - Set Rx address register 63413705f88SJack F Vogel * @hw: pointer to hardware structure 63513705f88SJack F Vogel * @index: Receive address register to write 6369ca4041bSJack F Vogel * @addr: Address to put into receive address register 6379ca4041bSJack F Vogel * @vmdq: VMDq "set" 63813705f88SJack F Vogel * @enable_addr: set flag that address is active 63913705f88SJack F Vogel * 64013705f88SJack F Vogel * Puts an ethernet address into a receive address register. 64113705f88SJack F Vogel **/ 6429ca4041bSJack F Vogel s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq, 64313705f88SJack F Vogel u32 enable_addr) 64413705f88SJack F Vogel { 6459ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq, 64613705f88SJack F Vogel enable_addr), IXGBE_NOT_IMPLEMENTED); 64713705f88SJack F Vogel } 64813705f88SJack F Vogel 64913705f88SJack F Vogel /** 6505b7f4cedSJack F Vogel * ixgbe_clear_rar - Clear Rx address register 6515b7f4cedSJack F Vogel * @hw: pointer to hardware structure 6525b7f4cedSJack F Vogel * @index: Receive address register to write 6535b7f4cedSJack F Vogel * 6545b7f4cedSJack F Vogel * Puts an ethernet address into a receive address register. 6555b7f4cedSJack F Vogel **/ 6565b7f4cedSJack F Vogel s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index) 6575b7f4cedSJack F Vogel { 6585b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index), 6595b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 6605b7f4cedSJack F Vogel } 6615b7f4cedSJack F Vogel 6625b7f4cedSJack F Vogel /** 6639ca4041bSJack F Vogel * ixgbe_set_vmdq - Associate a VMDq index with a receive address 6649ca4041bSJack F Vogel * @hw: pointer to hardware structure 6659ca4041bSJack F Vogel * @rar: receive address register index to associate with VMDq index 6669ca4041bSJack F Vogel * @vmdq: VMDq set or pool index 6679ca4041bSJack F Vogel **/ 6689ca4041bSJack F Vogel s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 6699ca4041bSJack F Vogel { 6709ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq), 6719ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 6729ca4041bSJack F Vogel } 6739ca4041bSJack F Vogel 6749ca4041bSJack F Vogel /** 6755b7f4cedSJack F Vogel * ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address 6765b7f4cedSJack F Vogel * @hw: pointer to hardware structure 6775b7f4cedSJack F Vogel * @rar: receive address register index to disassociate with VMDq index 6785b7f4cedSJack F Vogel * @vmdq: VMDq set or pool index 6795b7f4cedSJack F Vogel **/ 6805b7f4cedSJack F Vogel s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 6815b7f4cedSJack F Vogel { 6825b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq), 6835b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 6845b7f4cedSJack F Vogel } 6855b7f4cedSJack F Vogel 6865b7f4cedSJack F Vogel /** 68713705f88SJack F Vogel * ixgbe_init_rx_addrs - Initializes receive address filters. 68813705f88SJack F Vogel * @hw: pointer to hardware structure 68913705f88SJack F Vogel * 69013705f88SJack F Vogel * Places the MAC address in receive address register 0 and clears the rest 6919ca4041bSJack F Vogel * of the receive address registers. Clears the multicast table. Assumes 69213705f88SJack F Vogel * the receiver is in reset when the routine is called. 69313705f88SJack F Vogel **/ 69413705f88SJack F Vogel s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw) 69513705f88SJack F Vogel { 6969ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw), 69713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 69813705f88SJack F Vogel } 69913705f88SJack F Vogel 70013705f88SJack F Vogel /** 70113705f88SJack F Vogel * ixgbe_get_num_rx_addrs - Returns the number of RAR entries. 70213705f88SJack F Vogel * @hw: pointer to hardware structure 70313705f88SJack F Vogel **/ 70413705f88SJack F Vogel u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw) 70513705f88SJack F Vogel { 7069ca4041bSJack F Vogel return hw->mac.num_rar_entries; 7079ca4041bSJack F Vogel } 7089ca4041bSJack F Vogel 7099ca4041bSJack F Vogel /** 7109ca4041bSJack F Vogel * ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses 7119ca4041bSJack F Vogel * @hw: pointer to hardware structure 7129ca4041bSJack F Vogel * @addr_list: the list of new multicast addresses 7139ca4041bSJack F Vogel * @addr_count: number of addresses 7149ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 7159ca4041bSJack F Vogel * 7169ca4041bSJack F Vogel * The given list replaces any existing list. Clears the secondary addrs from 7179ca4041bSJack F Vogel * receive address registers. Uses unused receive address registers for the 7189ca4041bSJack F Vogel * first secondary addresses, and falls back to promiscuous mode as needed. 7199ca4041bSJack F Vogel **/ 7209ca4041bSJack F Vogel s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list, 7219ca4041bSJack F Vogel u32 addr_count, ixgbe_mc_addr_itr func) 7229ca4041bSJack F Vogel { 7239ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw, 7249ca4041bSJack F Vogel addr_list, addr_count, func), 7259ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 72613705f88SJack F Vogel } 72713705f88SJack F Vogel 72813705f88SJack F Vogel /** 72913705f88SJack F Vogel * ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses 73013705f88SJack F Vogel * @hw: pointer to hardware structure 73113705f88SJack F Vogel * @mc_addr_list: the list of new multicast addresses 73213705f88SJack F Vogel * @mc_addr_count: number of addresses 7339ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 73413705f88SJack F Vogel * 73513705f88SJack F Vogel * The given list replaces any existing list. Clears the MC addrs from receive 7369ca4041bSJack F Vogel * address registers and the multicast table. Uses unused receive address 73713705f88SJack F Vogel * registers for the first multicast addresses, and hashes the rest into the 73813705f88SJack F Vogel * multicast table. 73913705f88SJack F Vogel **/ 74013705f88SJack F Vogel s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list, 7419ca4041bSJack F Vogel u32 mc_addr_count, ixgbe_mc_addr_itr func) 74213705f88SJack F Vogel { 7439ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw, 7449ca4041bSJack F Vogel mc_addr_list, mc_addr_count, func), 74513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 74613705f88SJack F Vogel } 74713705f88SJack F Vogel 74813705f88SJack F Vogel /** 74913705f88SJack F Vogel * ixgbe_enable_mc - Enable multicast address in RAR 75013705f88SJack F Vogel * @hw: pointer to hardware structure 75113705f88SJack F Vogel * 75213705f88SJack F Vogel * Enables multicast address in RAR and the use of the multicast hash table. 75313705f88SJack F Vogel **/ 75413705f88SJack F Vogel s32 ixgbe_enable_mc(struct ixgbe_hw *hw) 75513705f88SJack F Vogel { 7569ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw), 75713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 75813705f88SJack F Vogel } 75913705f88SJack F Vogel 76013705f88SJack F Vogel /** 76113705f88SJack F Vogel * ixgbe_disable_mc - Disable multicast address in RAR 76213705f88SJack F Vogel * @hw: pointer to hardware structure 76313705f88SJack F Vogel * 76413705f88SJack F Vogel * Disables multicast address in RAR and the use of the multicast hash table. 76513705f88SJack F Vogel **/ 76613705f88SJack F Vogel s32 ixgbe_disable_mc(struct ixgbe_hw *hw) 76713705f88SJack F Vogel { 7689ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw), 76913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 77013705f88SJack F Vogel } 77113705f88SJack F Vogel 77213705f88SJack F Vogel /** 77313705f88SJack F Vogel * ixgbe_clear_vfta - Clear VLAN filter table 77413705f88SJack F Vogel * @hw: pointer to hardware structure 77513705f88SJack F Vogel * 77613705f88SJack F Vogel * Clears the VLAN filer table, and the VMDq index associated with the filter 77713705f88SJack F Vogel **/ 77813705f88SJack F Vogel s32 ixgbe_clear_vfta(struct ixgbe_hw *hw) 77913705f88SJack F Vogel { 7809ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw), 78113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 78213705f88SJack F Vogel } 78313705f88SJack F Vogel 78413705f88SJack F Vogel /** 78513705f88SJack F Vogel * ixgbe_set_vfta - Set VLAN filter table 78613705f88SJack F Vogel * @hw: pointer to hardware structure 78713705f88SJack F Vogel * @vlan: VLAN id to write to VLAN filter 78813705f88SJack F Vogel * @vind: VMDq output index that maps queue to VLAN id in VFTA 78913705f88SJack F Vogel * @vlan_on: boolean flag to turn on/off VLAN in VFTA 79013705f88SJack F Vogel * 79113705f88SJack F Vogel * Turn on/off specified VLAN in the VLAN filter table. 79213705f88SJack F Vogel **/ 79313705f88SJack F Vogel s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on) 79413705f88SJack F Vogel { 7959ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind, 79613705f88SJack F Vogel vlan_on), IXGBE_NOT_IMPLEMENTED); 79713705f88SJack F Vogel } 79813705f88SJack F Vogel 79913705f88SJack F Vogel /** 8000ac6dfecSJack F Vogel * ixgbe_fc_enable - Enable flow control 80113705f88SJack F Vogel * @hw: pointer to hardware structure 80213705f88SJack F Vogel * @packetbuf_num: packet buffer number (0-7) 80313705f88SJack F Vogel * 80413705f88SJack F Vogel * Configures the flow control settings based on SW configuration. 80513705f88SJack F Vogel **/ 8060ac6dfecSJack F Vogel s32 ixgbe_fc_enable(struct ixgbe_hw *hw, s32 packetbuf_num) 80713705f88SJack F Vogel { 8080ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.fc_enable, (hw, packetbuf_num), 80913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 81013705f88SJack F Vogel } 81113705f88SJack F Vogel 8123ec35e52SJack F Vogel /** 8133ec35e52SJack F Vogel * ixgbe_read_analog_reg8 - Reads 8 bit analog register 8143ec35e52SJack F Vogel * @hw: pointer to hardware structure 8153ec35e52SJack F Vogel * @reg: analog register to read 8163ec35e52SJack F Vogel * @val: read value 8173ec35e52SJack F Vogel * 8183ec35e52SJack F Vogel * Performs write operation to analog register specified. 8193ec35e52SJack F Vogel **/ 8203ec35e52SJack F Vogel s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val) 8213ec35e52SJack F Vogel { 8229ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg, 8239ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 8243ec35e52SJack F Vogel } 8253ec35e52SJack F Vogel 8263ec35e52SJack F Vogel /** 8273ec35e52SJack F Vogel * ixgbe_write_analog_reg8 - Writes 8 bit analog register 8283ec35e52SJack F Vogel * @hw: pointer to hardware structure 8293ec35e52SJack F Vogel * @reg: analog register to write 8303ec35e52SJack F Vogel * @val: value to write 8313ec35e52SJack F Vogel * 8323ec35e52SJack F Vogel * Performs write operation to Atlas analog register specified. 8333ec35e52SJack F Vogel **/ 8343ec35e52SJack F Vogel s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val) 8353ec35e52SJack F Vogel { 8369ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg, 8379ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 8383ec35e52SJack F Vogel } 8393ec35e52SJack F Vogel 8405b7f4cedSJack F Vogel /** 8415b7f4cedSJack F Vogel * ixgbe_init_uta_tables - Initializes Unicast Table Arrays. 8425b7f4cedSJack F Vogel * @hw: pointer to hardware structure 8435b7f4cedSJack F Vogel * 8445b7f4cedSJack F Vogel * Initializes the Unicast Table Arrays to zero on device load. This 8455b7f4cedSJack F Vogel * is part of the Rx init addr execution path. 8465b7f4cedSJack F Vogel **/ 8475b7f4cedSJack F Vogel s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw) 8485b7f4cedSJack F Vogel { 8495b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw), 8505b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 8515b7f4cedSJack F Vogel } 8521b6e0dbaSJack F Vogel 8531b6e0dbaSJack F Vogel /** 8540ac6dfecSJack F Vogel * ixgbe_read_i2c_byte - Reads 8 bit word over I2C at specified device address 8550ac6dfecSJack F Vogel * @hw: pointer to hardware structure 8560ac6dfecSJack F Vogel * @byte_offset: byte offset to read 8570ac6dfecSJack F Vogel * @data: value read 8580ac6dfecSJack F Vogel * 8590ac6dfecSJack F Vogel * Performs byte read operation to SFP module's EEPROM over I2C interface. 8600ac6dfecSJack F Vogel **/ 8610ac6dfecSJack F Vogel s32 ixgbe_read_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, 8620ac6dfecSJack F Vogel u8 *data) 8630ac6dfecSJack F Vogel { 8640ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte, (hw, byte_offset, 8650ac6dfecSJack F Vogel dev_addr, data), IXGBE_NOT_IMPLEMENTED); 8660ac6dfecSJack F Vogel } 8670ac6dfecSJack F Vogel 8680ac6dfecSJack F Vogel /** 8690ac6dfecSJack F Vogel * ixgbe_write_i2c_byte - Writes 8 bit word over I2C 8700ac6dfecSJack F Vogel * @hw: pointer to hardware structure 8710ac6dfecSJack F Vogel * @byte_offset: byte offset to write 8720ac6dfecSJack F Vogel * @data: value to write 8730ac6dfecSJack F Vogel * 8740ac6dfecSJack F Vogel * Performs byte write operation to SFP module's EEPROM over I2C interface 8750ac6dfecSJack F Vogel * at a specified device address. 8760ac6dfecSJack F Vogel **/ 8770ac6dfecSJack F Vogel s32 ixgbe_write_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr, 8780ac6dfecSJack F Vogel u8 data) 8790ac6dfecSJack F Vogel { 8800ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte, (hw, byte_offset, 8810ac6dfecSJack F Vogel dev_addr, data), IXGBE_NOT_IMPLEMENTED); 8820ac6dfecSJack F Vogel } 8830ac6dfecSJack F Vogel 8840ac6dfecSJack F Vogel /** 8850ac6dfecSJack F Vogel * ixgbe_write_i2c_eeprom - Writes 8 bit EEPROM word over I2C interface 8860ac6dfecSJack F Vogel * @hw: pointer to hardware structure 8870ac6dfecSJack F Vogel * @byte_offset: EEPROM byte offset to write 8880ac6dfecSJack F Vogel * @eeprom_data: value to write 8890ac6dfecSJack F Vogel * 8900ac6dfecSJack F Vogel * Performs byte write operation to SFP module's EEPROM over I2C interface. 8910ac6dfecSJack F Vogel **/ 8920ac6dfecSJack F Vogel s32 ixgbe_write_i2c_eeprom(struct ixgbe_hw *hw, 8930ac6dfecSJack F Vogel u8 byte_offset, u8 eeprom_data) 8940ac6dfecSJack F Vogel { 8950ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_i2c_eeprom, 8960ac6dfecSJack F Vogel (hw, byte_offset, eeprom_data), 8970ac6dfecSJack F Vogel IXGBE_NOT_IMPLEMENTED); 8980ac6dfecSJack F Vogel } 8990ac6dfecSJack F Vogel 9000ac6dfecSJack F Vogel /** 9011b6e0dbaSJack F Vogel * ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface 9021b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 9031b6e0dbaSJack F Vogel * @byte_offset: EEPROM byte offset to read 9041b6e0dbaSJack F Vogel * @eeprom_data: value read 9051b6e0dbaSJack F Vogel * 9061b6e0dbaSJack F Vogel * Performs byte read operation to SFP module's EEPROM over I2C interface. 9071b6e0dbaSJack F Vogel **/ 9081b6e0dbaSJack F Vogel s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data) 9091b6e0dbaSJack F Vogel { 9101b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom, 9111b6e0dbaSJack F Vogel (hw, byte_offset, eeprom_data), 9121b6e0dbaSJack F Vogel IXGBE_NOT_IMPLEMENTED); 9131b6e0dbaSJack F Vogel } 9141b6e0dbaSJack F Vogel 9151b6e0dbaSJack F Vogel /** 9161b6e0dbaSJack F Vogel * ixgbe_get_supported_physical_layer - Returns physical layer type 9171b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 9181b6e0dbaSJack F Vogel * 9191b6e0dbaSJack F Vogel * Determines physical layer capabilities of the current configuration. 9201b6e0dbaSJack F Vogel **/ 9211b6e0dbaSJack F Vogel u32 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw) 9221b6e0dbaSJack F Vogel { 9231b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer, 9241b6e0dbaSJack F Vogel (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN); 9251b6e0dbaSJack F Vogel } 9260ac6dfecSJack F Vogel 9270ac6dfecSJack F Vogel /** 9280ac6dfecSJack F Vogel * ixgbe_enable_rx_dma - Enables Rx DMA unit, dependant on device specifics 9290ac6dfecSJack F Vogel * @hw: pointer to hardware structure 9300ac6dfecSJack F Vogel * @regval: bitfield to write to the Rx DMA register 9310ac6dfecSJack F Vogel * 9320ac6dfecSJack F Vogel * Enables the Rx DMA unit of the device. 9330ac6dfecSJack F Vogel **/ 9340ac6dfecSJack F Vogel s32 ixgbe_enable_rx_dma(struct ixgbe_hw *hw, u32 regval) 9350ac6dfecSJack F Vogel { 9360ac6dfecSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_rx_dma, 9370ac6dfecSJack F Vogel (hw, regval), IXGBE_NOT_IMPLEMENTED); 9380ac6dfecSJack F Vogel } 939d8602bb9SJack F Vogel 940d8602bb9SJack F Vogel /** 941d8602bb9SJack F Vogel * ixgbe_acquire_swfw_semaphore - Acquire SWFW semaphore 942d8602bb9SJack F Vogel * @hw: pointer to hardware structure 943d8602bb9SJack F Vogel * @mask: Mask to specify which semaphore to acquire 944d8602bb9SJack F Vogel * 945d8602bb9SJack F Vogel * Acquires the SWFW semaphore through SW_FW_SYNC register for the specified 946d8602bb9SJack F Vogel * function (CSR, PHY0, PHY1, EEPROM, Flash) 947d8602bb9SJack F Vogel **/ 948d8602bb9SJack F Vogel s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u16 mask) 949d8602bb9SJack F Vogel { 950d8602bb9SJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.acquire_swfw_sync, 951d8602bb9SJack F Vogel (hw, mask), IXGBE_NOT_IMPLEMENTED); 952d8602bb9SJack F Vogel } 953d8602bb9SJack F Vogel 954d8602bb9SJack F Vogel /** 955d8602bb9SJack F Vogel * ixgbe_release_swfw_semaphore - Release SWFW semaphore 956d8602bb9SJack F Vogel * @hw: pointer to hardware structure 957d8602bb9SJack F Vogel * @mask: Mask to specify which semaphore to release 958d8602bb9SJack F Vogel * 959d8602bb9SJack F Vogel * Releases the SWFW semaphore through SW_FW_SYNC register for the specified 960d8602bb9SJack F Vogel * function (CSR, PHY0, PHY1, EEPROM, Flash) 961d8602bb9SJack F Vogel **/ 962d8602bb9SJack F Vogel void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u16 mask) 963d8602bb9SJack F Vogel { 964d8602bb9SJack F Vogel if (hw->mac.ops.release_swfw_sync) 965d8602bb9SJack F Vogel hw->mac.ops.release_swfw_sync(hw, mask); 966d8602bb9SJack F Vogel } 967d8602bb9SJack F Vogel 968