xref: /freebsd/sys/dev/ixgbe/ixgbe_api.c (revision 6f37f232)
19ca4041bSJack F Vogel /******************************************************************************
213705f88SJack F Vogel 
36f37f232SEric Joyner   Copyright (c) 2001-2015, 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 
386f37f232SEric Joyner static const u32 ixgbe_mvals_base[IXGBE_MVALS_IDX_LIMIT] = {
396f37f232SEric Joyner 	IXGBE_MVALS_INIT()
406f37f232SEric Joyner };
416f37f232SEric Joyner 
426f37f232SEric Joyner static const u32 ixgbe_mvals_X540[IXGBE_MVALS_IDX_LIMIT] = {
436f37f232SEric Joyner 	IXGBE_MVALS_INIT(_X540)
446f37f232SEric Joyner };
456f37f232SEric Joyner 
466f37f232SEric Joyner static const u32 ixgbe_mvals_X550[IXGBE_MVALS_IDX_LIMIT] = {
476f37f232SEric Joyner 	IXGBE_MVALS_INIT(_X550)
486f37f232SEric Joyner };
496f37f232SEric Joyner 
506f37f232SEric Joyner static const u32 ixgbe_mvals_X550EM_x[IXGBE_MVALS_IDX_LIMIT] = {
516f37f232SEric Joyner 	IXGBE_MVALS_INIT(_X550EM_x)
526f37f232SEric Joyner };
536f37f232SEric Joyner 
5413705f88SJack F Vogel /**
55fd75b91dSJack F Vogel  * ixgbe_dcb_get_rtrup2tc - read rtrup2tc reg
56fd75b91dSJack F Vogel  * @hw: pointer to hardware structure
57fd75b91dSJack F Vogel  * @map: pointer to u8 arr for returning map
58fd75b91dSJack F Vogel  *
59fd75b91dSJack F Vogel  * Read the rtrup2tc HW register and resolve its content into map
60fd75b91dSJack F Vogel  **/
61fd75b91dSJack F Vogel void ixgbe_dcb_get_rtrup2tc(struct ixgbe_hw *hw, u8 *map)
62fd75b91dSJack F Vogel {
63fd75b91dSJack F Vogel 	if (hw->mac.ops.get_rtrup2tc)
64fd75b91dSJack F Vogel 		hw->mac.ops.get_rtrup2tc(hw, map);
65fd75b91dSJack F Vogel }
66fd75b91dSJack F Vogel 
67fd75b91dSJack F Vogel /**
6813705f88SJack F Vogel  *  ixgbe_init_shared_code - Initialize the shared code
6913705f88SJack F Vogel  *  @hw: pointer to hardware structure
7013705f88SJack F Vogel  *
7113705f88SJack F Vogel  *  This will assign function pointers and assign the MAC type and PHY code.
7213705f88SJack F Vogel  *  Does not touch the hardware. This function must be called prior to any
7313705f88SJack F Vogel  *  other function in the shared code. The ixgbe_hw structure should be
7413705f88SJack F Vogel  *  memset to 0 prior to calling this function.  The following fields in
7513705f88SJack F Vogel  *  hw structure should be filled in prior to calling this function:
7613705f88SJack F Vogel  *  hw_addr, back, device_id, vendor_id, subsystem_device_id,
7713705f88SJack F Vogel  *  subsystem_vendor_id, and revision_id
7813705f88SJack F Vogel  **/
7913705f88SJack F Vogel s32 ixgbe_init_shared_code(struct ixgbe_hw *hw)
8013705f88SJack F Vogel {
813ec35e52SJack F Vogel 	s32 status;
8213705f88SJack F Vogel 
832969bf0eSJack F Vogel 	DEBUGFUNC("ixgbe_init_shared_code");
842969bf0eSJack F Vogel 
8513705f88SJack F Vogel 	/*
863ec35e52SJack F Vogel 	 * Set the mac type
873ec35e52SJack F Vogel 	 */
883ec35e52SJack F Vogel 	ixgbe_set_mac_type(hw);
893ec35e52SJack F Vogel 
903ec35e52SJack F Vogel 	switch (hw->mac.type) {
913ec35e52SJack F Vogel 	case ixgbe_mac_82598EB:
929ca4041bSJack F Vogel 		status = ixgbe_init_ops_82598(hw);
9313705f88SJack F Vogel 		break;
940ac6dfecSJack F Vogel 	case ixgbe_mac_82599EB:
950ac6dfecSJack F Vogel 		status = ixgbe_init_ops_82599(hw);
960ac6dfecSJack F Vogel 		break;
9785d0a26eSJack F Vogel 	case ixgbe_mac_X540:
9885d0a26eSJack F Vogel 		status = ixgbe_init_ops_X540(hw);
9985d0a26eSJack F Vogel 		break;
100758cc3dcSJack F Vogel 	case ixgbe_mac_X550:
101758cc3dcSJack F Vogel 		status = ixgbe_init_ops_X550(hw);
102758cc3dcSJack F Vogel 		break;
103758cc3dcSJack F Vogel 	case ixgbe_mac_X550EM_x:
104758cc3dcSJack F Vogel 		status = ixgbe_init_ops_X550EM(hw);
105758cc3dcSJack F Vogel 		break;
106758cc3dcSJack F Vogel 	case ixgbe_mac_82599_vf:
107758cc3dcSJack F Vogel 	case ixgbe_mac_X540_vf:
108758cc3dcSJack F Vogel 	case ixgbe_mac_X550_vf:
109758cc3dcSJack F Vogel 	case ixgbe_mac_X550EM_x_vf:
110758cc3dcSJack F Vogel 		status = ixgbe_init_ops_vf(hw);
111758cc3dcSJack F Vogel 		break;
11213705f88SJack F Vogel 	default:
11313705f88SJack F Vogel 		status = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
11413705f88SJack F Vogel 		break;
11513705f88SJack F Vogel 	}
11613705f88SJack F Vogel 
11713705f88SJack F Vogel 	return status;
11813705f88SJack F Vogel }
11913705f88SJack F Vogel 
12013705f88SJack F Vogel /**
1213ec35e52SJack F Vogel  *  ixgbe_set_mac_type - Sets MAC type
1223ec35e52SJack F Vogel  *  @hw: pointer to the HW structure
1233ec35e52SJack F Vogel  *
1243ec35e52SJack F Vogel  *  This function sets the mac type of the adapter based on the
1253ec35e52SJack F Vogel  *  vendor ID and device ID stored in the hw structure.
1263ec35e52SJack F Vogel  **/
1273ec35e52SJack F Vogel s32 ixgbe_set_mac_type(struct ixgbe_hw *hw)
1283ec35e52SJack F Vogel {
1293ec35e52SJack F Vogel 	s32 ret_val = IXGBE_SUCCESS;
1303ec35e52SJack F Vogel 
1319ca4041bSJack F Vogel 	DEBUGFUNC("ixgbe_set_mac_type\n");
1323ec35e52SJack F Vogel 
133fd75b91dSJack F Vogel 	if (hw->vendor_id != IXGBE_INTEL_VENDOR_ID) {
134fd75b91dSJack F Vogel 		ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED,
135fd75b91dSJack F Vogel 			     "Unsupported vendor id: %x", hw->vendor_id);
136fd75b91dSJack F Vogel 		return IXGBE_ERR_DEVICE_NOT_SUPPORTED;
137fd75b91dSJack F Vogel 	}
138fd75b91dSJack F Vogel 
1396f37f232SEric Joyner 	hw->mvals = ixgbe_mvals_base;
1406f37f232SEric Joyner 
1413ec35e52SJack F Vogel 	switch (hw->device_id) {
1421b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598:
1430ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82598_BX:
1443ec35e52SJack F Vogel 	case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
1453ec35e52SJack F Vogel 	case IXGBE_DEV_ID_82598AF_DUAL_PORT:
1469ca4041bSJack F Vogel 	case IXGBE_DEV_ID_82598AT:
1472969bf0eSJack F Vogel 	case IXGBE_DEV_ID_82598AT2:
1483ec35e52SJack F Vogel 	case IXGBE_DEV_ID_82598EB_CX4:
1499ca4041bSJack F Vogel 	case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
1501b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
1511b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
1529ca4041bSJack F Vogel 	case IXGBE_DEV_ID_82598EB_XF_LR:
1531b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598EB_SFP_LOM:
1543ec35e52SJack F Vogel 		hw->mac.type = ixgbe_mac_82598EB;
1553ec35e52SJack F Vogel 		break;
1560ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82599_KX4:
1572969bf0eSJack F Vogel 	case IXGBE_DEV_ID_82599_KX4_MEZZ:
158d8602bb9SJack F Vogel 	case IXGBE_DEV_ID_82599_XAUI_LOM:
1592969bf0eSJack F Vogel 	case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:
16085d0a26eSJack F Vogel 	case IXGBE_DEV_ID_82599_KR:
1610ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82599_SFP:
1621a4e3449SJack F Vogel 	case IXGBE_DEV_ID_82599_BACKPLANE_FCOE:
1631a4e3449SJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_FCOE:
16485d0a26eSJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_EM:
165a621e3c8SJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_SF2:
1660ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_SF_QP:
167758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_82599_QSFP_SF_QP:
16885d0a26eSJack F Vogel 	case IXGBE_DEV_ID_82599EN_SFP:
1690ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82599_CX4:
1700ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_82599_BYPASS:
171c0014855SJack F Vogel 	case IXGBE_DEV_ID_82599_T3_LOM:
1720ac6dfecSJack F Vogel 		hw->mac.type = ixgbe_mac_82599EB;
1730ac6dfecSJack F Vogel 		break;
1741a4e3449SJack F Vogel 	case IXGBE_DEV_ID_82599_VF:
1750ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_82599_VF_HV:
1761a4e3449SJack F Vogel 		hw->mac.type = ixgbe_mac_82599_vf;
1771a4e3449SJack F Vogel 		break;
17885d0a26eSJack F Vogel 	case IXGBE_DEV_ID_X540_VF:
1790ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_X540_VF_HV:
18085d0a26eSJack F Vogel 		hw->mac.type = ixgbe_mac_X540_vf;
1816f37f232SEric Joyner 		hw->mvals = ixgbe_mvals_X540;
18285d0a26eSJack F Vogel 		break;
18385d0a26eSJack F Vogel 	case IXGBE_DEV_ID_X540T:
184758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X540T1:
1850ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_X540_BYPASS:
18685d0a26eSJack F Vogel 		hw->mac.type = ixgbe_mac_X540;
1876f37f232SEric Joyner 		hw->mvals = ixgbe_mvals_X540;
18885d0a26eSJack F Vogel 		break;
189758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550T:
190758cc3dcSJack F Vogel 		hw->mac.type = ixgbe_mac_X550;
1916f37f232SEric Joyner 		hw->mvals = ixgbe_mvals_X550;
192758cc3dcSJack F Vogel 		break;
193758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550EM_X_KX4:
194758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550EM_X_KR:
195758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550EM_X_10G_T:
196758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550EM_X_1G_T:
197758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550EM_X_SFP:
198758cc3dcSJack F Vogel 		hw->mac.type = ixgbe_mac_X550EM_x;
1996f37f232SEric Joyner 		hw->mvals = ixgbe_mvals_X550EM_x;
200758cc3dcSJack F Vogel 		break;
201758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550_VF:
202758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550_VF_HV:
203758cc3dcSJack F Vogel 		hw->mac.type = ixgbe_mac_X550_vf;
2046f37f232SEric Joyner 		hw->mvals = ixgbe_mvals_X550;
205758cc3dcSJack F Vogel 		break;
206758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550EM_X_VF:
207758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550EM_X_VF_HV:
208758cc3dcSJack F Vogel 		hw->mac.type = ixgbe_mac_X550EM_x_vf;
2096f37f232SEric Joyner 		hw->mvals = ixgbe_mvals_X550EM_x;
210758cc3dcSJack F Vogel 		break;
2113ec35e52SJack F Vogel 	default:
2123ec35e52SJack F Vogel 		ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
213fd75b91dSJack F Vogel 		ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED,
214fd75b91dSJack F Vogel 			     "Unsupported device id: %x",
215fd75b91dSJack F Vogel 			     hw->device_id);
2163ec35e52SJack F Vogel 		break;
2173ec35e52SJack F Vogel 	}
2183ec35e52SJack F Vogel 
2199ca4041bSJack F Vogel 	DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n",
2209ca4041bSJack F Vogel 		  hw->mac.type, ret_val);
2213ec35e52SJack F Vogel 	return ret_val;
2223ec35e52SJack F Vogel }
2233ec35e52SJack F Vogel 
2243ec35e52SJack F Vogel /**
22513705f88SJack F Vogel  *  ixgbe_init_hw - Initialize the hardware
22613705f88SJack F Vogel  *  @hw: pointer to hardware structure
22713705f88SJack F Vogel  *
22813705f88SJack F Vogel  *  Initialize the hardware by resetting and then starting the hardware
22913705f88SJack F Vogel  **/
23013705f88SJack F Vogel s32 ixgbe_init_hw(struct ixgbe_hw *hw)
23113705f88SJack F Vogel {
2329ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw),
23313705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
23413705f88SJack F Vogel }
23513705f88SJack F Vogel 
23613705f88SJack F Vogel /**
23713705f88SJack F Vogel  *  ixgbe_reset_hw - Performs a hardware reset
23813705f88SJack F Vogel  *  @hw: pointer to hardware structure
23913705f88SJack F Vogel  *
24013705f88SJack F Vogel  *  Resets the hardware by resetting the transmit and receive units, masks and
24113705f88SJack F Vogel  *  clears all interrupts, performs a PHY reset, and performs a MAC reset
24213705f88SJack F Vogel  **/
24313705f88SJack F Vogel s32 ixgbe_reset_hw(struct ixgbe_hw *hw)
24413705f88SJack F Vogel {
2459ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw),
24613705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
24713705f88SJack F Vogel }
24813705f88SJack F Vogel 
24913705f88SJack F Vogel /**
2509ca4041bSJack F Vogel  *  ixgbe_start_hw - Prepares hardware for Rx/Tx
25113705f88SJack F Vogel  *  @hw: pointer to hardware structure
25213705f88SJack F Vogel  *
25313705f88SJack F Vogel  *  Starts the hardware by filling the bus info structure and media type,
25413705f88SJack F Vogel  *  clears all on chip counters, initializes receive address registers,
25513705f88SJack F Vogel  *  multicast table, VLAN filter table, calls routine to setup link and
25613705f88SJack F Vogel  *  flow control settings, and leaves transmit and receive units disabled
25713705f88SJack F Vogel  *  and uninitialized.
25813705f88SJack F Vogel  **/
25913705f88SJack F Vogel s32 ixgbe_start_hw(struct ixgbe_hw *hw)
26013705f88SJack F Vogel {
2619ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw),
26213705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
26313705f88SJack F Vogel }
26413705f88SJack F Vogel 
26513705f88SJack F Vogel /**
266c0014855SJack F Vogel  *  ixgbe_enable_relaxed_ordering - Enables tx relaxed ordering,
267c0014855SJack F Vogel  *  which is disabled by default in ixgbe_start_hw();
268c0014855SJack F Vogel  *
269c0014855SJack F Vogel  *  @hw: pointer to hardware structure
270c0014855SJack F Vogel  *
271c0014855SJack F Vogel  *   Enable relaxed ordering;
272c0014855SJack F Vogel  **/
273c0014855SJack F Vogel void ixgbe_enable_relaxed_ordering(struct ixgbe_hw *hw)
274c0014855SJack F Vogel {
275c0014855SJack F Vogel 	if (hw->mac.ops.enable_relaxed_ordering)
276c0014855SJack F Vogel 		hw->mac.ops.enable_relaxed_ordering(hw);
277c0014855SJack F Vogel }
278c0014855SJack F Vogel 
279c0014855SJack F Vogel /**
28013705f88SJack F Vogel  *  ixgbe_clear_hw_cntrs - Clear hardware counters
28113705f88SJack F Vogel  *  @hw: pointer to hardware structure
28213705f88SJack F Vogel  *
28313705f88SJack F Vogel  *  Clears all hardware statistics counters by reading them from the hardware
28413705f88SJack F Vogel  *  Statistics counters are clear on read.
28513705f88SJack F Vogel  **/
28613705f88SJack F Vogel s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw)
28713705f88SJack F Vogel {
2889ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw),
28913705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
29013705f88SJack F Vogel }
29113705f88SJack F Vogel 
29213705f88SJack F Vogel /**
29313705f88SJack F Vogel  *  ixgbe_get_media_type - Get media type
29413705f88SJack F Vogel  *  @hw: pointer to hardware structure
29513705f88SJack F Vogel  *
29613705f88SJack F Vogel  *  Returns the media type (fiber, copper, backplane)
29713705f88SJack F Vogel  **/
29813705f88SJack F Vogel enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw)
29913705f88SJack F Vogel {
3009ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw),
30113705f88SJack F Vogel 			       ixgbe_media_type_unknown);
30213705f88SJack F Vogel }
30313705f88SJack F Vogel 
30413705f88SJack F Vogel /**
30513705f88SJack F Vogel  *  ixgbe_get_mac_addr - Get MAC address
30613705f88SJack F Vogel  *  @hw: pointer to hardware structure
30713705f88SJack F Vogel  *  @mac_addr: Adapter MAC address
30813705f88SJack F Vogel  *
30913705f88SJack F Vogel  *  Reads the adapter's MAC address from the first Receive Address Register
3109ca4041bSJack F Vogel  *  (RAR0) A reset of the adapter must have been performed prior to calling
3119ca4041bSJack F Vogel  *  this function in order for the MAC address to have been loaded from the
3129ca4041bSJack F Vogel  *  EEPROM into RAR0
31313705f88SJack F Vogel  **/
31413705f88SJack F Vogel s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr)
31513705f88SJack F Vogel {
3169ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr,
31713705f88SJack F Vogel 			       (hw, mac_addr), IXGBE_NOT_IMPLEMENTED);
31813705f88SJack F Vogel }
31913705f88SJack F Vogel 
32013705f88SJack F Vogel /**
3210ac6dfecSJack F Vogel  *  ixgbe_get_san_mac_addr - Get SAN MAC address
3220ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
3230ac6dfecSJack F Vogel  *  @san_mac_addr: SAN MAC address
3240ac6dfecSJack F Vogel  *
3250ac6dfecSJack F Vogel  *  Reads the SAN MAC address from the EEPROM, if it's available.  This is
3260ac6dfecSJack F Vogel  *  per-port, so set_lan_id() must be called before reading the addresses.
3270ac6dfecSJack F Vogel  **/
3280ac6dfecSJack F Vogel s32 ixgbe_get_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr)
3290ac6dfecSJack F Vogel {
3300ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_san_mac_addr,
3310ac6dfecSJack F Vogel 			       (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED);
3320ac6dfecSJack F Vogel }
3330ac6dfecSJack F Vogel 
3340ac6dfecSJack F Vogel /**
3350ac6dfecSJack F Vogel  *  ixgbe_set_san_mac_addr - Write a SAN MAC address
3360ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
3370ac6dfecSJack F Vogel  *  @san_mac_addr: SAN MAC address
3380ac6dfecSJack F Vogel  *
3390ac6dfecSJack F Vogel  *  Writes A SAN MAC address to the EEPROM.
3400ac6dfecSJack F Vogel  **/
3410ac6dfecSJack F Vogel s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr)
3420ac6dfecSJack F Vogel {
3430ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_san_mac_addr,
3440ac6dfecSJack F Vogel 			       (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED);
3450ac6dfecSJack F Vogel }
3460ac6dfecSJack F Vogel 
3470ac6dfecSJack F Vogel /**
3480ac6dfecSJack F Vogel  *  ixgbe_get_device_caps - Get additional device capabilities
3490ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
3500ac6dfecSJack F Vogel  *  @device_caps: the EEPROM word for device capabilities
3510ac6dfecSJack F Vogel  *
3520ac6dfecSJack F Vogel  *  Reads the extra device capabilities from the EEPROM
3530ac6dfecSJack F Vogel  **/
3540ac6dfecSJack F Vogel s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps)
3550ac6dfecSJack F Vogel {
3560ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_device_caps,
3570ac6dfecSJack F Vogel 			       (hw, device_caps), IXGBE_NOT_IMPLEMENTED);
3580ac6dfecSJack F Vogel }
3590ac6dfecSJack F Vogel 
3600ac6dfecSJack F Vogel /**
3612969bf0eSJack F Vogel  *  ixgbe_get_wwn_prefix - Get alternative WWNN/WWPN prefix from the EEPROM
3622969bf0eSJack F Vogel  *  @hw: pointer to hardware structure
3632969bf0eSJack F Vogel  *  @wwnn_prefix: the alternative WWNN prefix
3642969bf0eSJack F Vogel  *  @wwpn_prefix: the alternative WWPN prefix
3652969bf0eSJack F Vogel  *
3662969bf0eSJack F Vogel  *  This function will read the EEPROM from the alternative SAN MAC address
3672969bf0eSJack F Vogel  *  block to check the support for the alternative WWNN/WWPN prefix support.
3682969bf0eSJack F Vogel  **/
3692969bf0eSJack F Vogel s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix,
3702969bf0eSJack F Vogel 			 u16 *wwpn_prefix)
3712969bf0eSJack F Vogel {
3722969bf0eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_wwn_prefix,
3732969bf0eSJack F Vogel 			       (hw, wwnn_prefix, wwpn_prefix),
3742969bf0eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
3752969bf0eSJack F Vogel }
3762969bf0eSJack F Vogel 
3772969bf0eSJack F Vogel /**
3781a4e3449SJack F Vogel  *  ixgbe_get_fcoe_boot_status -  Get FCOE boot status from EEPROM
3791a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
3801a4e3449SJack F Vogel  *  @bs: the fcoe boot status
3811a4e3449SJack F Vogel  *
3821a4e3449SJack F Vogel  *  This function will read the FCOE boot status from the iSCSI FCOE block
3831a4e3449SJack F Vogel  **/
3841a4e3449SJack F Vogel s32 ixgbe_get_fcoe_boot_status(struct ixgbe_hw *hw, u16 *bs)
3851a4e3449SJack F Vogel {
3861a4e3449SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_fcoe_boot_status,
3871a4e3449SJack F Vogel 			       (hw, bs),
3881a4e3449SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
3891a4e3449SJack F Vogel }
3901a4e3449SJack F Vogel 
3911a4e3449SJack F Vogel /**
39213705f88SJack F Vogel  *  ixgbe_get_bus_info - Set PCI bus info
39313705f88SJack F Vogel  *  @hw: pointer to hardware structure
39413705f88SJack F Vogel  *
39513705f88SJack F Vogel  *  Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure
39613705f88SJack F Vogel  **/
39713705f88SJack F Vogel s32 ixgbe_get_bus_info(struct ixgbe_hw *hw)
39813705f88SJack F Vogel {
3999ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw),
40013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
40113705f88SJack F Vogel }
40213705f88SJack F Vogel 
40313705f88SJack F Vogel /**
4049ca4041bSJack F Vogel  *  ixgbe_get_num_of_tx_queues - Get Tx queues
40513705f88SJack F Vogel  *  @hw: pointer to hardware structure
40613705f88SJack F Vogel  *
40713705f88SJack F Vogel  *  Returns the number of transmit queues for the given adapter.
40813705f88SJack F Vogel  **/
40913705f88SJack F Vogel u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw)
41013705f88SJack F Vogel {
4119ca4041bSJack F Vogel 	return hw->mac.max_tx_queues;
41213705f88SJack F Vogel }
41313705f88SJack F Vogel 
41413705f88SJack F Vogel /**
4159ca4041bSJack F Vogel  *  ixgbe_get_num_of_rx_queues - Get Rx queues
41613705f88SJack F Vogel  *  @hw: pointer to hardware structure
41713705f88SJack F Vogel  *
41813705f88SJack F Vogel  *  Returns the number of receive queues for the given adapter.
41913705f88SJack F Vogel  **/
42013705f88SJack F Vogel u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw)
42113705f88SJack F Vogel {
4229ca4041bSJack F Vogel 	return hw->mac.max_rx_queues;
42313705f88SJack F Vogel }
42413705f88SJack F Vogel 
42513705f88SJack F Vogel /**
4269ca4041bSJack F Vogel  *  ixgbe_stop_adapter - Disable Rx/Tx units
42713705f88SJack F Vogel  *  @hw: pointer to hardware structure
42813705f88SJack F Vogel  *
42913705f88SJack F Vogel  *  Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts,
43013705f88SJack F Vogel  *  disables transmit and receive units. The adapter_stopped flag is used by
43113705f88SJack F Vogel  *  the shared code and drivers to determine if the adapter is in a stopped
43213705f88SJack F Vogel  *  state and should not touch the hardware.
43313705f88SJack F Vogel  **/
43413705f88SJack F Vogel s32 ixgbe_stop_adapter(struct ixgbe_hw *hw)
43513705f88SJack F Vogel {
4369ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw),
43713705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
43813705f88SJack F Vogel }
43913705f88SJack F Vogel 
44013705f88SJack F Vogel /**
4411a4e3449SJack F Vogel  *  ixgbe_read_pba_string - Reads part number string from EEPROM
4421a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
4431a4e3449SJack F Vogel  *  @pba_num: stores the part number string from the EEPROM
4441a4e3449SJack F Vogel  *  @pba_num_size: part number string buffer length
4451a4e3449SJack F Vogel  *
4461a4e3449SJack F Vogel  *  Reads the part number string from the EEPROM.
4471a4e3449SJack F Vogel  **/
4481a4e3449SJack F Vogel s32 ixgbe_read_pba_string(struct ixgbe_hw *hw, u8 *pba_num, u32 pba_num_size)
4491a4e3449SJack F Vogel {
4501a4e3449SJack F Vogel 	return ixgbe_read_pba_string_generic(hw, pba_num, pba_num_size);
4511a4e3449SJack F Vogel }
4521a4e3449SJack F Vogel 
4531a4e3449SJack F Vogel /**
4549ca4041bSJack F Vogel  *  ixgbe_read_pba_num - Reads part number from EEPROM
4559ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
4569ca4041bSJack F Vogel  *  @pba_num: stores the part number from the EEPROM
4579ca4041bSJack F Vogel  *
4589ca4041bSJack F Vogel  *  Reads the part number from the EEPROM.
4599ca4041bSJack F Vogel  **/
4609ca4041bSJack F Vogel s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num)
4619ca4041bSJack F Vogel {
4629ca4041bSJack F Vogel 	return ixgbe_read_pba_num_generic(hw, pba_num);
4639ca4041bSJack F Vogel }
4649ca4041bSJack F Vogel 
4659ca4041bSJack F Vogel /**
46613705f88SJack F Vogel  *  ixgbe_identify_phy - Get PHY type
46713705f88SJack F Vogel  *  @hw: pointer to hardware structure
46813705f88SJack F Vogel  *
46913705f88SJack F Vogel  *  Determines the physical layer module found on the current adapter.
47013705f88SJack F Vogel  **/
47113705f88SJack F Vogel s32 ixgbe_identify_phy(struct ixgbe_hw *hw)
47213705f88SJack F Vogel {
47313705f88SJack F Vogel 	s32 status = IXGBE_SUCCESS;
47413705f88SJack F Vogel 
47513705f88SJack F Vogel 	if (hw->phy.type == ixgbe_phy_unknown) {
4761a4e3449SJack F Vogel 		status = ixgbe_call_func(hw, hw->phy.ops.identify, (hw),
47713705f88SJack F Vogel 					 IXGBE_NOT_IMPLEMENTED);
47813705f88SJack F Vogel 	}
47913705f88SJack F Vogel 
48013705f88SJack F Vogel 	return status;
48113705f88SJack F Vogel }
48213705f88SJack F Vogel 
48313705f88SJack F Vogel /**
48413705f88SJack F Vogel  *  ixgbe_reset_phy - Perform a PHY reset
48513705f88SJack F Vogel  *  @hw: pointer to hardware structure
48613705f88SJack F Vogel  **/
48713705f88SJack F Vogel s32 ixgbe_reset_phy(struct ixgbe_hw *hw)
48813705f88SJack F Vogel {
48913705f88SJack F Vogel 	s32 status = IXGBE_SUCCESS;
49013705f88SJack F Vogel 
49113705f88SJack F Vogel 	if (hw->phy.type == ixgbe_phy_unknown) {
4921b6e0dbaSJack F Vogel 		if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS)
49313705f88SJack F Vogel 			status = IXGBE_ERR_PHY;
49413705f88SJack F Vogel 	}
49513705f88SJack F Vogel 
49613705f88SJack F Vogel 	if (status == IXGBE_SUCCESS) {
4979ca4041bSJack F Vogel 		status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw),
49813705f88SJack F Vogel 					 IXGBE_NOT_IMPLEMENTED);
49913705f88SJack F Vogel 	}
50013705f88SJack F Vogel 	return status;
50113705f88SJack F Vogel }
50213705f88SJack F Vogel 
50313705f88SJack F Vogel /**
5049ca4041bSJack F Vogel  *  ixgbe_get_phy_firmware_version -
5059ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
5069ca4041bSJack F Vogel  *  @firmware_version: pointer to firmware version
5079ca4041bSJack F Vogel  **/
5089ca4041bSJack F Vogel s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version)
5099ca4041bSJack F Vogel {
5109ca4041bSJack F Vogel 	s32 status = IXGBE_SUCCESS;
5119ca4041bSJack F Vogel 
5129ca4041bSJack F Vogel 	status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version,
5139ca4041bSJack F Vogel 				 (hw, firmware_version),
5149ca4041bSJack F Vogel 				 IXGBE_NOT_IMPLEMENTED);
5159ca4041bSJack F Vogel 	return status;
5169ca4041bSJack F Vogel }
5179ca4041bSJack F Vogel 
5189ca4041bSJack F Vogel /**
51913705f88SJack F Vogel  *  ixgbe_read_phy_reg - Read PHY register
52013705f88SJack F Vogel  *  @hw: pointer to hardware structure
52113705f88SJack F Vogel  *  @reg_addr: 32 bit address of PHY register to read
52213705f88SJack F Vogel  *  @phy_data: Pointer to read data from PHY register
52313705f88SJack F Vogel  *
52413705f88SJack F Vogel  *  Reads a value from a specified PHY register
52513705f88SJack F Vogel  **/
52613705f88SJack F Vogel s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
52713705f88SJack F Vogel 		       u16 *phy_data)
52813705f88SJack F Vogel {
5290ac6dfecSJack F Vogel 	if (hw->phy.id == 0)
5300ac6dfecSJack F Vogel 		ixgbe_identify_phy(hw);
5310ac6dfecSJack F Vogel 
5329ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr,
5339ca4041bSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
53413705f88SJack F Vogel }
53513705f88SJack F Vogel 
53613705f88SJack F Vogel /**
53713705f88SJack F Vogel  *  ixgbe_write_phy_reg - Write PHY register
53813705f88SJack F Vogel  *  @hw: pointer to hardware structure
53913705f88SJack F Vogel  *  @reg_addr: 32 bit PHY register to write
54013705f88SJack F Vogel  *  @phy_data: Data to write to the PHY register
54113705f88SJack F Vogel  *
54213705f88SJack F Vogel  *  Writes a value to specified PHY register
54313705f88SJack F Vogel  **/
54413705f88SJack F Vogel s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
54513705f88SJack F Vogel 			u16 phy_data)
54613705f88SJack F Vogel {
5470ac6dfecSJack F Vogel 	if (hw->phy.id == 0)
5480ac6dfecSJack F Vogel 		ixgbe_identify_phy(hw);
5490ac6dfecSJack F Vogel 
5509ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr,
5519ca4041bSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
55213705f88SJack F Vogel }
55313705f88SJack F Vogel 
5549ca4041bSJack F Vogel /**
5559ca4041bSJack F Vogel  *  ixgbe_setup_phy_link - Restart PHY autoneg
5569ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
5579ca4041bSJack F Vogel  *
5589ca4041bSJack F Vogel  *  Restart autonegotiation and PHY and waits for completion.
5599ca4041bSJack F Vogel  **/
5609ca4041bSJack F Vogel s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw)
5619ca4041bSJack F Vogel {
5629ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw),
56313705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
56413705f88SJack F Vogel }
5659ca4041bSJack F Vogel 
5669ca4041bSJack F Vogel /**
567758cc3dcSJack F Vogel  * ixgbe_setup_internal_phy - Configure integrated PHY
568758cc3dcSJack F Vogel  * @hw: pointer to hardware structure
569758cc3dcSJack F Vogel  *
570758cc3dcSJack F Vogel  * Reconfigure the integrated PHY in order to enable talk to the external PHY.
571758cc3dcSJack F Vogel  * Returns success if not implemented, since nothing needs to be done in this
572758cc3dcSJack F Vogel  * case.
573758cc3dcSJack F Vogel  */
574758cc3dcSJack F Vogel s32 ixgbe_setup_internal_phy(struct ixgbe_hw *hw)
575758cc3dcSJack F Vogel {
576758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.setup_internal_link, (hw),
577758cc3dcSJack F Vogel 			       IXGBE_SUCCESS);
578758cc3dcSJack F Vogel }
579758cc3dcSJack F Vogel 
580758cc3dcSJack F Vogel /**
5819ca4041bSJack F Vogel  *  ixgbe_check_phy_link - Determine link and speed status
5829ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
5839ca4041bSJack F Vogel  *
5849ca4041bSJack F Vogel  *  Reads a PHY register to determine if link is up and the current speed for
5859ca4041bSJack F Vogel  *  the PHY.
5869ca4041bSJack F Vogel  **/
5879ca4041bSJack F Vogel s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
5889ca4041bSJack F Vogel 			 bool *link_up)
5899ca4041bSJack F Vogel {
5909ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed,
5919ca4041bSJack F Vogel 			       link_up), IXGBE_NOT_IMPLEMENTED);
5929ca4041bSJack F Vogel }
5939ca4041bSJack F Vogel 
5949ca4041bSJack F Vogel /**
5959ca4041bSJack F Vogel  *  ixgbe_setup_phy_link_speed - Set auto advertise
5969ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
5979ca4041bSJack F Vogel  *  @speed: new link speed
5989ca4041bSJack F Vogel  *
5999ca4041bSJack F Vogel  *  Sets the auto advertised capabilities
6009ca4041bSJack F Vogel  **/
6019ca4041bSJack F Vogel s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
6029ca4041bSJack F Vogel 			       bool autoneg_wait_to_complete)
6039ca4041bSJack F Vogel {
6049ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.setup_link_speed, (hw, speed,
6050ecc2ff0SJack F Vogel 			       autoneg_wait_to_complete),
6069ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
60713705f88SJack F Vogel }
60813705f88SJack F Vogel 
60913705f88SJack F Vogel /**
610758cc3dcSJack F Vogel  * ixgbe_set_phy_power - Control the phy power state
611758cc3dcSJack F Vogel  * @hw: pointer to hardware structure
612758cc3dcSJack F Vogel  * @on: TRUE for on, FALSE for off
613758cc3dcSJack F Vogel  */
614758cc3dcSJack F Vogel s32 ixgbe_set_phy_power(struct ixgbe_hw *hw, bool on)
615758cc3dcSJack F Vogel {
616758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.set_phy_power, (hw, on),
617758cc3dcSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
618758cc3dcSJack F Vogel }
619758cc3dcSJack F Vogel 
620758cc3dcSJack F Vogel /**
62113705f88SJack F Vogel  *  ixgbe_check_link - Get link and speed status
62213705f88SJack F Vogel  *  @hw: pointer to hardware structure
62313705f88SJack F Vogel  *
62413705f88SJack F Vogel  *  Reads the links register to determine if link is up and the current speed
62513705f88SJack F Vogel  **/
62613705f88SJack F Vogel s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
6279ca4041bSJack F Vogel 		     bool *link_up, bool link_up_wait_to_complete)
62813705f88SJack F Vogel {
6299ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.check_link, (hw, speed,
6309ca4041bSJack F Vogel 			       link_up, link_up_wait_to_complete),
63113705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
63213705f88SJack F Vogel }
63313705f88SJack F Vogel 
63413705f88SJack F Vogel /**
6351a4e3449SJack F Vogel  *  ixgbe_disable_tx_laser - Disable Tx laser
6361a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
6371a4e3449SJack F Vogel  *
6381a4e3449SJack F Vogel  *  If the driver needs to disable the laser on SFI optics.
6391a4e3449SJack F Vogel  **/
6401a4e3449SJack F Vogel void ixgbe_disable_tx_laser(struct ixgbe_hw *hw)
6411a4e3449SJack F Vogel {
6421a4e3449SJack F Vogel 	if (hw->mac.ops.disable_tx_laser)
6431a4e3449SJack F Vogel 		hw->mac.ops.disable_tx_laser(hw);
6441a4e3449SJack F Vogel }
6451a4e3449SJack F Vogel 
6461a4e3449SJack F Vogel /**
6471a4e3449SJack F Vogel  *  ixgbe_enable_tx_laser - Enable Tx laser
6481a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
6491a4e3449SJack F Vogel  *
6501a4e3449SJack F Vogel  *  If the driver needs to enable the laser on SFI optics.
6511a4e3449SJack F Vogel  **/
6521a4e3449SJack F Vogel void ixgbe_enable_tx_laser(struct ixgbe_hw *hw)
6531a4e3449SJack F Vogel {
6541a4e3449SJack F Vogel 	if (hw->mac.ops.enable_tx_laser)
6551a4e3449SJack F Vogel 		hw->mac.ops.enable_tx_laser(hw);
6561a4e3449SJack F Vogel }
6571a4e3449SJack F Vogel 
6581a4e3449SJack F Vogel /**
6591a4e3449SJack F Vogel  *  ixgbe_flap_tx_laser - flap Tx laser to start autotry process
6601a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
6611a4e3449SJack F Vogel  *
6621a4e3449SJack F Vogel  *  When the driver changes the link speeds that it can support then
6631a4e3449SJack F Vogel  *  flap the tx laser to alert the link partner to start autotry
6641a4e3449SJack F Vogel  *  process on its end.
6651a4e3449SJack F Vogel  **/
6661a4e3449SJack F Vogel void ixgbe_flap_tx_laser(struct ixgbe_hw *hw)
6671a4e3449SJack F Vogel {
6681a4e3449SJack F Vogel 	if (hw->mac.ops.flap_tx_laser)
6691a4e3449SJack F Vogel 		hw->mac.ops.flap_tx_laser(hw);
6701a4e3449SJack F Vogel }
6711a4e3449SJack F Vogel 
6721a4e3449SJack F Vogel /**
6732969bf0eSJack F Vogel  *  ixgbe_setup_link - Set link speed
67413705f88SJack F Vogel  *  @hw: pointer to hardware structure
67513705f88SJack F Vogel  *  @speed: new link speed
67613705f88SJack F Vogel  *
6772969bf0eSJack F Vogel  *  Configures link settings.  Restarts the link.
6782969bf0eSJack F Vogel  *  Performs autonegotiation if needed.
67913705f88SJack F Vogel  **/
6802969bf0eSJack F Vogel s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed,
68113705f88SJack F Vogel 		     bool autoneg_wait_to_complete)
68213705f88SJack F Vogel {
6832969bf0eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw, speed,
6840ecc2ff0SJack F Vogel 			       autoneg_wait_to_complete),
68513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
68613705f88SJack F Vogel }
68713705f88SJack F Vogel 
68813705f88SJack F Vogel /**
689758cc3dcSJack F Vogel  *  ixgbe_setup_mac_link - Set link speed
690758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
691758cc3dcSJack F Vogel  *  @speed: new link speed
692758cc3dcSJack F Vogel  *
693758cc3dcSJack F Vogel  *  Configures link settings.  Restarts the link.
694758cc3dcSJack F Vogel  *  Performs autonegotiation if needed.
695758cc3dcSJack F Vogel  **/
696758cc3dcSJack F Vogel s32 ixgbe_setup_mac_link(struct ixgbe_hw *hw, ixgbe_link_speed speed,
697758cc3dcSJack F Vogel 			 bool autoneg_wait_to_complete)
698758cc3dcSJack F Vogel {
699758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_mac_link, (hw, speed,
700758cc3dcSJack F Vogel 			       autoneg_wait_to_complete),
701758cc3dcSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
702758cc3dcSJack F Vogel }
703758cc3dcSJack F Vogel 
704758cc3dcSJack F Vogel /**
7059ca4041bSJack F Vogel  *  ixgbe_get_link_capabilities - Returns link capabilities
70613705f88SJack F Vogel  *  @hw: pointer to hardware structure
70713705f88SJack F Vogel  *
7089ca4041bSJack F Vogel  *  Determines the link capabilities of the current configuration.
70913705f88SJack F Vogel  **/
7109ca4041bSJack F Vogel s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
71113705f88SJack F Vogel 				bool *autoneg)
71213705f88SJack F Vogel {
7139ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw,
7149ca4041bSJack F Vogel 			       speed, autoneg), IXGBE_NOT_IMPLEMENTED);
71513705f88SJack F Vogel }
71613705f88SJack F Vogel 
71713705f88SJack F Vogel /**
7189ca4041bSJack F Vogel  *  ixgbe_led_on - Turn on LEDs
71913705f88SJack F Vogel  *  @hw: pointer to hardware structure
72013705f88SJack F Vogel  *  @index: led number to turn on
72113705f88SJack F Vogel  *
72213705f88SJack F Vogel  *  Turns on the software controllable LEDs.
72313705f88SJack F Vogel  **/
72413705f88SJack F Vogel s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index)
72513705f88SJack F Vogel {
7269ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index),
72713705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
72813705f88SJack F Vogel }
72913705f88SJack F Vogel 
73013705f88SJack F Vogel /**
7319ca4041bSJack F Vogel  *  ixgbe_led_off - Turn off LEDs
73213705f88SJack F Vogel  *  @hw: pointer to hardware structure
73313705f88SJack F Vogel  *  @index: led number to turn off
73413705f88SJack F Vogel  *
73513705f88SJack F Vogel  *  Turns off the software controllable LEDs.
73613705f88SJack F Vogel  **/
73713705f88SJack F Vogel s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index)
73813705f88SJack F Vogel {
7399ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index),
74013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
74113705f88SJack F Vogel }
74213705f88SJack F Vogel 
74313705f88SJack F Vogel /**
7449ca4041bSJack F Vogel  *  ixgbe_blink_led_start - Blink LEDs
74513705f88SJack F Vogel  *  @hw: pointer to hardware structure
74613705f88SJack F Vogel  *  @index: led number to blink
74713705f88SJack F Vogel  *
74813705f88SJack F Vogel  *  Blink LED based on index.
74913705f88SJack F Vogel  **/
75013705f88SJack F Vogel s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index)
75113705f88SJack F Vogel {
7529ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index),
75313705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
75413705f88SJack F Vogel }
75513705f88SJack F Vogel 
75613705f88SJack F Vogel /**
7579ca4041bSJack F Vogel  *  ixgbe_blink_led_stop - Stop blinking LEDs
75813705f88SJack F Vogel  *  @hw: pointer to hardware structure
75913705f88SJack F Vogel  *
76013705f88SJack F Vogel  *  Stop blinking LED based on index.
76113705f88SJack F Vogel  **/
76213705f88SJack F Vogel s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index)
76313705f88SJack F Vogel {
7649ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index),
76513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
76613705f88SJack F Vogel }
76713705f88SJack F Vogel 
76813705f88SJack F Vogel /**
7699ca4041bSJack F Vogel  *  ixgbe_init_eeprom_params - Initialize EEPROM parameters
77013705f88SJack F Vogel  *  @hw: pointer to hardware structure
77113705f88SJack F Vogel  *
77213705f88SJack F Vogel  *  Initializes the EEPROM parameters ixgbe_eeprom_info within the
77313705f88SJack F Vogel  *  ixgbe_hw struct in order to set up EEPROM access.
77413705f88SJack F Vogel  **/
77513705f88SJack F Vogel s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw)
77613705f88SJack F Vogel {
7779ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw),
77813705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
77913705f88SJack F Vogel }
78013705f88SJack F Vogel 
78113705f88SJack F Vogel 
78213705f88SJack F Vogel /**
78313705f88SJack F Vogel  *  ixgbe_write_eeprom - Write word to EEPROM
78413705f88SJack F Vogel  *  @hw: pointer to hardware structure
78513705f88SJack F Vogel  *  @offset: offset within the EEPROM to be written to
78613705f88SJack F Vogel  *  @data: 16 bit word to be written to the EEPROM
78713705f88SJack F Vogel  *
78813705f88SJack F Vogel  *  Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not
78913705f88SJack F Vogel  *  called after this function, the EEPROM will most likely contain an
79013705f88SJack F Vogel  *  invalid checksum.
79113705f88SJack F Vogel  **/
79213705f88SJack F Vogel s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data)
79313705f88SJack F Vogel {
7949ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data),
79513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
79613705f88SJack F Vogel }
79713705f88SJack F Vogel 
79813705f88SJack F Vogel /**
79985d0a26eSJack F Vogel  *  ixgbe_write_eeprom_buffer - Write word(s) to EEPROM
80085d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
80185d0a26eSJack F Vogel  *  @offset: offset within the EEPROM to be written to
80285d0a26eSJack F Vogel  *  @data: 16 bit word(s) to be written to the EEPROM
80385d0a26eSJack F Vogel  *  @words: number of words
80485d0a26eSJack F Vogel  *
80585d0a26eSJack F Vogel  *  Writes 16 bit word(s) to EEPROM. If ixgbe_eeprom_update_checksum is not
80685d0a26eSJack F Vogel  *  called after this function, the EEPROM will most likely contain an
80785d0a26eSJack F Vogel  *  invalid checksum.
80885d0a26eSJack F Vogel  **/
80985d0a26eSJack F Vogel s32 ixgbe_write_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, u16 words,
81085d0a26eSJack F Vogel 			      u16 *data)
81185d0a26eSJack F Vogel {
81285d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.write_buffer,
81385d0a26eSJack F Vogel 			       (hw, offset, words, data),
81485d0a26eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
81585d0a26eSJack F Vogel }
81685d0a26eSJack F Vogel 
81785d0a26eSJack F Vogel /**
81813705f88SJack F Vogel  *  ixgbe_read_eeprom - Read word from EEPROM
81913705f88SJack F Vogel  *  @hw: pointer to hardware structure
82013705f88SJack F Vogel  *  @offset: offset within the EEPROM to be read
82113705f88SJack F Vogel  *  @data: read 16 bit value from EEPROM
82213705f88SJack F Vogel  *
82313705f88SJack F Vogel  *  Reads 16 bit value from EEPROM
82413705f88SJack F Vogel  **/
82513705f88SJack F Vogel s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data)
82613705f88SJack F Vogel {
8279ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data),
82813705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
82913705f88SJack F Vogel }
83013705f88SJack F Vogel 
83113705f88SJack F Vogel /**
83285d0a26eSJack F Vogel  *  ixgbe_read_eeprom_buffer - Read word(s) from EEPROM
83385d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
83485d0a26eSJack F Vogel  *  @offset: offset within the EEPROM to be read
83585d0a26eSJack F Vogel  *  @data: read 16 bit word(s) from EEPROM
83685d0a26eSJack F Vogel  *  @words: number of words
83785d0a26eSJack F Vogel  *
83885d0a26eSJack F Vogel  *  Reads 16 bit word(s) from EEPROM
83985d0a26eSJack F Vogel  **/
84085d0a26eSJack F Vogel s32 ixgbe_read_eeprom_buffer(struct ixgbe_hw *hw, u16 offset,
84185d0a26eSJack F Vogel 			     u16 words, u16 *data)
84285d0a26eSJack F Vogel {
84385d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.read_buffer,
84485d0a26eSJack F Vogel 			       (hw, offset, words, data),
84585d0a26eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
84685d0a26eSJack F Vogel }
84785d0a26eSJack F Vogel 
84885d0a26eSJack F Vogel /**
84913705f88SJack F Vogel  *  ixgbe_validate_eeprom_checksum - Validate EEPROM checksum
85013705f88SJack F Vogel  *  @hw: pointer to hardware structure
85113705f88SJack F Vogel  *  @checksum_val: calculated checksum
85213705f88SJack F Vogel  *
85313705f88SJack F Vogel  *  Performs checksum calculation and validates the EEPROM checksum
85413705f88SJack F Vogel  **/
85513705f88SJack F Vogel s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val)
85613705f88SJack F Vogel {
8579ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum,
85813705f88SJack F Vogel 			       (hw, checksum_val), IXGBE_NOT_IMPLEMENTED);
85913705f88SJack F Vogel }
86013705f88SJack F Vogel 
86113705f88SJack F Vogel /**
86213705f88SJack F Vogel  *  ixgbe_eeprom_update_checksum - Updates the EEPROM checksum
86313705f88SJack F Vogel  *  @hw: pointer to hardware structure
86413705f88SJack F Vogel  **/
86513705f88SJack F Vogel s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw)
86613705f88SJack F Vogel {
8679ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw),
86813705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
86913705f88SJack F Vogel }
87013705f88SJack F Vogel 
87113705f88SJack F Vogel /**
8720ac6dfecSJack F Vogel  *  ixgbe_insert_mac_addr - Find a RAR for this mac address
8730ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
8740ac6dfecSJack F Vogel  *  @addr: Address to put into receive address register
8750ac6dfecSJack F Vogel  *  @vmdq: VMDq pool to assign
8760ac6dfecSJack F Vogel  *
8770ac6dfecSJack F Vogel  *  Puts an ethernet address into a receive address register, or
8780ac6dfecSJack F Vogel  *  finds the rar that it is aleady in; adds to the pool list
8790ac6dfecSJack F Vogel  **/
8800ac6dfecSJack F Vogel s32 ixgbe_insert_mac_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
8810ac6dfecSJack F Vogel {
8820ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.insert_mac_addr,
8830ac6dfecSJack F Vogel 			       (hw, addr, vmdq),
8840ac6dfecSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
8850ac6dfecSJack F Vogel }
8860ac6dfecSJack F Vogel 
8870ac6dfecSJack F Vogel /**
8889ca4041bSJack F Vogel  *  ixgbe_set_rar - Set Rx address register
88913705f88SJack F Vogel  *  @hw: pointer to hardware structure
89013705f88SJack F Vogel  *  @index: Receive address register to write
8919ca4041bSJack F Vogel  *  @addr: Address to put into receive address register
8929ca4041bSJack F Vogel  *  @vmdq: VMDq "set"
89313705f88SJack F Vogel  *  @enable_addr: set flag that address is active
89413705f88SJack F Vogel  *
89513705f88SJack F Vogel  *  Puts an ethernet address into a receive address register.
89613705f88SJack F Vogel  **/
8979ca4041bSJack F Vogel s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
89813705f88SJack F Vogel 		  u32 enable_addr)
89913705f88SJack F Vogel {
9009ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq,
90113705f88SJack F Vogel 			       enable_addr), IXGBE_NOT_IMPLEMENTED);
90213705f88SJack F Vogel }
90313705f88SJack F Vogel 
90413705f88SJack F Vogel /**
9055b7f4cedSJack F Vogel  *  ixgbe_clear_rar - Clear Rx address register
9065b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
9075b7f4cedSJack F Vogel  *  @index: Receive address register to write
9085b7f4cedSJack F Vogel  *
9095b7f4cedSJack F Vogel  *  Puts an ethernet address into a receive address register.
9105b7f4cedSJack F Vogel  **/
9115b7f4cedSJack F Vogel s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index)
9125b7f4cedSJack F Vogel {
9135b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index),
9145b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
9155b7f4cedSJack F Vogel }
9165b7f4cedSJack F Vogel 
9175b7f4cedSJack F Vogel /**
9189ca4041bSJack F Vogel  *  ixgbe_set_vmdq - Associate a VMDq index with a receive address
9199ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
9209ca4041bSJack F Vogel  *  @rar: receive address register index to associate with VMDq index
9219ca4041bSJack F Vogel  *  @vmdq: VMDq set or pool index
9229ca4041bSJack F Vogel  **/
9239ca4041bSJack F Vogel s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
9249ca4041bSJack F Vogel {
9259ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq),
9269ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
927a621e3c8SJack F Vogel 
928a621e3c8SJack F Vogel }
929a621e3c8SJack F Vogel 
930a621e3c8SJack F Vogel /**
931a621e3c8SJack F Vogel  *  ixgbe_set_vmdq_san_mac - Associate VMDq index 127 with a receive address
932a621e3c8SJack F Vogel  *  @hw: pointer to hardware structure
933a621e3c8SJack F Vogel  *  @vmdq: VMDq default pool index
934a621e3c8SJack F Vogel  **/
935a621e3c8SJack F Vogel s32 ixgbe_set_vmdq_san_mac(struct ixgbe_hw *hw, u32 vmdq)
936a621e3c8SJack F Vogel {
937a621e3c8SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vmdq_san_mac,
938a621e3c8SJack F Vogel 			       (hw, vmdq), IXGBE_NOT_IMPLEMENTED);
9399ca4041bSJack F Vogel }
9409ca4041bSJack F Vogel 
9419ca4041bSJack F Vogel /**
9425b7f4cedSJack F Vogel  *  ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address
9435b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
9445b7f4cedSJack F Vogel  *  @rar: receive address register index to disassociate with VMDq index
9455b7f4cedSJack F Vogel  *  @vmdq: VMDq set or pool index
9465b7f4cedSJack F Vogel  **/
9475b7f4cedSJack F Vogel s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
9485b7f4cedSJack F Vogel {
9495b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq),
9505b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
9515b7f4cedSJack F Vogel }
9525b7f4cedSJack F Vogel 
9535b7f4cedSJack F Vogel /**
95413705f88SJack F Vogel  *  ixgbe_init_rx_addrs - Initializes receive address filters.
95513705f88SJack F Vogel  *  @hw: pointer to hardware structure
95613705f88SJack F Vogel  *
95713705f88SJack F Vogel  *  Places the MAC address in receive address register 0 and clears the rest
9589ca4041bSJack F Vogel  *  of the receive address registers. Clears the multicast table. Assumes
95913705f88SJack F Vogel  *  the receiver is in reset when the routine is called.
96013705f88SJack F Vogel  **/
96113705f88SJack F Vogel s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw)
96213705f88SJack F Vogel {
9639ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw),
96413705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
96513705f88SJack F Vogel }
96613705f88SJack F Vogel 
96713705f88SJack F Vogel /**
96813705f88SJack F Vogel  *  ixgbe_get_num_rx_addrs - Returns the number of RAR entries.
96913705f88SJack F Vogel  *  @hw: pointer to hardware structure
97013705f88SJack F Vogel  **/
97113705f88SJack F Vogel u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw)
97213705f88SJack F Vogel {
9739ca4041bSJack F Vogel 	return hw->mac.num_rar_entries;
9749ca4041bSJack F Vogel }
9759ca4041bSJack F Vogel 
9769ca4041bSJack F Vogel /**
9779ca4041bSJack F Vogel  *  ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses
9789ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
9799ca4041bSJack F Vogel  *  @addr_list: the list of new multicast addresses
9809ca4041bSJack F Vogel  *  @addr_count: number of addresses
9819ca4041bSJack F Vogel  *  @func: iterator function to walk the multicast address list
9829ca4041bSJack F Vogel  *
9839ca4041bSJack F Vogel  *  The given list replaces any existing list. Clears the secondary addrs from
9849ca4041bSJack F Vogel  *  receive address registers. Uses unused receive address registers for the
9859ca4041bSJack F Vogel  *  first secondary addresses, and falls back to promiscuous mode as needed.
9869ca4041bSJack F Vogel  **/
9879ca4041bSJack F Vogel s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list,
9889ca4041bSJack F Vogel 			      u32 addr_count, ixgbe_mc_addr_itr func)
9899ca4041bSJack F Vogel {
9909ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw,
9919ca4041bSJack F Vogel 			       addr_list, addr_count, func),
9929ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
99313705f88SJack F Vogel }
99413705f88SJack F Vogel 
99513705f88SJack F Vogel /**
99613705f88SJack F Vogel  *  ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses
99713705f88SJack F Vogel  *  @hw: pointer to hardware structure
99813705f88SJack F Vogel  *  @mc_addr_list: the list of new multicast addresses
99913705f88SJack F Vogel  *  @mc_addr_count: number of addresses
10009ca4041bSJack F Vogel  *  @func: iterator function to walk the multicast address list
100113705f88SJack F Vogel  *
100213705f88SJack F Vogel  *  The given list replaces any existing list. Clears the MC addrs from receive
10039ca4041bSJack F Vogel  *  address registers and the multicast table. Uses unused receive address
100413705f88SJack F Vogel  *  registers for the first multicast addresses, and hashes the rest into the
100513705f88SJack F Vogel  *  multicast table.
100613705f88SJack F Vogel  **/
100713705f88SJack F Vogel s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list,
100885d0a26eSJack F Vogel 			      u32 mc_addr_count, ixgbe_mc_addr_itr func,
100985d0a26eSJack F Vogel 			      bool clear)
101013705f88SJack F Vogel {
10119ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw,
101285d0a26eSJack F Vogel 			       mc_addr_list, mc_addr_count, func, clear),
101313705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
101413705f88SJack F Vogel }
101513705f88SJack F Vogel 
101613705f88SJack F Vogel /**
101713705f88SJack F Vogel  *  ixgbe_enable_mc - Enable multicast address in RAR
101813705f88SJack F Vogel  *  @hw: pointer to hardware structure
101913705f88SJack F Vogel  *
102013705f88SJack F Vogel  *  Enables multicast address in RAR and the use of the multicast hash table.
102113705f88SJack F Vogel  **/
102213705f88SJack F Vogel s32 ixgbe_enable_mc(struct ixgbe_hw *hw)
102313705f88SJack F Vogel {
10249ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw),
102513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
102613705f88SJack F Vogel }
102713705f88SJack F Vogel 
102813705f88SJack F Vogel /**
102913705f88SJack F Vogel  *  ixgbe_disable_mc - Disable multicast address in RAR
103013705f88SJack F Vogel  *  @hw: pointer to hardware structure
103113705f88SJack F Vogel  *
103213705f88SJack F Vogel  *  Disables multicast address in RAR and the use of the multicast hash table.
103313705f88SJack F Vogel  **/
103413705f88SJack F Vogel s32 ixgbe_disable_mc(struct ixgbe_hw *hw)
103513705f88SJack F Vogel {
10369ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw),
103713705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
103813705f88SJack F Vogel }
103913705f88SJack F Vogel 
104013705f88SJack F Vogel /**
104113705f88SJack F Vogel  *  ixgbe_clear_vfta - Clear VLAN filter table
104213705f88SJack F Vogel  *  @hw: pointer to hardware structure
104313705f88SJack F Vogel  *
104413705f88SJack F Vogel  *  Clears the VLAN filer table, and the VMDq index associated with the filter
104513705f88SJack F Vogel  **/
104613705f88SJack F Vogel s32 ixgbe_clear_vfta(struct ixgbe_hw *hw)
104713705f88SJack F Vogel {
10489ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw),
104913705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
105013705f88SJack F Vogel }
105113705f88SJack F Vogel 
105213705f88SJack F Vogel /**
105313705f88SJack F Vogel  *  ixgbe_set_vfta - Set VLAN filter table
105413705f88SJack F Vogel  *  @hw: pointer to hardware structure
105513705f88SJack F Vogel  *  @vlan: VLAN id to write to VLAN filter
105613705f88SJack F Vogel  *  @vind: VMDq output index that maps queue to VLAN id in VFTA
105713705f88SJack F Vogel  *  @vlan_on: boolean flag to turn on/off VLAN in VFTA
105813705f88SJack F Vogel  *
105913705f88SJack F Vogel  *  Turn on/off specified VLAN in the VLAN filter table.
106013705f88SJack F Vogel  **/
106113705f88SJack F Vogel s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on)
106213705f88SJack F Vogel {
10639ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind,
106413705f88SJack F Vogel 			       vlan_on), IXGBE_NOT_IMPLEMENTED);
106513705f88SJack F Vogel }
106613705f88SJack F Vogel 
106713705f88SJack F Vogel /**
106885d0a26eSJack F Vogel  *  ixgbe_set_vlvf - Set VLAN Pool Filter
106985d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
107085d0a26eSJack F Vogel  *  @vlan: VLAN id to write to VLAN filter
107185d0a26eSJack F Vogel  *  @vind: VMDq output index that maps queue to VLAN id in VFVFB
107285d0a26eSJack F Vogel  *  @vlan_on: boolean flag to turn on/off VLAN in VFVF
107385d0a26eSJack F Vogel  *  @vfta_changed: pointer to boolean flag which indicates whether VFTA
107485d0a26eSJack F Vogel  *                 should be changed
107585d0a26eSJack F Vogel  *
107685d0a26eSJack F Vogel  *  Turn on/off specified bit in VLVF table.
107785d0a26eSJack F Vogel  **/
107885d0a26eSJack F Vogel s32 ixgbe_set_vlvf(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on,
107985d0a26eSJack F Vogel 		    bool *vfta_changed)
108085d0a26eSJack F Vogel {
108185d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vlvf, (hw, vlan, vind,
108285d0a26eSJack F Vogel 			       vlan_on, vfta_changed), IXGBE_NOT_IMPLEMENTED);
108385d0a26eSJack F Vogel }
108485d0a26eSJack F Vogel 
108585d0a26eSJack F Vogel /**
10860ac6dfecSJack F Vogel  *  ixgbe_fc_enable - Enable flow control
108713705f88SJack F Vogel  *  @hw: pointer to hardware structure
108813705f88SJack F Vogel  *
108913705f88SJack F Vogel  *  Configures the flow control settings based on SW configuration.
109013705f88SJack F Vogel  **/
1091a621e3c8SJack F Vogel s32 ixgbe_fc_enable(struct ixgbe_hw *hw)
109213705f88SJack F Vogel {
1093a621e3c8SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.fc_enable, (hw),
109413705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
109513705f88SJack F Vogel }
109613705f88SJack F Vogel 
10973ec35e52SJack F Vogel /**
1098758cc3dcSJack F Vogel  *  ixgbe_setup_fc - Set up flow control
1099758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1100758cc3dcSJack F Vogel  *
1101758cc3dcSJack F Vogel  *  Called at init time to set up flow control.
1102758cc3dcSJack F Vogel  **/
1103758cc3dcSJack F Vogel s32 ixgbe_setup_fc(struct ixgbe_hw *hw)
1104758cc3dcSJack F Vogel {
1105758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_fc, (hw),
1106758cc3dcSJack F Vogel 		IXGBE_NOT_IMPLEMENTED);
1107758cc3dcSJack F Vogel }
1108758cc3dcSJack F Vogel 
1109758cc3dcSJack F Vogel /**
111085d0a26eSJack F Vogel  * ixgbe_set_fw_drv_ver - Try to send the driver version number FW
111185d0a26eSJack F Vogel  * @hw: pointer to hardware structure
111285d0a26eSJack F Vogel  * @maj: driver major number to be sent to firmware
111385d0a26eSJack F Vogel  * @min: driver minor number to be sent to firmware
111485d0a26eSJack F Vogel  * @build: driver build number to be sent to firmware
111585d0a26eSJack F Vogel  * @ver: driver version number to be sent to firmware
111685d0a26eSJack F Vogel  **/
111785d0a26eSJack F Vogel s32 ixgbe_set_fw_drv_ver(struct ixgbe_hw *hw, u8 maj, u8 min, u8 build,
111885d0a26eSJack F Vogel 			 u8 ver)
111985d0a26eSJack F Vogel {
112085d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_fw_drv_ver, (hw, maj, min,
112185d0a26eSJack F Vogel 			       build, ver), IXGBE_NOT_IMPLEMENTED);
112285d0a26eSJack F Vogel }
112385d0a26eSJack F Vogel 
112485d0a26eSJack F Vogel 
1125fd75b91dSJack F Vogel 
1126758cc3dcSJack F Vogel /**
1127758cc3dcSJack F Vogel  *  ixgbe_dmac_config - Configure DMA Coalescing registers.
1128758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1129758cc3dcSJack F Vogel  *
1130758cc3dcSJack F Vogel  *  Configure DMA coalescing. If enabling dmac, dmac is activated.
1131758cc3dcSJack F Vogel  *  When disabling dmac, dmac enable dmac bit is cleared.
1132758cc3dcSJack F Vogel  **/
1133758cc3dcSJack F Vogel s32 ixgbe_dmac_config(struct ixgbe_hw *hw)
1134758cc3dcSJack F Vogel {
1135758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.dmac_config, (hw),
1136758cc3dcSJack F Vogel 				IXGBE_NOT_IMPLEMENTED);
1137758cc3dcSJack F Vogel }
1138758cc3dcSJack F Vogel 
1139758cc3dcSJack F Vogel /**
1140758cc3dcSJack F Vogel  *  ixgbe_dmac_update_tcs - Configure DMA Coalescing registers.
1141758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1142758cc3dcSJack F Vogel  *
1143758cc3dcSJack F Vogel  *  Disables dmac, updates per TC settings, and then enable dmac.
1144758cc3dcSJack F Vogel  **/
1145758cc3dcSJack F Vogel s32 ixgbe_dmac_update_tcs(struct ixgbe_hw *hw)
1146758cc3dcSJack F Vogel {
1147758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.dmac_update_tcs, (hw),
1148758cc3dcSJack F Vogel 				IXGBE_NOT_IMPLEMENTED);
1149758cc3dcSJack F Vogel }
1150758cc3dcSJack F Vogel 
1151758cc3dcSJack F Vogel /**
1152758cc3dcSJack F Vogel  *  ixgbe_dmac_config_tcs - Configure DMA Coalescing registers.
1153758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1154758cc3dcSJack F Vogel  *
1155758cc3dcSJack F Vogel  *  Configure DMA coalescing threshold per TC and set high priority bit for
1156758cc3dcSJack F Vogel  *  FCOE TC. The dmac enable bit must be cleared before configuring.
1157758cc3dcSJack F Vogel  **/
1158758cc3dcSJack F Vogel s32 ixgbe_dmac_config_tcs(struct ixgbe_hw *hw)
1159758cc3dcSJack F Vogel {
1160758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.dmac_config_tcs, (hw),
1161758cc3dcSJack F Vogel 				IXGBE_NOT_IMPLEMENTED);
1162758cc3dcSJack F Vogel }
1163758cc3dcSJack F Vogel 
1164758cc3dcSJack F Vogel /**
1165758cc3dcSJack F Vogel  *  ixgbe_setup_eee - Enable/disable EEE support
1166758cc3dcSJack F Vogel  *  @hw: pointer to the HW structure
1167758cc3dcSJack F Vogel  *  @enable_eee: boolean flag to enable EEE
1168758cc3dcSJack F Vogel  *
1169758cc3dcSJack F Vogel  *  Enable/disable EEE based on enable_ee flag.
1170758cc3dcSJack F Vogel  *  Auto-negotiation must be started after BASE-T EEE bits in PHY register 7.3C
1171758cc3dcSJack F Vogel  *  are modified.
1172758cc3dcSJack F Vogel  *
1173758cc3dcSJack F Vogel  **/
1174758cc3dcSJack F Vogel s32 ixgbe_setup_eee(struct ixgbe_hw *hw, bool enable_eee)
1175758cc3dcSJack F Vogel {
1176758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_eee, (hw, enable_eee),
1177758cc3dcSJack F Vogel 			IXGBE_NOT_IMPLEMENTED);
1178758cc3dcSJack F Vogel }
1179758cc3dcSJack F Vogel 
1180758cc3dcSJack F Vogel /**
1181758cc3dcSJack F Vogel  * ixgbe_set_source_address_pruning - Enable/Disable source address pruning
1182758cc3dcSJack F Vogel  * @hw: pointer to hardware structure
1183758cc3dcSJack F Vogel  * @enbale: enable or disable source address pruning
1184758cc3dcSJack F Vogel  * @pool: Rx pool - Rx pool to toggle source address pruning
1185758cc3dcSJack F Vogel  **/
1186758cc3dcSJack F Vogel void ixgbe_set_source_address_pruning(struct ixgbe_hw *hw, bool enable,
1187758cc3dcSJack F Vogel 				      unsigned int pool)
1188758cc3dcSJack F Vogel {
1189758cc3dcSJack F Vogel 	if (hw->mac.ops.set_source_address_pruning)
1190758cc3dcSJack F Vogel 		hw->mac.ops.set_source_address_pruning(hw, enable, pool);
1191758cc3dcSJack F Vogel }
1192758cc3dcSJack F Vogel 
1193758cc3dcSJack F Vogel /**
1194758cc3dcSJack F Vogel  *  ixgbe_set_ethertype_anti_spoofing - Enable/Disable Ethertype anti-spoofing
1195758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1196758cc3dcSJack F Vogel  *  @enable: enable or disable switch for Ethertype anti-spoofing
1197758cc3dcSJack F Vogel  *  @vf: Virtual Function pool - VF Pool to set for Ethertype anti-spoofing
1198758cc3dcSJack F Vogel  *
1199758cc3dcSJack F Vogel  **/
1200758cc3dcSJack F Vogel void ixgbe_set_ethertype_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf)
1201758cc3dcSJack F Vogel {
1202758cc3dcSJack F Vogel 	if (hw->mac.ops.set_ethertype_anti_spoofing)
1203758cc3dcSJack F Vogel 		hw->mac.ops.set_ethertype_anti_spoofing(hw, enable, vf);
1204758cc3dcSJack F Vogel }
1205758cc3dcSJack F Vogel 
1206758cc3dcSJack F Vogel /**
1207758cc3dcSJack F Vogel  *  ixgbe_read_iosf_sb_reg - Read 32 bit PHY register
1208758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1209758cc3dcSJack F Vogel  *  @reg_addr: 32 bit address of PHY register to read
1210758cc3dcSJack F Vogel  *  @device_type: type of device you want to communicate with
1211758cc3dcSJack F Vogel  *  @phy_data: Pointer to read data from PHY register
1212758cc3dcSJack F Vogel  *
1213758cc3dcSJack F Vogel  *  Reads a value from a specified PHY register
1214758cc3dcSJack F Vogel  **/
1215758cc3dcSJack F Vogel s32 ixgbe_read_iosf_sb_reg(struct ixgbe_hw *hw, u32 reg_addr,
1216758cc3dcSJack F Vogel 			   u32 device_type, u32 *phy_data)
1217758cc3dcSJack F Vogel {
1218758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.read_iosf_sb_reg, (hw, reg_addr,
1219758cc3dcSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
1220758cc3dcSJack F Vogel }
1221758cc3dcSJack F Vogel 
1222758cc3dcSJack F Vogel /**
1223758cc3dcSJack F Vogel  *  ixgbe_write_iosf_sb_reg - Write 32 bit register through IOSF Sideband
1224758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1225758cc3dcSJack F Vogel  *  @reg_addr: 32 bit PHY register to write
1226758cc3dcSJack F Vogel  *  @device_type: type of device you want to communicate with
1227758cc3dcSJack F Vogel  *  @phy_data: Data to write to the PHY register
1228758cc3dcSJack F Vogel  *
1229758cc3dcSJack F Vogel  *  Writes a value to specified PHY register
1230758cc3dcSJack F Vogel  **/
1231758cc3dcSJack F Vogel s32 ixgbe_write_iosf_sb_reg(struct ixgbe_hw *hw, u32 reg_addr,
1232758cc3dcSJack F Vogel 			    u32 device_type, u32 phy_data)
1233758cc3dcSJack F Vogel {
1234758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.write_iosf_sb_reg, (hw, reg_addr,
1235758cc3dcSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
1236758cc3dcSJack F Vogel }
1237758cc3dcSJack F Vogel 
1238758cc3dcSJack F Vogel /**
1239758cc3dcSJack F Vogel  *  ixgbe_disable_mdd - Disable malicious driver detection
1240758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1241758cc3dcSJack F Vogel  *
1242758cc3dcSJack F Vogel  **/
1243758cc3dcSJack F Vogel void ixgbe_disable_mdd(struct ixgbe_hw *hw)
1244758cc3dcSJack F Vogel {
1245758cc3dcSJack F Vogel 	if (hw->mac.ops.disable_mdd)
1246758cc3dcSJack F Vogel 		hw->mac.ops.disable_mdd(hw);
1247758cc3dcSJack F Vogel }
1248758cc3dcSJack F Vogel 
1249758cc3dcSJack F Vogel /**
1250758cc3dcSJack F Vogel  *  ixgbe_enable_mdd - Enable malicious driver detection
1251758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1252758cc3dcSJack F Vogel  *
1253758cc3dcSJack F Vogel  **/
1254758cc3dcSJack F Vogel void ixgbe_enable_mdd(struct ixgbe_hw *hw)
1255758cc3dcSJack F Vogel {
1256758cc3dcSJack F Vogel 	if (hw->mac.ops.enable_mdd)
1257758cc3dcSJack F Vogel 		hw->mac.ops.enable_mdd(hw);
1258758cc3dcSJack F Vogel }
1259758cc3dcSJack F Vogel 
1260758cc3dcSJack F Vogel /**
1261758cc3dcSJack F Vogel  *  ixgbe_mdd_event - Handle malicious driver detection event
1262758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1263758cc3dcSJack F Vogel  *  @vf_bitmap: vf bitmap of malicious vfs
1264758cc3dcSJack F Vogel  *
1265758cc3dcSJack F Vogel  **/
1266758cc3dcSJack F Vogel void ixgbe_mdd_event(struct ixgbe_hw *hw, u32 *vf_bitmap)
1267758cc3dcSJack F Vogel {
1268758cc3dcSJack F Vogel 	if (hw->mac.ops.mdd_event)
1269758cc3dcSJack F Vogel 		hw->mac.ops.mdd_event(hw, vf_bitmap);
1270758cc3dcSJack F Vogel }
1271758cc3dcSJack F Vogel 
1272758cc3dcSJack F Vogel /**
1273758cc3dcSJack F Vogel  *  ixgbe_restore_mdd_vf - Restore VF that was disabled during malicious driver
1274758cc3dcSJack F Vogel  *  detection event
1275758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1276758cc3dcSJack F Vogel  *  @vf: vf index
1277758cc3dcSJack F Vogel  *
1278758cc3dcSJack F Vogel  **/
1279758cc3dcSJack F Vogel void ixgbe_restore_mdd_vf(struct ixgbe_hw *hw, u32 vf)
1280758cc3dcSJack F Vogel {
1281758cc3dcSJack F Vogel 	if (hw->mac.ops.restore_mdd_vf)
1282758cc3dcSJack F Vogel 		hw->mac.ops.restore_mdd_vf(hw, vf);
1283758cc3dcSJack F Vogel }
1284758cc3dcSJack F Vogel 
1285758cc3dcSJack F Vogel /**
1286758cc3dcSJack F Vogel  *  ixgbe_enter_lplu - Transition to low power states
1287758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1288758cc3dcSJack F Vogel  *
1289758cc3dcSJack F Vogel  * Configures Low Power Link Up on transition to low power states
1290758cc3dcSJack F Vogel  * (from D0 to non-D0).
1291758cc3dcSJack F Vogel  **/
1292758cc3dcSJack F Vogel s32 ixgbe_enter_lplu(struct ixgbe_hw *hw)
1293758cc3dcSJack F Vogel {
1294758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.enter_lplu, (hw),
1295758cc3dcSJack F Vogel 				IXGBE_NOT_IMPLEMENTED);
1296758cc3dcSJack F Vogel }
1297fd75b91dSJack F Vogel 
129885d0a26eSJack F Vogel /**
12996f37f232SEric Joyner  * ixgbe_handle_lasi - Handle external Base T PHY interrupt
13006f37f232SEric Joyner  * @hw: pointer to hardware structure
13016f37f232SEric Joyner  *
13026f37f232SEric Joyner  * Handle external Base T PHY interrupt. If high temperature
13036f37f232SEric Joyner  * failure alarm then return error, else if link status change
13046f37f232SEric Joyner  * then setup internal/external PHY link
13056f37f232SEric Joyner  *
13066f37f232SEric Joyner  * Return IXGBE_ERR_OVERTEMP if interrupt is high temperature
13076f37f232SEric Joyner  * failure alarm, else return PHY access status.
13086f37f232SEric Joyner  */
13096f37f232SEric Joyner s32 ixgbe_handle_lasi(struct ixgbe_hw *hw)
13106f37f232SEric Joyner {
13116f37f232SEric Joyner 	return ixgbe_call_func(hw, hw->phy.ops.handle_lasi, (hw),
13126f37f232SEric Joyner 				IXGBE_NOT_IMPLEMENTED);
13136f37f232SEric Joyner }
13146f37f232SEric Joyner 
13156f37f232SEric Joyner /**
13163ec35e52SJack F Vogel  *  ixgbe_read_analog_reg8 - Reads 8 bit analog register
13173ec35e52SJack F Vogel  *  @hw: pointer to hardware structure
13183ec35e52SJack F Vogel  *  @reg: analog register to read
13193ec35e52SJack F Vogel  *  @val: read value
13203ec35e52SJack F Vogel  *
13213ec35e52SJack F Vogel  *  Performs write operation to analog register specified.
13223ec35e52SJack F Vogel  **/
13233ec35e52SJack F Vogel s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val)
13243ec35e52SJack F Vogel {
13259ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg,
13269ca4041bSJack F Vogel 			       val), IXGBE_NOT_IMPLEMENTED);
13273ec35e52SJack F Vogel }
13283ec35e52SJack F Vogel 
13293ec35e52SJack F Vogel /**
13303ec35e52SJack F Vogel  *  ixgbe_write_analog_reg8 - Writes 8 bit analog register
13313ec35e52SJack F Vogel  *  @hw: pointer to hardware structure
13323ec35e52SJack F Vogel  *  @reg: analog register to write
13333ec35e52SJack F Vogel  *  @val: value to write
13343ec35e52SJack F Vogel  *
13353ec35e52SJack F Vogel  *  Performs write operation to Atlas analog register specified.
13363ec35e52SJack F Vogel  **/
13373ec35e52SJack F Vogel s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val)
13383ec35e52SJack F Vogel {
13399ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg,
13409ca4041bSJack F Vogel 			       val), IXGBE_NOT_IMPLEMENTED);
13413ec35e52SJack F Vogel }
13423ec35e52SJack F Vogel 
13435b7f4cedSJack F Vogel /**
13445b7f4cedSJack F Vogel  *  ixgbe_init_uta_tables - Initializes Unicast Table Arrays.
13455b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
13465b7f4cedSJack F Vogel  *
13475b7f4cedSJack F Vogel  *  Initializes the Unicast Table Arrays to zero on device load.  This
13485b7f4cedSJack F Vogel  *  is part of the Rx init addr execution path.
13495b7f4cedSJack F Vogel  **/
13505b7f4cedSJack F Vogel s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw)
13515b7f4cedSJack F Vogel {
13525b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw),
13535b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
13545b7f4cedSJack F Vogel }
13551b6e0dbaSJack F Vogel 
13561b6e0dbaSJack F Vogel /**
13570ac6dfecSJack F Vogel  *  ixgbe_read_i2c_byte - Reads 8 bit word over I2C at specified device address
13580ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
13590ac6dfecSJack F Vogel  *  @byte_offset: byte offset to read
1360758cc3dcSJack F Vogel  *  @dev_addr: I2C bus address to read from
13610ac6dfecSJack F Vogel  *  @data: value read
13620ac6dfecSJack F Vogel  *
13630ac6dfecSJack F Vogel  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
13640ac6dfecSJack F Vogel  **/
13650ac6dfecSJack F Vogel s32 ixgbe_read_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr,
13660ac6dfecSJack F Vogel 			u8 *data)
13670ac6dfecSJack F Vogel {
13680ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte, (hw, byte_offset,
13690ac6dfecSJack F Vogel 			       dev_addr, data), IXGBE_NOT_IMPLEMENTED);
13700ac6dfecSJack F Vogel }
13710ac6dfecSJack F Vogel 
13720ac6dfecSJack F Vogel /**
13736f37f232SEric Joyner  *  ixgbe_read_i2c_byte_unlocked - Reads 8 bit word via I2C from device address
13746f37f232SEric Joyner  *  @hw: pointer to hardware structure
13756f37f232SEric Joyner  *  @byte_offset: byte offset to read
13766f37f232SEric Joyner  *  @dev_addr: I2C bus address to read from
13776f37f232SEric Joyner  *  @data: value read
13786f37f232SEric Joyner  *
13796f37f232SEric Joyner  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
13806f37f232SEric Joyner  **/
13816f37f232SEric Joyner s32 ixgbe_read_i2c_byte_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
13826f37f232SEric Joyner 				 u8 dev_addr, u8 *data)
13836f37f232SEric Joyner {
13846f37f232SEric Joyner 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte_unlocked,
13856f37f232SEric Joyner 			       (hw, byte_offset, dev_addr, data),
13866f37f232SEric Joyner 			       IXGBE_NOT_IMPLEMENTED);
13876f37f232SEric Joyner }
13886f37f232SEric Joyner 
13896f37f232SEric Joyner /**
1390758cc3dcSJack F Vogel  * ixgbe_read_i2c_combined - Perform I2C read combined operation
1391758cc3dcSJack F Vogel  * @hw: pointer to the hardware structure
1392758cc3dcSJack F Vogel  * @addr: I2C bus address to read from
1393758cc3dcSJack F Vogel  * @reg: I2C device register to read from
1394758cc3dcSJack F Vogel  * @val: pointer to location to receive read value
1395758cc3dcSJack F Vogel  *
1396758cc3dcSJack F Vogel  * Returns an error code on error.
1397758cc3dcSJack F Vogel  */
1398758cc3dcSJack F Vogel s32 ixgbe_read_i2c_combined(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 *val)
1399758cc3dcSJack F Vogel {
1400758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_combined, (hw, addr,
1401758cc3dcSJack F Vogel 			       reg, val), IXGBE_NOT_IMPLEMENTED);
1402758cc3dcSJack F Vogel }
1403758cc3dcSJack F Vogel 
1404758cc3dcSJack F Vogel /**
14056f37f232SEric Joyner  * ixgbe_read_i2c_combined_unlocked - Perform I2C read combined operation
14066f37f232SEric Joyner  * @hw: pointer to the hardware structure
14076f37f232SEric Joyner  * @addr: I2C bus address to read from
14086f37f232SEric Joyner  * @reg: I2C device register to read from
14096f37f232SEric Joyner  * @val: pointer to location to receive read value
14106f37f232SEric Joyner  *
14116f37f232SEric Joyner  * Returns an error code on error.
14126f37f232SEric Joyner  **/
14136f37f232SEric Joyner s32 ixgbe_read_i2c_combined_unlocked(struct ixgbe_hw *hw, u8 addr, u16 reg,
14146f37f232SEric Joyner 				     u16 *val)
14156f37f232SEric Joyner {
14166f37f232SEric Joyner 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_combined_unlocked,
14176f37f232SEric Joyner 			       (hw, addr, reg, val),
14186f37f232SEric Joyner 			       IXGBE_NOT_IMPLEMENTED);
14196f37f232SEric Joyner }
14206f37f232SEric Joyner 
14216f37f232SEric Joyner /**
14220ac6dfecSJack F Vogel  *  ixgbe_write_i2c_byte - Writes 8 bit word over I2C
14230ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
14240ac6dfecSJack F Vogel  *  @byte_offset: byte offset to write
1425758cc3dcSJack F Vogel  *  @dev_addr: I2C bus address to write to
14260ac6dfecSJack F Vogel  *  @data: value to write
14270ac6dfecSJack F Vogel  *
14280ac6dfecSJack F Vogel  *  Performs byte write operation to SFP module's EEPROM over I2C interface
14290ac6dfecSJack F Vogel  *  at a specified device address.
14300ac6dfecSJack F Vogel  **/
14310ac6dfecSJack F Vogel s32 ixgbe_write_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr,
14320ac6dfecSJack F Vogel 			 u8 data)
14330ac6dfecSJack F Vogel {
14340ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte, (hw, byte_offset,
14350ac6dfecSJack F Vogel 			       dev_addr, data), IXGBE_NOT_IMPLEMENTED);
14360ac6dfecSJack F Vogel }
14370ac6dfecSJack F Vogel 
14380ac6dfecSJack F Vogel /**
14396f37f232SEric Joyner  *  ixgbe_write_i2c_byte_unlocked - Writes 8 bit word over I2C
14406f37f232SEric Joyner  *  @hw: pointer to hardware structure
14416f37f232SEric Joyner  *  @byte_offset: byte offset to write
14426f37f232SEric Joyner  *  @dev_addr: I2C bus address to write to
14436f37f232SEric Joyner  *  @data: value to write
14446f37f232SEric Joyner  *
14456f37f232SEric Joyner  *  Performs byte write operation to SFP module's EEPROM over I2C interface
14466f37f232SEric Joyner  *  at a specified device address.
14476f37f232SEric Joyner  **/
14486f37f232SEric Joyner s32 ixgbe_write_i2c_byte_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
14496f37f232SEric Joyner 				  u8 dev_addr, u8 data)
14506f37f232SEric Joyner {
14516f37f232SEric Joyner 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte_unlocked,
14526f37f232SEric Joyner 			       (hw, byte_offset, dev_addr, data),
14536f37f232SEric Joyner 			       IXGBE_NOT_IMPLEMENTED);
14546f37f232SEric Joyner }
14556f37f232SEric Joyner 
14566f37f232SEric Joyner /**
1457758cc3dcSJack F Vogel  * ixgbe_write_i2c_combined - Perform I2C write combined operation
1458758cc3dcSJack F Vogel  * @hw: pointer to the hardware structure
1459758cc3dcSJack F Vogel  * @addr: I2C bus address to write to
1460758cc3dcSJack F Vogel  * @reg: I2C device register to write to
1461758cc3dcSJack F Vogel  * @val: value to write
1462758cc3dcSJack F Vogel  *
1463758cc3dcSJack F Vogel  * Returns an error code on error.
1464758cc3dcSJack F Vogel  */
1465758cc3dcSJack F Vogel s32 ixgbe_write_i2c_combined(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 val)
1466758cc3dcSJack F Vogel {
1467758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_combined, (hw, addr,
1468758cc3dcSJack F Vogel 			       reg, val), IXGBE_NOT_IMPLEMENTED);
1469758cc3dcSJack F Vogel }
1470758cc3dcSJack F Vogel 
1471758cc3dcSJack F Vogel /**
14726f37f232SEric Joyner  * ixgbe_write_i2c_combined_unlocked - Perform I2C write combined operation
14736f37f232SEric Joyner  * @hw: pointer to the hardware structure
14746f37f232SEric Joyner  * @addr: I2C bus address to write to
14756f37f232SEric Joyner  * @reg: I2C device register to write to
14766f37f232SEric Joyner  * @val: value to write
14776f37f232SEric Joyner  *
14786f37f232SEric Joyner  * Returns an error code on error.
14796f37f232SEric Joyner  **/
14806f37f232SEric Joyner s32 ixgbe_write_i2c_combined_unlocked(struct ixgbe_hw *hw, u8 addr, u16 reg,
14816f37f232SEric Joyner 				      u16 val)
14826f37f232SEric Joyner {
14836f37f232SEric Joyner 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_combined_unlocked,
14846f37f232SEric Joyner 			       (hw, addr, reg, val), IXGBE_NOT_IMPLEMENTED);
14856f37f232SEric Joyner }
14866f37f232SEric Joyner 
14876f37f232SEric Joyner /**
14880ac6dfecSJack F Vogel  *  ixgbe_write_i2c_eeprom - Writes 8 bit EEPROM word over I2C interface
14890ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
14900ac6dfecSJack F Vogel  *  @byte_offset: EEPROM byte offset to write
14910ac6dfecSJack F Vogel  *  @eeprom_data: value to write
14920ac6dfecSJack F Vogel  *
14930ac6dfecSJack F Vogel  *  Performs byte write operation to SFP module's EEPROM over I2C interface.
14940ac6dfecSJack F Vogel  **/
14950ac6dfecSJack F Vogel s32 ixgbe_write_i2c_eeprom(struct ixgbe_hw *hw,
14960ac6dfecSJack F Vogel 			   u8 byte_offset, u8 eeprom_data)
14970ac6dfecSJack F Vogel {
14980ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_eeprom,
14990ac6dfecSJack F Vogel 			       (hw, byte_offset, eeprom_data),
15000ac6dfecSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
15010ac6dfecSJack F Vogel }
15020ac6dfecSJack F Vogel 
15030ac6dfecSJack F Vogel /**
15041b6e0dbaSJack F Vogel  *  ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface
15051b6e0dbaSJack F Vogel  *  @hw: pointer to hardware structure
15061b6e0dbaSJack F Vogel  *  @byte_offset: EEPROM byte offset to read
15071b6e0dbaSJack F Vogel  *  @eeprom_data: value read
15081b6e0dbaSJack F Vogel  *
15091b6e0dbaSJack F Vogel  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
15101b6e0dbaSJack F Vogel  **/
15111b6e0dbaSJack F Vogel s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data)
15121b6e0dbaSJack F Vogel {
15131b6e0dbaSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom,
15141b6e0dbaSJack F Vogel 			      (hw, byte_offset, eeprom_data),
15151b6e0dbaSJack F Vogel 			      IXGBE_NOT_IMPLEMENTED);
15161b6e0dbaSJack F Vogel }
15171b6e0dbaSJack F Vogel 
15181b6e0dbaSJack F Vogel /**
15191b6e0dbaSJack F Vogel  *  ixgbe_get_supported_physical_layer - Returns physical layer type
15201b6e0dbaSJack F Vogel  *  @hw: pointer to hardware structure
15211b6e0dbaSJack F Vogel  *
15221b6e0dbaSJack F Vogel  *  Determines physical layer capabilities of the current configuration.
15231b6e0dbaSJack F Vogel  **/
15241b6e0dbaSJack F Vogel u32 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw)
15251b6e0dbaSJack F Vogel {
15261b6e0dbaSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer,
15271b6e0dbaSJack F Vogel 			       (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN);
15281b6e0dbaSJack F Vogel }
15290ac6dfecSJack F Vogel 
15300ac6dfecSJack F Vogel /**
1531a621e3c8SJack F Vogel  *  ixgbe_enable_rx_dma - Enables Rx DMA unit, dependent on device specifics
15320ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
15330ac6dfecSJack F Vogel  *  @regval: bitfield to write to the Rx DMA register
15340ac6dfecSJack F Vogel  *
15350ac6dfecSJack F Vogel  *  Enables the Rx DMA unit of the device.
15360ac6dfecSJack F Vogel  **/
15370ac6dfecSJack F Vogel s32 ixgbe_enable_rx_dma(struct ixgbe_hw *hw, u32 regval)
15380ac6dfecSJack F Vogel {
15390ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_rx_dma,
15400ac6dfecSJack F Vogel 			       (hw, regval), IXGBE_NOT_IMPLEMENTED);
15410ac6dfecSJack F Vogel }
1542d8602bb9SJack F Vogel 
1543d8602bb9SJack F Vogel /**
154485d0a26eSJack F Vogel  *  ixgbe_disable_sec_rx_path - Stops the receive data path
154585d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
154685d0a26eSJack F Vogel  *
154785d0a26eSJack F Vogel  *  Stops the receive data path.
154885d0a26eSJack F Vogel  **/
154985d0a26eSJack F Vogel s32 ixgbe_disable_sec_rx_path(struct ixgbe_hw *hw)
155085d0a26eSJack F Vogel {
155185d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.disable_sec_rx_path,
155285d0a26eSJack F Vogel 				(hw), IXGBE_NOT_IMPLEMENTED);
155385d0a26eSJack F Vogel }
155485d0a26eSJack F Vogel 
155585d0a26eSJack F Vogel /**
155685d0a26eSJack F Vogel  *  ixgbe_enable_sec_rx_path - Enables the receive data path
155785d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
155885d0a26eSJack F Vogel  *
155985d0a26eSJack F Vogel  *  Enables the receive data path.
156085d0a26eSJack F Vogel  **/
156185d0a26eSJack F Vogel s32 ixgbe_enable_sec_rx_path(struct ixgbe_hw *hw)
156285d0a26eSJack F Vogel {
156385d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_sec_rx_path,
156485d0a26eSJack F Vogel 				(hw), IXGBE_NOT_IMPLEMENTED);
156585d0a26eSJack F Vogel }
156685d0a26eSJack F Vogel 
156785d0a26eSJack F Vogel /**
1568d8602bb9SJack F Vogel  *  ixgbe_acquire_swfw_semaphore - Acquire SWFW semaphore
1569d8602bb9SJack F Vogel  *  @hw: pointer to hardware structure
1570d8602bb9SJack F Vogel  *  @mask: Mask to specify which semaphore to acquire
1571d8602bb9SJack F Vogel  *
1572d8602bb9SJack F Vogel  *  Acquires the SWFW semaphore through SW_FW_SYNC register for the specified
1573d8602bb9SJack F Vogel  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
1574d8602bb9SJack F Vogel  **/
1575758cc3dcSJack F Vogel s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u32 mask)
1576d8602bb9SJack F Vogel {
1577d8602bb9SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.acquire_swfw_sync,
1578d8602bb9SJack F Vogel 			       (hw, mask), IXGBE_NOT_IMPLEMENTED);
1579d8602bb9SJack F Vogel }
1580d8602bb9SJack F Vogel 
1581d8602bb9SJack F Vogel /**
1582d8602bb9SJack F Vogel  *  ixgbe_release_swfw_semaphore - Release SWFW semaphore
1583d8602bb9SJack F Vogel  *  @hw: pointer to hardware structure
1584d8602bb9SJack F Vogel  *  @mask: Mask to specify which semaphore to release
1585d8602bb9SJack F Vogel  *
1586d8602bb9SJack F Vogel  *  Releases the SWFW semaphore through SW_FW_SYNC register for the specified
1587d8602bb9SJack F Vogel  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
1588d8602bb9SJack F Vogel  **/
1589758cc3dcSJack F Vogel void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u32 mask)
1590d8602bb9SJack F Vogel {
1591d8602bb9SJack F Vogel 	if (hw->mac.ops.release_swfw_sync)
1592d8602bb9SJack F Vogel 		hw->mac.ops.release_swfw_sync(hw, mask);
1593d8602bb9SJack F Vogel }
1594d8602bb9SJack F Vogel 
1595758cc3dcSJack F Vogel 
1596758cc3dcSJack F Vogel void ixgbe_disable_rx(struct ixgbe_hw *hw)
1597758cc3dcSJack F Vogel {
1598758cc3dcSJack F Vogel 	if (hw->mac.ops.disable_rx)
1599758cc3dcSJack F Vogel 		hw->mac.ops.disable_rx(hw);
1600758cc3dcSJack F Vogel }
1601758cc3dcSJack F Vogel 
1602758cc3dcSJack F Vogel void ixgbe_enable_rx(struct ixgbe_hw *hw)
1603758cc3dcSJack F Vogel {
1604758cc3dcSJack F Vogel 	if (hw->mac.ops.enable_rx)
1605758cc3dcSJack F Vogel 		hw->mac.ops.enable_rx(hw);
1606758cc3dcSJack F Vogel }
1607758cc3dcSJack F Vogel 
1608758cc3dcSJack F Vogel /**
1609758cc3dcSJack F Vogel  *  ixgbe_set_rate_select_speed - Set module link speed
1610758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1611758cc3dcSJack F Vogel  *  @speed: link speed to set
1612758cc3dcSJack F Vogel  *
1613758cc3dcSJack F Vogel  *  Set module link speed via the rate select.
1614758cc3dcSJack F Vogel  */
1615758cc3dcSJack F Vogel void ixgbe_set_rate_select_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed)
1616758cc3dcSJack F Vogel {
1617758cc3dcSJack F Vogel 	if (hw->mac.ops.set_rate_select_speed)
1618758cc3dcSJack F Vogel 		hw->mac.ops.set_rate_select_speed(hw, speed);
1619758cc3dcSJack F Vogel }
1620