19ca4041bSJack F Vogel /****************************************************************************** 213705f88SJack F Vogel 39ca4041bSJack F Vogel Copyright (c) 2001-2008, 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); 3913705f88SJack F Vogel 4013705f88SJack F Vogel /** 4113705f88SJack F Vogel * ixgbe_init_shared_code - Initialize the shared code 4213705f88SJack F Vogel * @hw: pointer to hardware structure 4313705f88SJack F Vogel * 4413705f88SJack F Vogel * This will assign function pointers and assign the MAC type and PHY code. 4513705f88SJack F Vogel * Does not touch the hardware. This function must be called prior to any 4613705f88SJack F Vogel * other function in the shared code. The ixgbe_hw structure should be 4713705f88SJack F Vogel * memset to 0 prior to calling this function. The following fields in 4813705f88SJack F Vogel * hw structure should be filled in prior to calling this function: 4913705f88SJack F Vogel * hw_addr, back, device_id, vendor_id, subsystem_device_id, 5013705f88SJack F Vogel * subsystem_vendor_id, and revision_id 5113705f88SJack F Vogel **/ 5213705f88SJack F Vogel s32 ixgbe_init_shared_code(struct ixgbe_hw *hw) 5313705f88SJack F Vogel { 543ec35e52SJack F Vogel s32 status; 5513705f88SJack 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; 6513705f88SJack F Vogel default: 6613705f88SJack F Vogel status = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 6713705f88SJack F Vogel break; 6813705f88SJack F Vogel } 6913705f88SJack F Vogel 7013705f88SJack F Vogel return status; 7113705f88SJack F Vogel } 7213705f88SJack F Vogel 7313705f88SJack F Vogel /** 743ec35e52SJack F Vogel * ixgbe_set_mac_type - Sets MAC type 753ec35e52SJack F Vogel * @hw: pointer to the HW structure 763ec35e52SJack F Vogel * 773ec35e52SJack F Vogel * This function sets the mac type of the adapter based on the 783ec35e52SJack F Vogel * vendor ID and device ID stored in the hw structure. 793ec35e52SJack F Vogel **/ 803ec35e52SJack F Vogel s32 ixgbe_set_mac_type(struct ixgbe_hw *hw) 813ec35e52SJack F Vogel { 823ec35e52SJack F Vogel s32 ret_val = IXGBE_SUCCESS; 833ec35e52SJack F Vogel 849ca4041bSJack F Vogel DEBUGFUNC("ixgbe_set_mac_type\n"); 853ec35e52SJack F Vogel 863ec35e52SJack F Vogel if (hw->vendor_id == IXGBE_INTEL_VENDOR_ID) { 873ec35e52SJack F Vogel switch (hw->device_id) { 881b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598: 893ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_SINGLE_PORT: 903ec35e52SJack F Vogel case IXGBE_DEV_ID_82598AF_DUAL_PORT: 919ca4041bSJack F Vogel case IXGBE_DEV_ID_82598AT: 923ec35e52SJack F Vogel case IXGBE_DEV_ID_82598EB_CX4: 939ca4041bSJack F Vogel case IXGBE_DEV_ID_82598_CX4_DUAL_PORT: 941b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_DA_DUAL_PORT: 951b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM: 969ca4041bSJack F Vogel case IXGBE_DEV_ID_82598EB_XF_LR: 971b6e0dbaSJack F Vogel case IXGBE_DEV_ID_82598EB_SFP_LOM: 983ec35e52SJack F Vogel hw->mac.type = ixgbe_mac_82598EB; 993ec35e52SJack F Vogel break; 1003ec35e52SJack F Vogel default: 1013ec35e52SJack F Vogel ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 1023ec35e52SJack F Vogel break; 1033ec35e52SJack F Vogel } 1043ec35e52SJack F Vogel } else { 1053ec35e52SJack F Vogel ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED; 1063ec35e52SJack F Vogel } 1073ec35e52SJack F Vogel 1089ca4041bSJack F Vogel DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n", 1099ca4041bSJack F Vogel hw->mac.type, ret_val); 1103ec35e52SJack F Vogel return ret_val; 1113ec35e52SJack F Vogel } 1123ec35e52SJack F Vogel 1133ec35e52SJack F Vogel /** 11413705f88SJack F Vogel * ixgbe_init_hw - Initialize the hardware 11513705f88SJack F Vogel * @hw: pointer to hardware structure 11613705f88SJack F Vogel * 11713705f88SJack F Vogel * Initialize the hardware by resetting and then starting the hardware 11813705f88SJack F Vogel **/ 11913705f88SJack F Vogel s32 ixgbe_init_hw(struct ixgbe_hw *hw) 12013705f88SJack F Vogel { 1219ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw), 12213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 12313705f88SJack F Vogel } 12413705f88SJack F Vogel 12513705f88SJack F Vogel /** 12613705f88SJack F Vogel * ixgbe_reset_hw - Performs a hardware reset 12713705f88SJack F Vogel * @hw: pointer to hardware structure 12813705f88SJack F Vogel * 12913705f88SJack F Vogel * Resets the hardware by resetting the transmit and receive units, masks and 13013705f88SJack F Vogel * clears all interrupts, performs a PHY reset, and performs a MAC reset 13113705f88SJack F Vogel **/ 13213705f88SJack F Vogel s32 ixgbe_reset_hw(struct ixgbe_hw *hw) 13313705f88SJack F Vogel { 1349ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw), 13513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 13613705f88SJack F Vogel } 13713705f88SJack F Vogel 13813705f88SJack F Vogel /** 1399ca4041bSJack F Vogel * ixgbe_start_hw - Prepares hardware for Rx/Tx 14013705f88SJack F Vogel * @hw: pointer to hardware structure 14113705f88SJack F Vogel * 14213705f88SJack F Vogel * Starts the hardware by filling the bus info structure and media type, 14313705f88SJack F Vogel * clears all on chip counters, initializes receive address registers, 14413705f88SJack F Vogel * multicast table, VLAN filter table, calls routine to setup link and 14513705f88SJack F Vogel * flow control settings, and leaves transmit and receive units disabled 14613705f88SJack F Vogel * and uninitialized. 14713705f88SJack F Vogel **/ 14813705f88SJack F Vogel s32 ixgbe_start_hw(struct ixgbe_hw *hw) 14913705f88SJack F Vogel { 1509ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw), 15113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 15213705f88SJack F Vogel } 15313705f88SJack F Vogel 15413705f88SJack F Vogel /** 15513705f88SJack F Vogel * ixgbe_clear_hw_cntrs - Clear hardware counters 15613705f88SJack F Vogel * @hw: pointer to hardware structure 15713705f88SJack F Vogel * 15813705f88SJack F Vogel * Clears all hardware statistics counters by reading them from the hardware 15913705f88SJack F Vogel * Statistics counters are clear on read. 16013705f88SJack F Vogel **/ 16113705f88SJack F Vogel s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw) 16213705f88SJack F Vogel { 1639ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw), 16413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 16513705f88SJack F Vogel } 16613705f88SJack F Vogel 16713705f88SJack F Vogel /** 16813705f88SJack F Vogel * ixgbe_get_media_type - Get media type 16913705f88SJack F Vogel * @hw: pointer to hardware structure 17013705f88SJack F Vogel * 17113705f88SJack F Vogel * Returns the media type (fiber, copper, backplane) 17213705f88SJack F Vogel **/ 17313705f88SJack F Vogel enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw) 17413705f88SJack F Vogel { 1759ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw), 17613705f88SJack F Vogel ixgbe_media_type_unknown); 17713705f88SJack F Vogel } 17813705f88SJack F Vogel 17913705f88SJack F Vogel /** 18013705f88SJack F Vogel * ixgbe_get_mac_addr - Get MAC address 18113705f88SJack F Vogel * @hw: pointer to hardware structure 18213705f88SJack F Vogel * @mac_addr: Adapter MAC address 18313705f88SJack F Vogel * 18413705f88SJack F Vogel * Reads the adapter's MAC address from the first Receive Address Register 1859ca4041bSJack F Vogel * (RAR0) A reset of the adapter must have been performed prior to calling 1869ca4041bSJack F Vogel * this function in order for the MAC address to have been loaded from the 1879ca4041bSJack F Vogel * EEPROM into RAR0 18813705f88SJack F Vogel **/ 18913705f88SJack F Vogel s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr) 19013705f88SJack F Vogel { 1919ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr, 19213705f88SJack F Vogel (hw, mac_addr), IXGBE_NOT_IMPLEMENTED); 19313705f88SJack F Vogel } 19413705f88SJack F Vogel 19513705f88SJack F Vogel /** 19613705f88SJack F Vogel * ixgbe_get_bus_info - Set PCI bus info 19713705f88SJack F Vogel * @hw: pointer to hardware structure 19813705f88SJack F Vogel * 19913705f88SJack F Vogel * Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure 20013705f88SJack F Vogel **/ 20113705f88SJack F Vogel s32 ixgbe_get_bus_info(struct ixgbe_hw *hw) 20213705f88SJack F Vogel { 2039ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw), 20413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 20513705f88SJack F Vogel } 20613705f88SJack F Vogel 20713705f88SJack F Vogel /** 2089ca4041bSJack F Vogel * ixgbe_get_num_of_tx_queues - Get Tx queues 20913705f88SJack F Vogel * @hw: pointer to hardware structure 21013705f88SJack F Vogel * 21113705f88SJack F Vogel * Returns the number of transmit queues for the given adapter. 21213705f88SJack F Vogel **/ 21313705f88SJack F Vogel u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw) 21413705f88SJack F Vogel { 2159ca4041bSJack F Vogel return hw->mac.max_tx_queues; 21613705f88SJack F Vogel } 21713705f88SJack F Vogel 21813705f88SJack F Vogel /** 2199ca4041bSJack F Vogel * ixgbe_get_num_of_rx_queues - Get Rx queues 22013705f88SJack F Vogel * @hw: pointer to hardware structure 22113705f88SJack F Vogel * 22213705f88SJack F Vogel * Returns the number of receive queues for the given adapter. 22313705f88SJack F Vogel **/ 22413705f88SJack F Vogel u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw) 22513705f88SJack F Vogel { 2269ca4041bSJack F Vogel return hw->mac.max_rx_queues; 22713705f88SJack F Vogel } 22813705f88SJack F Vogel 22913705f88SJack F Vogel /** 2309ca4041bSJack F Vogel * ixgbe_stop_adapter - Disable Rx/Tx units 23113705f88SJack F Vogel * @hw: pointer to hardware structure 23213705f88SJack F Vogel * 23313705f88SJack F Vogel * Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts, 23413705f88SJack F Vogel * disables transmit and receive units. The adapter_stopped flag is used by 23513705f88SJack F Vogel * the shared code and drivers to determine if the adapter is in a stopped 23613705f88SJack F Vogel * state and should not touch the hardware. 23713705f88SJack F Vogel **/ 23813705f88SJack F Vogel s32 ixgbe_stop_adapter(struct ixgbe_hw *hw) 23913705f88SJack F Vogel { 2409ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw), 24113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 24213705f88SJack F Vogel } 24313705f88SJack F Vogel 24413705f88SJack F Vogel /** 2459ca4041bSJack F Vogel * ixgbe_read_pba_num - Reads part number from EEPROM 2469ca4041bSJack F Vogel * @hw: pointer to hardware structure 2479ca4041bSJack F Vogel * @pba_num: stores the part number from the EEPROM 2489ca4041bSJack F Vogel * 2499ca4041bSJack F Vogel * Reads the part number from the EEPROM. 2509ca4041bSJack F Vogel **/ 2519ca4041bSJack F Vogel s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num) 2529ca4041bSJack F Vogel { 2539ca4041bSJack F Vogel return ixgbe_read_pba_num_generic(hw, pba_num); 2549ca4041bSJack F Vogel } 2559ca4041bSJack F Vogel 2569ca4041bSJack F Vogel /** 25713705f88SJack F Vogel * ixgbe_identify_phy - Get PHY type 25813705f88SJack F Vogel * @hw: pointer to hardware structure 25913705f88SJack F Vogel * 26013705f88SJack F Vogel * Determines the physical layer module found on the current adapter. 26113705f88SJack F Vogel **/ 26213705f88SJack F Vogel s32 ixgbe_identify_phy(struct ixgbe_hw *hw) 26313705f88SJack F Vogel { 26413705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 26513705f88SJack F Vogel 26613705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 26713705f88SJack F Vogel status = ixgbe_call_func(hw, 2689ca4041bSJack F Vogel hw->phy.ops.identify, 26913705f88SJack F Vogel (hw), 27013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 27113705f88SJack F Vogel } 27213705f88SJack F Vogel 27313705f88SJack F Vogel return status; 27413705f88SJack F Vogel } 27513705f88SJack F Vogel 27613705f88SJack F Vogel /** 27713705f88SJack F Vogel * ixgbe_reset_phy - Perform a PHY reset 27813705f88SJack F Vogel * @hw: pointer to hardware structure 27913705f88SJack F Vogel **/ 28013705f88SJack F Vogel s32 ixgbe_reset_phy(struct ixgbe_hw *hw) 28113705f88SJack F Vogel { 28213705f88SJack F Vogel s32 status = IXGBE_SUCCESS; 28313705f88SJack F Vogel 28413705f88SJack F Vogel if (hw->phy.type == ixgbe_phy_unknown) { 2851b6e0dbaSJack F Vogel if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS) 28613705f88SJack F Vogel status = IXGBE_ERR_PHY; 28713705f88SJack F Vogel } 28813705f88SJack F Vogel 28913705f88SJack F Vogel if (status == IXGBE_SUCCESS) { 2909ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw), 29113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 29213705f88SJack F Vogel } 29313705f88SJack F Vogel return status; 29413705f88SJack F Vogel } 29513705f88SJack F Vogel 29613705f88SJack F Vogel /** 2979ca4041bSJack F Vogel * ixgbe_get_phy_firmware_version - 2989ca4041bSJack F Vogel * @hw: pointer to hardware structure 2999ca4041bSJack F Vogel * @firmware_version: pointer to firmware version 3009ca4041bSJack F Vogel **/ 3019ca4041bSJack F Vogel s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version) 3029ca4041bSJack F Vogel { 3039ca4041bSJack F Vogel s32 status = IXGBE_SUCCESS; 3049ca4041bSJack F Vogel 3059ca4041bSJack F Vogel status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version, 3069ca4041bSJack F Vogel (hw, firmware_version), 3079ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 3089ca4041bSJack F Vogel return status; 3099ca4041bSJack F Vogel } 3109ca4041bSJack F Vogel 3119ca4041bSJack F Vogel /** 31213705f88SJack F Vogel * ixgbe_read_phy_reg - Read PHY register 31313705f88SJack F Vogel * @hw: pointer to hardware structure 31413705f88SJack F Vogel * @reg_addr: 32 bit address of PHY register to read 31513705f88SJack F Vogel * @phy_data: Pointer to read data from PHY register 31613705f88SJack F Vogel * 31713705f88SJack F Vogel * Reads a value from a specified PHY register 31813705f88SJack F Vogel **/ 31913705f88SJack F Vogel s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 32013705f88SJack F Vogel u16 *phy_data) 32113705f88SJack F Vogel { 3229ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr, 3239ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 32413705f88SJack F Vogel } 32513705f88SJack F Vogel 32613705f88SJack F Vogel /** 32713705f88SJack F Vogel * ixgbe_write_phy_reg - Write PHY register 32813705f88SJack F Vogel * @hw: pointer to hardware structure 32913705f88SJack F Vogel * @reg_addr: 32 bit PHY register to write 33013705f88SJack F Vogel * @phy_data: Data to write to the PHY register 33113705f88SJack F Vogel * 33213705f88SJack F Vogel * Writes a value to specified PHY register 33313705f88SJack F Vogel **/ 33413705f88SJack F Vogel s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, 33513705f88SJack F Vogel u16 phy_data) 33613705f88SJack F Vogel { 3379ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr, 3389ca4041bSJack F Vogel device_type, phy_data), IXGBE_NOT_IMPLEMENTED); 33913705f88SJack F Vogel } 34013705f88SJack F Vogel 3419ca4041bSJack F Vogel /** 3429ca4041bSJack F Vogel * ixgbe_setup_phy_link - Restart PHY autoneg 3439ca4041bSJack F Vogel * @hw: pointer to hardware structure 3449ca4041bSJack F Vogel * 3459ca4041bSJack F Vogel * Restart autonegotiation and PHY and waits for completion. 3469ca4041bSJack F Vogel **/ 3479ca4041bSJack F Vogel s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw) 3489ca4041bSJack F Vogel { 3499ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw), 35013705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 35113705f88SJack F Vogel } 3529ca4041bSJack F Vogel 3539ca4041bSJack F Vogel /** 3549ca4041bSJack F Vogel * ixgbe_check_phy_link - Determine link and speed status 3559ca4041bSJack F Vogel * @hw: pointer to hardware structure 3569ca4041bSJack F Vogel * 3579ca4041bSJack F Vogel * Reads a PHY register to determine if link is up and the current speed for 3589ca4041bSJack F Vogel * the PHY. 3599ca4041bSJack F Vogel **/ 3609ca4041bSJack F Vogel s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 3619ca4041bSJack F Vogel bool *link_up) 3629ca4041bSJack F Vogel { 3639ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed, 3649ca4041bSJack F Vogel link_up), IXGBE_NOT_IMPLEMENTED); 3659ca4041bSJack F Vogel } 3669ca4041bSJack F Vogel 3679ca4041bSJack F Vogel /** 3689ca4041bSJack F Vogel * ixgbe_setup_phy_link_speed - Set auto advertise 3699ca4041bSJack F Vogel * @hw: pointer to hardware structure 3709ca4041bSJack F Vogel * @speed: new link speed 3719ca4041bSJack F Vogel * @autoneg: TRUE if autonegotiation enabled 3729ca4041bSJack F Vogel * 3739ca4041bSJack F Vogel * Sets the auto advertised capabilities 3749ca4041bSJack F Vogel **/ 3759ca4041bSJack F Vogel s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed, 3769ca4041bSJack F Vogel bool autoneg, 3779ca4041bSJack F Vogel bool autoneg_wait_to_complete) 3789ca4041bSJack F Vogel { 3799ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.setup_link_speed, (hw, speed, 3809ca4041bSJack F Vogel autoneg, autoneg_wait_to_complete), 3819ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 38213705f88SJack F Vogel } 38313705f88SJack F Vogel 38413705f88SJack F Vogel /** 38513705f88SJack F Vogel * ixgbe_setup_link - Configure link settings 38613705f88SJack F Vogel * @hw: pointer to hardware structure 38713705f88SJack F Vogel * 38813705f88SJack F Vogel * Configures link settings based on values in the ixgbe_hw struct. 38913705f88SJack F Vogel * Restarts the link. Performs autonegotiation if needed. 39013705f88SJack F Vogel **/ 39113705f88SJack F Vogel s32 ixgbe_setup_link(struct ixgbe_hw *hw) 39213705f88SJack F Vogel { 3939ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw), 39413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 39513705f88SJack F Vogel } 39613705f88SJack F Vogel 39713705f88SJack F Vogel /** 39813705f88SJack F Vogel * ixgbe_check_link - Get link and speed status 39913705f88SJack F Vogel * @hw: pointer to hardware structure 40013705f88SJack F Vogel * 40113705f88SJack F Vogel * Reads the links register to determine if link is up and the current speed 40213705f88SJack F Vogel **/ 40313705f88SJack F Vogel s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 4049ca4041bSJack F Vogel bool *link_up, bool link_up_wait_to_complete) 40513705f88SJack F Vogel { 4069ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.check_link, (hw, speed, 4079ca4041bSJack F Vogel link_up, link_up_wait_to_complete), 40813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 40913705f88SJack F Vogel } 41013705f88SJack F Vogel 41113705f88SJack F Vogel /** 41213705f88SJack F Vogel * ixgbe_setup_link_speed - Set link speed 41313705f88SJack F Vogel * @hw: pointer to hardware structure 41413705f88SJack F Vogel * @speed: new link speed 41513705f88SJack F Vogel * @autoneg: TRUE if autonegotiation enabled 41613705f88SJack F Vogel * 41713705f88SJack F Vogel * Set the link speed and restarts the link. 41813705f88SJack F Vogel **/ 41913705f88SJack F Vogel s32 ixgbe_setup_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed, 42013705f88SJack F Vogel bool autoneg, 42113705f88SJack F Vogel bool autoneg_wait_to_complete) 42213705f88SJack F Vogel { 4239ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_link_speed, (hw, speed, 42413705f88SJack F Vogel autoneg, autoneg_wait_to_complete), 42513705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 42613705f88SJack F Vogel } 42713705f88SJack F Vogel 42813705f88SJack F Vogel /** 4299ca4041bSJack F Vogel * ixgbe_get_link_capabilities - Returns link capabilities 43013705f88SJack F Vogel * @hw: pointer to hardware structure 43113705f88SJack F Vogel * 4329ca4041bSJack F Vogel * Determines the link capabilities of the current configuration. 43313705f88SJack F Vogel **/ 4349ca4041bSJack F Vogel s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed, 43513705f88SJack F Vogel bool *autoneg) 43613705f88SJack F Vogel { 4379ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw, 4389ca4041bSJack F Vogel speed, autoneg), IXGBE_NOT_IMPLEMENTED); 43913705f88SJack F Vogel } 44013705f88SJack F Vogel 44113705f88SJack F Vogel /** 4429ca4041bSJack F Vogel * ixgbe_led_on - Turn on LEDs 44313705f88SJack F Vogel * @hw: pointer to hardware structure 44413705f88SJack F Vogel * @index: led number to turn on 44513705f88SJack F Vogel * 44613705f88SJack F Vogel * Turns on the software controllable LEDs. 44713705f88SJack F Vogel **/ 44813705f88SJack F Vogel s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index) 44913705f88SJack F Vogel { 4509ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index), 45113705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 45213705f88SJack F Vogel } 45313705f88SJack F Vogel 45413705f88SJack F Vogel /** 4559ca4041bSJack F Vogel * ixgbe_led_off - Turn off LEDs 45613705f88SJack F Vogel * @hw: pointer to hardware structure 45713705f88SJack F Vogel * @index: led number to turn off 45813705f88SJack F Vogel * 45913705f88SJack F Vogel * Turns off the software controllable LEDs. 46013705f88SJack F Vogel **/ 46113705f88SJack F Vogel s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index) 46213705f88SJack F Vogel { 4639ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index), 46413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 46513705f88SJack F Vogel } 46613705f88SJack F Vogel 46713705f88SJack F Vogel /** 4689ca4041bSJack F Vogel * ixgbe_blink_led_start - Blink LEDs 46913705f88SJack F Vogel * @hw: pointer to hardware structure 47013705f88SJack F Vogel * @index: led number to blink 47113705f88SJack F Vogel * 47213705f88SJack F Vogel * Blink LED based on index. 47313705f88SJack F Vogel **/ 47413705f88SJack F Vogel s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index) 47513705f88SJack F Vogel { 4769ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index), 47713705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 47813705f88SJack F Vogel } 47913705f88SJack F Vogel 48013705f88SJack F Vogel /** 4819ca4041bSJack F Vogel * ixgbe_blink_led_stop - Stop blinking LEDs 48213705f88SJack F Vogel * @hw: pointer to hardware structure 48313705f88SJack F Vogel * 48413705f88SJack F Vogel * Stop blinking LED based on index. 48513705f88SJack F Vogel **/ 48613705f88SJack F Vogel s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index) 48713705f88SJack F Vogel { 4889ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index), 48913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 49013705f88SJack F Vogel } 49113705f88SJack F Vogel 49213705f88SJack F Vogel /** 4939ca4041bSJack F Vogel * ixgbe_init_eeprom_params - Initialize EEPROM parameters 49413705f88SJack F Vogel * @hw: pointer to hardware structure 49513705f88SJack F Vogel * 49613705f88SJack F Vogel * Initializes the EEPROM parameters ixgbe_eeprom_info within the 49713705f88SJack F Vogel * ixgbe_hw struct in order to set up EEPROM access. 49813705f88SJack F Vogel **/ 49913705f88SJack F Vogel s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw) 50013705f88SJack F Vogel { 5019ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw), 50213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 50313705f88SJack F Vogel } 50413705f88SJack F Vogel 50513705f88SJack F Vogel 50613705f88SJack F Vogel /** 50713705f88SJack F Vogel * ixgbe_write_eeprom - Write word to EEPROM 50813705f88SJack F Vogel * @hw: pointer to hardware structure 50913705f88SJack F Vogel * @offset: offset within the EEPROM to be written to 51013705f88SJack F Vogel * @data: 16 bit word to be written to the EEPROM 51113705f88SJack F Vogel * 51213705f88SJack F Vogel * Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not 51313705f88SJack F Vogel * called after this function, the EEPROM will most likely contain an 51413705f88SJack F Vogel * invalid checksum. 51513705f88SJack F Vogel **/ 51613705f88SJack F Vogel s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data) 51713705f88SJack F Vogel { 5189ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data), 51913705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 52013705f88SJack F Vogel } 52113705f88SJack F Vogel 52213705f88SJack F Vogel /** 52313705f88SJack F Vogel * ixgbe_read_eeprom - Read word from EEPROM 52413705f88SJack F Vogel * @hw: pointer to hardware structure 52513705f88SJack F Vogel * @offset: offset within the EEPROM to be read 52613705f88SJack F Vogel * @data: read 16 bit value from EEPROM 52713705f88SJack F Vogel * 52813705f88SJack F Vogel * Reads 16 bit value from EEPROM 52913705f88SJack F Vogel **/ 53013705f88SJack F Vogel s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data) 53113705f88SJack F Vogel { 5329ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data), 53313705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 53413705f88SJack F Vogel } 53513705f88SJack F Vogel 53613705f88SJack F Vogel /** 53713705f88SJack F Vogel * ixgbe_validate_eeprom_checksum - Validate EEPROM checksum 53813705f88SJack F Vogel * @hw: pointer to hardware structure 53913705f88SJack F Vogel * @checksum_val: calculated checksum 54013705f88SJack F Vogel * 54113705f88SJack F Vogel * Performs checksum calculation and validates the EEPROM checksum 54213705f88SJack F Vogel **/ 54313705f88SJack F Vogel s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val) 54413705f88SJack F Vogel { 5459ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum, 54613705f88SJack F Vogel (hw, checksum_val), IXGBE_NOT_IMPLEMENTED); 54713705f88SJack F Vogel } 54813705f88SJack F Vogel 54913705f88SJack F Vogel /** 55013705f88SJack F Vogel * ixgbe_eeprom_update_checksum - Updates the EEPROM checksum 55113705f88SJack F Vogel * @hw: pointer to hardware structure 55213705f88SJack F Vogel **/ 55313705f88SJack F Vogel s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw) 55413705f88SJack F Vogel { 5559ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw), 55613705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 55713705f88SJack F Vogel } 55813705f88SJack F Vogel 55913705f88SJack F Vogel /** 5609ca4041bSJack F Vogel * ixgbe_set_rar - Set Rx address register 56113705f88SJack F Vogel * @hw: pointer to hardware structure 56213705f88SJack F Vogel * @index: Receive address register to write 5639ca4041bSJack F Vogel * @addr: Address to put into receive address register 5649ca4041bSJack F Vogel * @vmdq: VMDq "set" 56513705f88SJack F Vogel * @enable_addr: set flag that address is active 56613705f88SJack F Vogel * 56713705f88SJack F Vogel * Puts an ethernet address into a receive address register. 56813705f88SJack F Vogel **/ 5699ca4041bSJack F Vogel s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq, 57013705f88SJack F Vogel u32 enable_addr) 57113705f88SJack F Vogel { 5729ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq, 57313705f88SJack F Vogel enable_addr), IXGBE_NOT_IMPLEMENTED); 57413705f88SJack F Vogel } 57513705f88SJack F Vogel 57613705f88SJack F Vogel /** 5775b7f4cedSJack F Vogel * ixgbe_clear_rar - Clear Rx address register 5785b7f4cedSJack F Vogel * @hw: pointer to hardware structure 5795b7f4cedSJack F Vogel * @index: Receive address register to write 5805b7f4cedSJack F Vogel * 5815b7f4cedSJack F Vogel * Puts an ethernet address into a receive address register. 5825b7f4cedSJack F Vogel **/ 5835b7f4cedSJack F Vogel s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index) 5845b7f4cedSJack F Vogel { 5855b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index), 5865b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 5875b7f4cedSJack F Vogel } 5885b7f4cedSJack F Vogel 5895b7f4cedSJack F Vogel /** 5909ca4041bSJack F Vogel * ixgbe_set_vmdq - Associate a VMDq index with a receive address 5919ca4041bSJack F Vogel * @hw: pointer to hardware structure 5929ca4041bSJack F Vogel * @rar: receive address register index to associate with VMDq index 5939ca4041bSJack F Vogel * @vmdq: VMDq set or pool index 5949ca4041bSJack F Vogel **/ 5959ca4041bSJack F Vogel s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 5969ca4041bSJack F Vogel { 5979ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq), 5989ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 5999ca4041bSJack F Vogel } 6009ca4041bSJack F Vogel 6019ca4041bSJack F Vogel /** 6025b7f4cedSJack F Vogel * ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address 6035b7f4cedSJack F Vogel * @hw: pointer to hardware structure 6045b7f4cedSJack F Vogel * @rar: receive address register index to disassociate with VMDq index 6055b7f4cedSJack F Vogel * @vmdq: VMDq set or pool index 6065b7f4cedSJack F Vogel **/ 6075b7f4cedSJack F Vogel s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq) 6085b7f4cedSJack F Vogel { 6095b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq), 6105b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 6115b7f4cedSJack F Vogel } 6125b7f4cedSJack F Vogel 6135b7f4cedSJack F Vogel /** 61413705f88SJack F Vogel * ixgbe_init_rx_addrs - Initializes receive address filters. 61513705f88SJack F Vogel * @hw: pointer to hardware structure 61613705f88SJack F Vogel * 61713705f88SJack F Vogel * Places the MAC address in receive address register 0 and clears the rest 6189ca4041bSJack F Vogel * of the receive address registers. Clears the multicast table. Assumes 61913705f88SJack F Vogel * the receiver is in reset when the routine is called. 62013705f88SJack F Vogel **/ 62113705f88SJack F Vogel s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw) 62213705f88SJack F Vogel { 6239ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw), 62413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 62513705f88SJack F Vogel } 62613705f88SJack F Vogel 62713705f88SJack F Vogel /** 62813705f88SJack F Vogel * ixgbe_get_num_rx_addrs - Returns the number of RAR entries. 62913705f88SJack F Vogel * @hw: pointer to hardware structure 63013705f88SJack F Vogel **/ 63113705f88SJack F Vogel u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw) 63213705f88SJack F Vogel { 6339ca4041bSJack F Vogel return hw->mac.num_rar_entries; 6349ca4041bSJack F Vogel } 6359ca4041bSJack F Vogel 6369ca4041bSJack F Vogel /** 6379ca4041bSJack F Vogel * ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses 6389ca4041bSJack F Vogel * @hw: pointer to hardware structure 6399ca4041bSJack F Vogel * @addr_list: the list of new multicast addresses 6409ca4041bSJack F Vogel * @addr_count: number of addresses 6419ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 6429ca4041bSJack F Vogel * 6439ca4041bSJack F Vogel * The given list replaces any existing list. Clears the secondary addrs from 6449ca4041bSJack F Vogel * receive address registers. Uses unused receive address registers for the 6459ca4041bSJack F Vogel * first secondary addresses, and falls back to promiscuous mode as needed. 6469ca4041bSJack F Vogel **/ 6479ca4041bSJack F Vogel s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list, 6489ca4041bSJack F Vogel u32 addr_count, ixgbe_mc_addr_itr func) 6499ca4041bSJack F Vogel { 6509ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw, 6519ca4041bSJack F Vogel addr_list, addr_count, func), 6529ca4041bSJack F Vogel IXGBE_NOT_IMPLEMENTED); 65313705f88SJack F Vogel } 65413705f88SJack F Vogel 65513705f88SJack F Vogel /** 65613705f88SJack F Vogel * ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses 65713705f88SJack F Vogel * @hw: pointer to hardware structure 65813705f88SJack F Vogel * @mc_addr_list: the list of new multicast addresses 65913705f88SJack F Vogel * @mc_addr_count: number of addresses 6609ca4041bSJack F Vogel * @func: iterator function to walk the multicast address list 66113705f88SJack F Vogel * 66213705f88SJack F Vogel * The given list replaces any existing list. Clears the MC addrs from receive 6639ca4041bSJack F Vogel * address registers and the multicast table. Uses unused receive address 66413705f88SJack F Vogel * registers for the first multicast addresses, and hashes the rest into the 66513705f88SJack F Vogel * multicast table. 66613705f88SJack F Vogel **/ 66713705f88SJack F Vogel s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list, 6689ca4041bSJack F Vogel u32 mc_addr_count, ixgbe_mc_addr_itr func) 66913705f88SJack F Vogel { 6709ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw, 6719ca4041bSJack F Vogel mc_addr_list, mc_addr_count, func), 67213705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 67313705f88SJack F Vogel } 67413705f88SJack F Vogel 67513705f88SJack F Vogel /** 67613705f88SJack F Vogel * ixgbe_enable_mc - Enable multicast address in RAR 67713705f88SJack F Vogel * @hw: pointer to hardware structure 67813705f88SJack F Vogel * 67913705f88SJack F Vogel * Enables multicast address in RAR and the use of the multicast hash table. 68013705f88SJack F Vogel **/ 68113705f88SJack F Vogel s32 ixgbe_enable_mc(struct ixgbe_hw *hw) 68213705f88SJack F Vogel { 6839ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw), 68413705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 68513705f88SJack F Vogel } 68613705f88SJack F Vogel 68713705f88SJack F Vogel /** 68813705f88SJack F Vogel * ixgbe_disable_mc - Disable multicast address in RAR 68913705f88SJack F Vogel * @hw: pointer to hardware structure 69013705f88SJack F Vogel * 69113705f88SJack F Vogel * Disables multicast address in RAR and the use of the multicast hash table. 69213705f88SJack F Vogel **/ 69313705f88SJack F Vogel s32 ixgbe_disable_mc(struct ixgbe_hw *hw) 69413705f88SJack F Vogel { 6959ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw), 69613705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 69713705f88SJack F Vogel } 69813705f88SJack F Vogel 69913705f88SJack F Vogel /** 70013705f88SJack F Vogel * ixgbe_clear_vfta - Clear VLAN filter table 70113705f88SJack F Vogel * @hw: pointer to hardware structure 70213705f88SJack F Vogel * 70313705f88SJack F Vogel * Clears the VLAN filer table, and the VMDq index associated with the filter 70413705f88SJack F Vogel **/ 70513705f88SJack F Vogel s32 ixgbe_clear_vfta(struct ixgbe_hw *hw) 70613705f88SJack F Vogel { 7079ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw), 70813705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 70913705f88SJack F Vogel } 71013705f88SJack F Vogel 71113705f88SJack F Vogel /** 71213705f88SJack F Vogel * ixgbe_set_vfta - Set VLAN filter table 71313705f88SJack F Vogel * @hw: pointer to hardware structure 71413705f88SJack F Vogel * @vlan: VLAN id to write to VLAN filter 71513705f88SJack F Vogel * @vind: VMDq output index that maps queue to VLAN id in VFTA 71613705f88SJack F Vogel * @vlan_on: boolean flag to turn on/off VLAN in VFTA 71713705f88SJack F Vogel * 71813705f88SJack F Vogel * Turn on/off specified VLAN in the VLAN filter table. 71913705f88SJack F Vogel **/ 72013705f88SJack F Vogel s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on) 72113705f88SJack F Vogel { 7229ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind, 72313705f88SJack F Vogel vlan_on), IXGBE_NOT_IMPLEMENTED); 72413705f88SJack F Vogel } 72513705f88SJack F Vogel 72613705f88SJack F Vogel /** 72713705f88SJack F Vogel * ixgbe_setup_fc - Set flow control 72813705f88SJack F Vogel * @hw: pointer to hardware structure 72913705f88SJack F Vogel * @packetbuf_num: packet buffer number (0-7) 73013705f88SJack F Vogel * 73113705f88SJack F Vogel * Configures the flow control settings based on SW configuration. 73213705f88SJack F Vogel **/ 73313705f88SJack F Vogel s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num) 73413705f88SJack F Vogel { 7359ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.setup_fc, (hw, packetbuf_num), 73613705f88SJack F Vogel IXGBE_NOT_IMPLEMENTED); 73713705f88SJack F Vogel } 73813705f88SJack F Vogel 7393ec35e52SJack F Vogel /** 7403ec35e52SJack F Vogel * ixgbe_read_analog_reg8 - Reads 8 bit analog register 7413ec35e52SJack F Vogel * @hw: pointer to hardware structure 7423ec35e52SJack F Vogel * @reg: analog register to read 7433ec35e52SJack F Vogel * @val: read value 7443ec35e52SJack F Vogel * 7453ec35e52SJack F Vogel * Performs write operation to analog register specified. 7463ec35e52SJack F Vogel **/ 7473ec35e52SJack F Vogel s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val) 7483ec35e52SJack F Vogel { 7499ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg, 7509ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 7513ec35e52SJack F Vogel } 7523ec35e52SJack F Vogel 7533ec35e52SJack F Vogel /** 7543ec35e52SJack F Vogel * ixgbe_write_analog_reg8 - Writes 8 bit analog register 7553ec35e52SJack F Vogel * @hw: pointer to hardware structure 7563ec35e52SJack F Vogel * @reg: analog register to write 7573ec35e52SJack F Vogel * @val: value to write 7583ec35e52SJack F Vogel * 7593ec35e52SJack F Vogel * Performs write operation to Atlas analog register specified. 7603ec35e52SJack F Vogel **/ 7613ec35e52SJack F Vogel s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val) 7623ec35e52SJack F Vogel { 7639ca4041bSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg, 7649ca4041bSJack F Vogel val), IXGBE_NOT_IMPLEMENTED); 7653ec35e52SJack F Vogel } 7663ec35e52SJack F Vogel 7675b7f4cedSJack F Vogel /** 7685b7f4cedSJack F Vogel * ixgbe_init_uta_tables - Initializes Unicast Table Arrays. 7695b7f4cedSJack F Vogel * @hw: pointer to hardware structure 7705b7f4cedSJack F Vogel * 7715b7f4cedSJack F Vogel * Initializes the Unicast Table Arrays to zero on device load. This 7725b7f4cedSJack F Vogel * is part of the Rx init addr execution path. 7735b7f4cedSJack F Vogel **/ 7745b7f4cedSJack F Vogel s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw) 7755b7f4cedSJack F Vogel { 7765b7f4cedSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw), 7775b7f4cedSJack F Vogel IXGBE_NOT_IMPLEMENTED); 7785b7f4cedSJack F Vogel } 7791b6e0dbaSJack F Vogel 7801b6e0dbaSJack F Vogel /** 7811b6e0dbaSJack F Vogel * ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface 7821b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 7831b6e0dbaSJack F Vogel * @byte_offset: EEPROM byte offset to read 7841b6e0dbaSJack F Vogel * @eeprom_data: value read 7851b6e0dbaSJack F Vogel * 7861b6e0dbaSJack F Vogel * Performs byte read operation to SFP module's EEPROM over I2C interface. 7871b6e0dbaSJack F Vogel **/ 7881b6e0dbaSJack F Vogel s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data) 7891b6e0dbaSJack F Vogel { 7901b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom, 7911b6e0dbaSJack F Vogel (hw, byte_offset, eeprom_data), 7921b6e0dbaSJack F Vogel IXGBE_NOT_IMPLEMENTED); 7931b6e0dbaSJack F Vogel } 7941b6e0dbaSJack F Vogel 7951b6e0dbaSJack F Vogel /** 7961b6e0dbaSJack F Vogel * ixgbe_get_supported_physical_layer - Returns physical layer type 7971b6e0dbaSJack F Vogel * @hw: pointer to hardware structure 7981b6e0dbaSJack F Vogel * 7991b6e0dbaSJack F Vogel * Determines physical layer capabilities of the current configuration. 8001b6e0dbaSJack F Vogel **/ 8011b6e0dbaSJack F Vogel u32 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw) 8021b6e0dbaSJack F Vogel { 8031b6e0dbaSJack F Vogel return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer, 8041b6e0dbaSJack F Vogel (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN); 8051b6e0dbaSJack F Vogel } 806