xref: /freebsd/sys/dev/ixgbe/ixgbe_api.c (revision d8602bb9)
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