xref: /freebsd/sys/dev/ixgbe/ixgbe_api.c (revision b622bdb4)
19ca4041bSJack F Vogel /******************************************************************************
27282444bSPedro F. Giffuni   SPDX-License-Identifier: BSD-3-Clause
313705f88SJack F Vogel 
48eb6488eSEric Joyner   Copyright (c) 2001-2017, Intel Corporation
513705f88SJack F Vogel   All rights reserved.
613705f88SJack F Vogel 
713705f88SJack F Vogel   Redistribution and use in source and binary forms, with or without
813705f88SJack F Vogel   modification, are permitted provided that the following conditions are met:
913705f88SJack F Vogel 
1013705f88SJack F Vogel    1. Redistributions of source code must retain the above copyright notice,
1113705f88SJack F Vogel       this list of conditions and the following disclaimer.
1213705f88SJack F Vogel 
1313705f88SJack F Vogel    2. Redistributions in binary form must reproduce the above copyright
1413705f88SJack F Vogel       notice, this list of conditions and the following disclaimer in the
1513705f88SJack F Vogel       documentation and/or other materials provided with the distribution.
1613705f88SJack F Vogel 
1713705f88SJack F Vogel    3. Neither the name of the Intel Corporation nor the names of its
1813705f88SJack F Vogel       contributors may be used to endorse or promote products derived from
1913705f88SJack F Vogel       this software without specific prior written permission.
2013705f88SJack F Vogel 
2113705f88SJack F Vogel   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2213705f88SJack F Vogel   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2313705f88SJack F Vogel   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2413705f88SJack F Vogel   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
2513705f88SJack F Vogel   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2613705f88SJack F Vogel   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2713705f88SJack F Vogel   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2813705f88SJack F Vogel   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2913705f88SJack F Vogel   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3013705f88SJack F Vogel   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3113705f88SJack F Vogel   POSSIBILITY OF SUCH DAMAGE.
3213705f88SJack F Vogel 
339ca4041bSJack F Vogel ******************************************************************************/
3413705f88SJack F Vogel /*$FreeBSD$*/
3513705f88SJack F Vogel 
3613705f88SJack F Vogel #include "ixgbe_api.h"
3713705f88SJack F Vogel #include "ixgbe_common.h"
3813705f88SJack F Vogel 
39a9ca1c79SSean Bruno #define IXGBE_EMPTY_PARAM
40a9ca1c79SSean Bruno 
416f37f232SEric Joyner static const u32 ixgbe_mvals_base[IXGBE_MVALS_IDX_LIMIT] = {
42a9ca1c79SSean Bruno 	IXGBE_MVALS_INIT(IXGBE_EMPTY_PARAM)
436f37f232SEric Joyner };
446f37f232SEric Joyner 
456f37f232SEric Joyner static const u32 ixgbe_mvals_X540[IXGBE_MVALS_IDX_LIMIT] = {
466f37f232SEric Joyner 	IXGBE_MVALS_INIT(_X540)
476f37f232SEric Joyner };
486f37f232SEric Joyner 
496f37f232SEric Joyner static const u32 ixgbe_mvals_X550[IXGBE_MVALS_IDX_LIMIT] = {
506f37f232SEric Joyner 	IXGBE_MVALS_INIT(_X550)
516f37f232SEric Joyner };
526f37f232SEric Joyner 
536f37f232SEric Joyner static const u32 ixgbe_mvals_X550EM_x[IXGBE_MVALS_IDX_LIMIT] = {
546f37f232SEric Joyner 	IXGBE_MVALS_INIT(_X550EM_x)
556f37f232SEric Joyner };
566f37f232SEric Joyner 
578eb6488eSEric Joyner static const u32 ixgbe_mvals_X550EM_a[IXGBE_MVALS_IDX_LIMIT] = {
588eb6488eSEric Joyner 	IXGBE_MVALS_INIT(_X550EM_a)
598eb6488eSEric Joyner };
608eb6488eSEric Joyner 
6113705f88SJack F Vogel /**
62fd75b91dSJack F Vogel  * ixgbe_dcb_get_rtrup2tc - read rtrup2tc reg
63fd75b91dSJack F Vogel  * @hw: pointer to hardware structure
64fd75b91dSJack F Vogel  * @map: pointer to u8 arr for returning map
65fd75b91dSJack F Vogel  *
66fd75b91dSJack F Vogel  * Read the rtrup2tc HW register and resolve its content into map
67fd75b91dSJack F Vogel  **/
68fd75b91dSJack F Vogel void ixgbe_dcb_get_rtrup2tc(struct ixgbe_hw *hw, u8 *map)
69fd75b91dSJack F Vogel {
70fd75b91dSJack F Vogel 	if (hw->mac.ops.get_rtrup2tc)
71fd75b91dSJack F Vogel 		hw->mac.ops.get_rtrup2tc(hw, map);
72fd75b91dSJack F Vogel }
73fd75b91dSJack F Vogel 
74fd75b91dSJack F Vogel /**
7513705f88SJack F Vogel  *  ixgbe_init_shared_code - Initialize the shared code
7613705f88SJack F Vogel  *  @hw: pointer to hardware structure
7713705f88SJack F Vogel  *
7813705f88SJack F Vogel  *  This will assign function pointers and assign the MAC type and PHY code.
7913705f88SJack F Vogel  *  Does not touch the hardware. This function must be called prior to any
8013705f88SJack F Vogel  *  other function in the shared code. The ixgbe_hw structure should be
8113705f88SJack F Vogel  *  memset to 0 prior to calling this function.  The following fields in
8213705f88SJack F Vogel  *  hw structure should be filled in prior to calling this function:
8313705f88SJack F Vogel  *  hw_addr, back, device_id, vendor_id, subsystem_device_id,
8413705f88SJack F Vogel  *  subsystem_vendor_id, and revision_id
8513705f88SJack F Vogel  **/
8613705f88SJack F Vogel s32 ixgbe_init_shared_code(struct ixgbe_hw *hw)
8713705f88SJack F Vogel {
883ec35e52SJack F Vogel 	s32 status;
8913705f88SJack F Vogel 
902969bf0eSJack F Vogel 	DEBUGFUNC("ixgbe_init_shared_code");
912969bf0eSJack F Vogel 
9213705f88SJack F Vogel 	/*
933ec35e52SJack F Vogel 	 * Set the mac type
943ec35e52SJack F Vogel 	 */
953ec35e52SJack F Vogel 	ixgbe_set_mac_type(hw);
963ec35e52SJack F Vogel 
973ec35e52SJack F Vogel 	switch (hw->mac.type) {
983ec35e52SJack F Vogel 	case ixgbe_mac_82598EB:
999ca4041bSJack F Vogel 		status = ixgbe_init_ops_82598(hw);
10013705f88SJack F Vogel 		break;
1010ac6dfecSJack F Vogel 	case ixgbe_mac_82599EB:
1020ac6dfecSJack F Vogel 		status = ixgbe_init_ops_82599(hw);
1030ac6dfecSJack F Vogel 		break;
10485d0a26eSJack F Vogel 	case ixgbe_mac_X540:
10585d0a26eSJack F Vogel 		status = ixgbe_init_ops_X540(hw);
10685d0a26eSJack F Vogel 		break;
107758cc3dcSJack F Vogel 	case ixgbe_mac_X550:
108758cc3dcSJack F Vogel 		status = ixgbe_init_ops_X550(hw);
109758cc3dcSJack F Vogel 		break;
110758cc3dcSJack F Vogel 	case ixgbe_mac_X550EM_x:
1118eb6488eSEric Joyner 		status = ixgbe_init_ops_X550EM_x(hw);
112758cc3dcSJack F Vogel 		break;
1138eb6488eSEric Joyner 	case ixgbe_mac_X550EM_a:
1148eb6488eSEric Joyner 		status = ixgbe_init_ops_X550EM_a(hw);
115758cc3dcSJack F Vogel 		break;
11613705f88SJack F Vogel 	default:
11713705f88SJack F Vogel 		status = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
11813705f88SJack F Vogel 		break;
11913705f88SJack F Vogel 	}
120a9ca1c79SSean Bruno 	hw->mac.max_link_up_time = IXGBE_LINK_UP_TIME;
12113705f88SJack F Vogel 
12213705f88SJack F Vogel 	return status;
12313705f88SJack F Vogel }
12413705f88SJack F Vogel 
12513705f88SJack F Vogel /**
1263ec35e52SJack F Vogel  *  ixgbe_set_mac_type - Sets MAC type
1273ec35e52SJack F Vogel  *  @hw: pointer to the HW structure
1283ec35e52SJack F Vogel  *
1293ec35e52SJack F Vogel  *  This function sets the mac type of the adapter based on the
1303ec35e52SJack F Vogel  *  vendor ID and device ID stored in the hw structure.
1313ec35e52SJack F Vogel  **/
1323ec35e52SJack F Vogel s32 ixgbe_set_mac_type(struct ixgbe_hw *hw)
1333ec35e52SJack F Vogel {
1343ec35e52SJack F Vogel 	s32 ret_val = IXGBE_SUCCESS;
1353ec35e52SJack F Vogel 
1369ca4041bSJack F Vogel 	DEBUGFUNC("ixgbe_set_mac_type\n");
1373ec35e52SJack F Vogel 
138fd75b91dSJack F Vogel 	if (hw->vendor_id != IXGBE_INTEL_VENDOR_ID) {
139fd75b91dSJack F Vogel 		ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED,
140fd75b91dSJack F Vogel 			     "Unsupported vendor id: %x", hw->vendor_id);
141fd75b91dSJack F Vogel 		return IXGBE_ERR_DEVICE_NOT_SUPPORTED;
142fd75b91dSJack F Vogel 	}
143fd75b91dSJack F Vogel 
1446f37f232SEric Joyner 	hw->mvals = ixgbe_mvals_base;
1456f37f232SEric Joyner 
1463ec35e52SJack F Vogel 	switch (hw->device_id) {
1471b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598:
1480ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82598_BX:
1493ec35e52SJack F Vogel 	case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
1503ec35e52SJack F Vogel 	case IXGBE_DEV_ID_82598AF_DUAL_PORT:
1519ca4041bSJack F Vogel 	case IXGBE_DEV_ID_82598AT:
1522969bf0eSJack F Vogel 	case IXGBE_DEV_ID_82598AT2:
1533ec35e52SJack F Vogel 	case IXGBE_DEV_ID_82598EB_CX4:
1549ca4041bSJack F Vogel 	case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
1551b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
1561b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
1579ca4041bSJack F Vogel 	case IXGBE_DEV_ID_82598EB_XF_LR:
1581b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598EB_SFP_LOM:
1593ec35e52SJack F Vogel 		hw->mac.type = ixgbe_mac_82598EB;
1603ec35e52SJack F Vogel 		break;
1610ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82599_KX4:
1622969bf0eSJack F Vogel 	case IXGBE_DEV_ID_82599_KX4_MEZZ:
163d8602bb9SJack F Vogel 	case IXGBE_DEV_ID_82599_XAUI_LOM:
1642969bf0eSJack F Vogel 	case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:
16585d0a26eSJack F Vogel 	case IXGBE_DEV_ID_82599_KR:
1660ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82599_SFP:
1671a4e3449SJack F Vogel 	case IXGBE_DEV_ID_82599_BACKPLANE_FCOE:
1681a4e3449SJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_FCOE:
16985d0a26eSJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_EM:
170a621e3c8SJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_SF2:
1710ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_SF_QP:
172758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_82599_QSFP_SF_QP:
17385d0a26eSJack F Vogel 	case IXGBE_DEV_ID_82599EN_SFP:
1740ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82599_CX4:
1750ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_82599_BYPASS:
176c0014855SJack F Vogel 	case IXGBE_DEV_ID_82599_T3_LOM:
1770ac6dfecSJack F Vogel 		hw->mac.type = ixgbe_mac_82599EB;
1780ac6dfecSJack F Vogel 		break;
17985d0a26eSJack F Vogel 	case IXGBE_DEV_ID_X540T:
180758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X540T1:
1810ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_X540_BYPASS:
18285d0a26eSJack F Vogel 		hw->mac.type = ixgbe_mac_X540;
1836f37f232SEric Joyner 		hw->mvals = ixgbe_mvals_X540;
18485d0a26eSJack F Vogel 		break;
185758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550T:
186a9ca1c79SSean Bruno 	case IXGBE_DEV_ID_X550T1:
187758cc3dcSJack F Vogel 		hw->mac.type = ixgbe_mac_X550;
1886f37f232SEric Joyner 		hw->mvals = ixgbe_mvals_X550;
189758cc3dcSJack F Vogel 		break;
190758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550EM_X_KX4:
191758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550EM_X_KR:
192758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550EM_X_10G_T:
193758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550EM_X_1G_T:
194758cc3dcSJack F Vogel 	case IXGBE_DEV_ID_X550EM_X_SFP:
1958eb6488eSEric Joyner 	case IXGBE_DEV_ID_X550EM_X_XFI:
196758cc3dcSJack F Vogel 		hw->mac.type = ixgbe_mac_X550EM_x;
1976f37f232SEric Joyner 		hw->mvals = ixgbe_mvals_X550EM_x;
198758cc3dcSJack F Vogel 		break;
1998eb6488eSEric Joyner 	case IXGBE_DEV_ID_X550EM_A_KR:
2008eb6488eSEric Joyner 	case IXGBE_DEV_ID_X550EM_A_KR_L:
2018eb6488eSEric Joyner 	case IXGBE_DEV_ID_X550EM_A_SFP_N:
2028eb6488eSEric Joyner 	case IXGBE_DEV_ID_X550EM_A_SGMII:
2038eb6488eSEric Joyner 	case IXGBE_DEV_ID_X550EM_A_SGMII_L:
2048eb6488eSEric Joyner 	case IXGBE_DEV_ID_X550EM_A_1G_T:
2058eb6488eSEric Joyner 	case IXGBE_DEV_ID_X550EM_A_1G_T_L:
2068eb6488eSEric Joyner 	case IXGBE_DEV_ID_X550EM_A_10G_T:
2078eb6488eSEric Joyner 	case IXGBE_DEV_ID_X550EM_A_QSFP:
2088eb6488eSEric Joyner 	case IXGBE_DEV_ID_X550EM_A_QSFP_N:
2098eb6488eSEric Joyner 	case IXGBE_DEV_ID_X550EM_A_SFP:
2108eb6488eSEric Joyner 		hw->mac.type = ixgbe_mac_X550EM_a;
2118eb6488eSEric Joyner 		hw->mvals = ixgbe_mvals_X550EM_a;
212758cc3dcSJack F Vogel 		break;
2133ec35e52SJack F Vogel 	default:
2143ec35e52SJack F Vogel 		ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
215fd75b91dSJack F Vogel 		ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED,
216fd75b91dSJack F Vogel 			     "Unsupported device id: %x",
217fd75b91dSJack F Vogel 			     hw->device_id);
2183ec35e52SJack F Vogel 		break;
2193ec35e52SJack F Vogel 	}
2203ec35e52SJack F Vogel 
2219ca4041bSJack F Vogel 	DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n",
2229ca4041bSJack F Vogel 		  hw->mac.type, ret_val);
2233ec35e52SJack F Vogel 	return ret_val;
2243ec35e52SJack F Vogel }
2253ec35e52SJack F Vogel 
2263ec35e52SJack F Vogel /**
22713705f88SJack F Vogel  *  ixgbe_init_hw - Initialize the hardware
22813705f88SJack F Vogel  *  @hw: pointer to hardware structure
22913705f88SJack F Vogel  *
23013705f88SJack F Vogel  *  Initialize the hardware by resetting and then starting the hardware
23113705f88SJack F Vogel  **/
23213705f88SJack F Vogel s32 ixgbe_init_hw(struct ixgbe_hw *hw)
23313705f88SJack F Vogel {
2349ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw),
23513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
23613705f88SJack F Vogel }
23713705f88SJack F Vogel 
23813705f88SJack F Vogel /**
23913705f88SJack F Vogel  *  ixgbe_reset_hw - Performs a hardware reset
24013705f88SJack F Vogel  *  @hw: pointer to hardware structure
24113705f88SJack F Vogel  *
24213705f88SJack F Vogel  *  Resets the hardware by resetting the transmit and receive units, masks and
24313705f88SJack F Vogel  *  clears all interrupts, performs a PHY reset, and performs a MAC reset
24413705f88SJack F Vogel  **/
24513705f88SJack F Vogel s32 ixgbe_reset_hw(struct ixgbe_hw *hw)
24613705f88SJack F Vogel {
2479ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw),
24813705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
24913705f88SJack F Vogel }
25013705f88SJack F Vogel 
25113705f88SJack F Vogel /**
2529ca4041bSJack F Vogel  *  ixgbe_start_hw - Prepares hardware for Rx/Tx
25313705f88SJack F Vogel  *  @hw: pointer to hardware structure
25413705f88SJack F Vogel  *
25513705f88SJack F Vogel  *  Starts the hardware by filling the bus info structure and media type,
25613705f88SJack F Vogel  *  clears all on chip counters, initializes receive address registers,
25713705f88SJack F Vogel  *  multicast table, VLAN filter table, calls routine to setup link and
25813705f88SJack F Vogel  *  flow control settings, and leaves transmit and receive units disabled
25913705f88SJack F Vogel  *  and uninitialized.
26013705f88SJack F Vogel  **/
26113705f88SJack F Vogel s32 ixgbe_start_hw(struct ixgbe_hw *hw)
26213705f88SJack F Vogel {
2639ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw),
26413705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
26513705f88SJack F Vogel }
26613705f88SJack F Vogel 
26713705f88SJack F Vogel /**
268c0014855SJack F Vogel  *  ixgbe_enable_relaxed_ordering - Enables tx relaxed ordering,
269c0014855SJack F Vogel  *  which is disabled by default in ixgbe_start_hw();
270c0014855SJack F Vogel  *
271c0014855SJack F Vogel  *  @hw: pointer to hardware structure
272c0014855SJack F Vogel  *
273c0014855SJack F Vogel  *   Enable relaxed ordering;
274c0014855SJack F Vogel  **/
275c0014855SJack F Vogel void ixgbe_enable_relaxed_ordering(struct ixgbe_hw *hw)
276c0014855SJack F Vogel {
277c0014855SJack F Vogel 	if (hw->mac.ops.enable_relaxed_ordering)
278c0014855SJack F Vogel 		hw->mac.ops.enable_relaxed_ordering(hw);
279c0014855SJack F Vogel }
280c0014855SJack F Vogel 
281c0014855SJack F Vogel /**
28213705f88SJack F Vogel  *  ixgbe_clear_hw_cntrs - Clear hardware counters
28313705f88SJack F Vogel  *  @hw: pointer to hardware structure
28413705f88SJack F Vogel  *
28513705f88SJack F Vogel  *  Clears all hardware statistics counters by reading them from the hardware
28613705f88SJack F Vogel  *  Statistics counters are clear on read.
28713705f88SJack F Vogel  **/
28813705f88SJack F Vogel s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw)
28913705f88SJack F Vogel {
2909ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw),
29113705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
29213705f88SJack F Vogel }
29313705f88SJack F Vogel 
29413705f88SJack F Vogel /**
29513705f88SJack F Vogel  *  ixgbe_get_media_type - Get media type
29613705f88SJack F Vogel  *  @hw: pointer to hardware structure
29713705f88SJack F Vogel  *
29813705f88SJack F Vogel  *  Returns the media type (fiber, copper, backplane)
29913705f88SJack F Vogel  **/
30013705f88SJack F Vogel enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw)
30113705f88SJack F Vogel {
3029ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw),
30313705f88SJack F Vogel 			       ixgbe_media_type_unknown);
30413705f88SJack F Vogel }
30513705f88SJack F Vogel 
30613705f88SJack F Vogel /**
30713705f88SJack F Vogel  *  ixgbe_get_mac_addr - Get MAC address
30813705f88SJack F Vogel  *  @hw: pointer to hardware structure
30913705f88SJack F Vogel  *  @mac_addr: Adapter MAC address
31013705f88SJack F Vogel  *
31113705f88SJack F Vogel  *  Reads the adapter's MAC address from the first Receive Address Register
3129ca4041bSJack F Vogel  *  (RAR0) A reset of the adapter must have been performed prior to calling
3139ca4041bSJack F Vogel  *  this function in order for the MAC address to have been loaded from the
3149ca4041bSJack F Vogel  *  EEPROM into RAR0
31513705f88SJack F Vogel  **/
31613705f88SJack F Vogel s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr)
31713705f88SJack F Vogel {
3189ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr,
31913705f88SJack F Vogel 			       (hw, mac_addr), IXGBE_NOT_IMPLEMENTED);
32013705f88SJack F Vogel }
32113705f88SJack F Vogel 
32213705f88SJack F Vogel /**
3230ac6dfecSJack F Vogel  *  ixgbe_get_san_mac_addr - Get SAN MAC address
3240ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
3250ac6dfecSJack F Vogel  *  @san_mac_addr: SAN MAC address
3260ac6dfecSJack F Vogel  *
3270ac6dfecSJack F Vogel  *  Reads the SAN MAC address from the EEPROM, if it's available.  This is
3280ac6dfecSJack F Vogel  *  per-port, so set_lan_id() must be called before reading the addresses.
3290ac6dfecSJack F Vogel  **/
3300ac6dfecSJack F Vogel s32 ixgbe_get_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr)
3310ac6dfecSJack F Vogel {
3320ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_san_mac_addr,
3330ac6dfecSJack F Vogel 			       (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED);
3340ac6dfecSJack F Vogel }
3350ac6dfecSJack F Vogel 
3360ac6dfecSJack F Vogel /**
3370ac6dfecSJack F Vogel  *  ixgbe_set_san_mac_addr - Write a SAN MAC address
3380ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
3390ac6dfecSJack F Vogel  *  @san_mac_addr: SAN MAC address
3400ac6dfecSJack F Vogel  *
3410ac6dfecSJack F Vogel  *  Writes A SAN MAC address to the EEPROM.
3420ac6dfecSJack F Vogel  **/
3430ac6dfecSJack F Vogel s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr)
3440ac6dfecSJack F Vogel {
3450ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_san_mac_addr,
3460ac6dfecSJack F Vogel 			       (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED);
3470ac6dfecSJack F Vogel }
3480ac6dfecSJack F Vogel 
3490ac6dfecSJack F Vogel /**
3500ac6dfecSJack F Vogel  *  ixgbe_get_device_caps - Get additional device capabilities
3510ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
3520ac6dfecSJack F Vogel  *  @device_caps: the EEPROM word for device capabilities
3530ac6dfecSJack F Vogel  *
3540ac6dfecSJack F Vogel  *  Reads the extra device capabilities from the EEPROM
3550ac6dfecSJack F Vogel  **/
3560ac6dfecSJack F Vogel s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps)
3570ac6dfecSJack F Vogel {
3580ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_device_caps,
3590ac6dfecSJack F Vogel 			       (hw, device_caps), IXGBE_NOT_IMPLEMENTED);
3600ac6dfecSJack F Vogel }
3610ac6dfecSJack F Vogel 
3620ac6dfecSJack F Vogel /**
3632969bf0eSJack F Vogel  *  ixgbe_get_wwn_prefix - Get alternative WWNN/WWPN prefix from the EEPROM
3642969bf0eSJack F Vogel  *  @hw: pointer to hardware structure
3652969bf0eSJack F Vogel  *  @wwnn_prefix: the alternative WWNN prefix
3662969bf0eSJack F Vogel  *  @wwpn_prefix: the alternative WWPN prefix
3672969bf0eSJack F Vogel  *
3682969bf0eSJack F Vogel  *  This function will read the EEPROM from the alternative SAN MAC address
3692969bf0eSJack F Vogel  *  block to check the support for the alternative WWNN/WWPN prefix support.
3702969bf0eSJack F Vogel  **/
3712969bf0eSJack F Vogel s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix,
3722969bf0eSJack F Vogel 			 u16 *wwpn_prefix)
3732969bf0eSJack F Vogel {
3742969bf0eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_wwn_prefix,
3752969bf0eSJack F Vogel 			       (hw, wwnn_prefix, wwpn_prefix),
3762969bf0eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
3772969bf0eSJack F Vogel }
3782969bf0eSJack F Vogel 
3792969bf0eSJack F Vogel /**
3801a4e3449SJack F Vogel  *  ixgbe_get_fcoe_boot_status -  Get FCOE boot status from EEPROM
3811a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
3821a4e3449SJack F Vogel  *  @bs: the fcoe boot status
3831a4e3449SJack F Vogel  *
3841a4e3449SJack F Vogel  *  This function will read the FCOE boot status from the iSCSI FCOE block
3851a4e3449SJack F Vogel  **/
3861a4e3449SJack F Vogel s32 ixgbe_get_fcoe_boot_status(struct ixgbe_hw *hw, u16 *bs)
3871a4e3449SJack F Vogel {
3881a4e3449SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_fcoe_boot_status,
3891a4e3449SJack F Vogel 			       (hw, bs),
3901a4e3449SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
3911a4e3449SJack F Vogel }
3921a4e3449SJack F Vogel 
3931a4e3449SJack F Vogel /**
39413705f88SJack F Vogel  *  ixgbe_get_bus_info - Set PCI bus info
39513705f88SJack F Vogel  *  @hw: pointer to hardware structure
39613705f88SJack F Vogel  *
39713705f88SJack F Vogel  *  Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure
39813705f88SJack F Vogel  **/
39913705f88SJack F Vogel s32 ixgbe_get_bus_info(struct ixgbe_hw *hw)
40013705f88SJack F Vogel {
4019ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw),
40213705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
40313705f88SJack F Vogel }
40413705f88SJack F Vogel 
40513705f88SJack F Vogel /**
4069ca4041bSJack F Vogel  *  ixgbe_get_num_of_tx_queues - Get Tx queues
40713705f88SJack F Vogel  *  @hw: pointer to hardware structure
40813705f88SJack F Vogel  *
40913705f88SJack F Vogel  *  Returns the number of transmit queues for the given adapter.
41013705f88SJack F Vogel  **/
41113705f88SJack F Vogel u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw)
41213705f88SJack F Vogel {
4139ca4041bSJack F Vogel 	return hw->mac.max_tx_queues;
41413705f88SJack F Vogel }
41513705f88SJack F Vogel 
41613705f88SJack F Vogel /**
4179ca4041bSJack F Vogel  *  ixgbe_get_num_of_rx_queues - Get Rx queues
41813705f88SJack F Vogel  *  @hw: pointer to hardware structure
41913705f88SJack F Vogel  *
42013705f88SJack F Vogel  *  Returns the number of receive queues for the given adapter.
42113705f88SJack F Vogel  **/
42213705f88SJack F Vogel u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw)
42313705f88SJack F Vogel {
4249ca4041bSJack F Vogel 	return hw->mac.max_rx_queues;
42513705f88SJack F Vogel }
42613705f88SJack F Vogel 
42713705f88SJack F Vogel /**
4289ca4041bSJack F Vogel  *  ixgbe_stop_adapter - Disable Rx/Tx units
42913705f88SJack F Vogel  *  @hw: pointer to hardware structure
43013705f88SJack F Vogel  *
43113705f88SJack F Vogel  *  Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts,
43213705f88SJack F Vogel  *  disables transmit and receive units. The adapter_stopped flag is used by
43313705f88SJack F Vogel  *  the shared code and drivers to determine if the adapter is in a stopped
43413705f88SJack F Vogel  *  state and should not touch the hardware.
43513705f88SJack F Vogel  **/
43613705f88SJack F Vogel s32 ixgbe_stop_adapter(struct ixgbe_hw *hw)
43713705f88SJack F Vogel {
4389ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw),
43913705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
44013705f88SJack F Vogel }
44113705f88SJack F Vogel 
44213705f88SJack F Vogel /**
4431a4e3449SJack F Vogel  *  ixgbe_read_pba_string - Reads part number string from EEPROM
4441a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
4451a4e3449SJack F Vogel  *  @pba_num: stores the part number string from the EEPROM
4461a4e3449SJack F Vogel  *  @pba_num_size: part number string buffer length
4471a4e3449SJack F Vogel  *
4481a4e3449SJack F Vogel  *  Reads the part number string from the EEPROM.
4491a4e3449SJack F Vogel  **/
4501a4e3449SJack F Vogel s32 ixgbe_read_pba_string(struct ixgbe_hw *hw, u8 *pba_num, u32 pba_num_size)
4511a4e3449SJack F Vogel {
4521a4e3449SJack F Vogel 	return ixgbe_read_pba_string_generic(hw, pba_num, pba_num_size);
4531a4e3449SJack F Vogel }
4541a4e3449SJack F Vogel 
4551a4e3449SJack F Vogel /**
4569ca4041bSJack F Vogel  *  ixgbe_read_pba_num - Reads part number from EEPROM
4579ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
4589ca4041bSJack F Vogel  *  @pba_num: stores the part number from the EEPROM
4599ca4041bSJack F Vogel  *
4609ca4041bSJack F Vogel  *  Reads the part number from the EEPROM.
4619ca4041bSJack F Vogel  **/
4629ca4041bSJack F Vogel s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num)
4639ca4041bSJack F Vogel {
4649ca4041bSJack F Vogel 	return ixgbe_read_pba_num_generic(hw, pba_num);
4659ca4041bSJack F Vogel }
4669ca4041bSJack F Vogel 
4679ca4041bSJack F Vogel /**
46813705f88SJack F Vogel  *  ixgbe_identify_phy - Get PHY type
46913705f88SJack F Vogel  *  @hw: pointer to hardware structure
47013705f88SJack F Vogel  *
47113705f88SJack F Vogel  *  Determines the physical layer module found on the current adapter.
47213705f88SJack F Vogel  **/
47313705f88SJack F Vogel s32 ixgbe_identify_phy(struct ixgbe_hw *hw)
47413705f88SJack F Vogel {
47513705f88SJack F Vogel 	s32 status = IXGBE_SUCCESS;
47613705f88SJack F Vogel 
47713705f88SJack F Vogel 	if (hw->phy.type == ixgbe_phy_unknown) {
4781a4e3449SJack F Vogel 		status = ixgbe_call_func(hw, hw->phy.ops.identify, (hw),
47913705f88SJack F Vogel 					 IXGBE_NOT_IMPLEMENTED);
48013705f88SJack F Vogel 	}
48113705f88SJack F Vogel 
48213705f88SJack F Vogel 	return status;
48313705f88SJack F Vogel }
48413705f88SJack F Vogel 
48513705f88SJack F Vogel /**
48613705f88SJack F Vogel  *  ixgbe_reset_phy - Perform a PHY reset
48713705f88SJack F Vogel  *  @hw: pointer to hardware structure
48813705f88SJack F Vogel  **/
48913705f88SJack F Vogel s32 ixgbe_reset_phy(struct ixgbe_hw *hw)
49013705f88SJack F Vogel {
49113705f88SJack F Vogel 	s32 status = IXGBE_SUCCESS;
49213705f88SJack F Vogel 
49313705f88SJack F Vogel 	if (hw->phy.type == ixgbe_phy_unknown) {
4941b6e0dbaSJack F Vogel 		if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS)
49513705f88SJack F Vogel 			status = IXGBE_ERR_PHY;
49613705f88SJack F Vogel 	}
49713705f88SJack F Vogel 
49813705f88SJack F Vogel 	if (status == IXGBE_SUCCESS) {
4999ca4041bSJack F Vogel 		status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw),
50013705f88SJack F Vogel 					 IXGBE_NOT_IMPLEMENTED);
50113705f88SJack F Vogel 	}
50213705f88SJack F Vogel 	return status;
50313705f88SJack F Vogel }
50413705f88SJack F Vogel 
50513705f88SJack F Vogel /**
5069ca4041bSJack F Vogel  *  ixgbe_get_phy_firmware_version -
5079ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
5089ca4041bSJack F Vogel  *  @firmware_version: pointer to firmware version
5099ca4041bSJack F Vogel  **/
5109ca4041bSJack F Vogel s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version)
5119ca4041bSJack F Vogel {
5129ca4041bSJack F Vogel 	s32 status = IXGBE_SUCCESS;
5139ca4041bSJack F Vogel 
5149ca4041bSJack F Vogel 	status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version,
5159ca4041bSJack F Vogel 				 (hw, firmware_version),
5169ca4041bSJack F Vogel 				 IXGBE_NOT_IMPLEMENTED);
5179ca4041bSJack F Vogel 	return status;
5189ca4041bSJack F Vogel }
5199ca4041bSJack F Vogel 
5209ca4041bSJack F Vogel /**
52113705f88SJack F Vogel  *  ixgbe_read_phy_reg - Read PHY register
52213705f88SJack F Vogel  *  @hw: pointer to hardware structure
52313705f88SJack F Vogel  *  @reg_addr: 32 bit address of PHY register to read
5247d48aa4cSEric Joyner  *  @device_type: type of device you want to communicate with
52513705f88SJack F Vogel  *  @phy_data: Pointer to read data from PHY register
52613705f88SJack F Vogel  *
52713705f88SJack F Vogel  *  Reads a value from a specified PHY register
52813705f88SJack F Vogel  **/
52913705f88SJack F Vogel s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
53013705f88SJack F Vogel 		       u16 *phy_data)
53113705f88SJack F Vogel {
5320ac6dfecSJack F Vogel 	if (hw->phy.id == 0)
5330ac6dfecSJack F Vogel 		ixgbe_identify_phy(hw);
5340ac6dfecSJack F Vogel 
5359ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr,
5369ca4041bSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
53713705f88SJack F Vogel }
53813705f88SJack F Vogel 
53913705f88SJack F Vogel /**
54013705f88SJack F Vogel  *  ixgbe_write_phy_reg - Write PHY register
54113705f88SJack F Vogel  *  @hw: pointer to hardware structure
54213705f88SJack F Vogel  *  @reg_addr: 32 bit PHY register to write
5437d48aa4cSEric Joyner  *  @device_type: type of device you want to communicate with
54413705f88SJack F Vogel  *  @phy_data: Data to write to the PHY register
54513705f88SJack F Vogel  *
54613705f88SJack F Vogel  *  Writes a value to specified PHY register
54713705f88SJack F Vogel  **/
54813705f88SJack F Vogel s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
54913705f88SJack F Vogel 			u16 phy_data)
55013705f88SJack F Vogel {
5510ac6dfecSJack F Vogel 	if (hw->phy.id == 0)
5520ac6dfecSJack F Vogel 		ixgbe_identify_phy(hw);
5530ac6dfecSJack F Vogel 
5549ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr,
5559ca4041bSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
55613705f88SJack F Vogel }
55713705f88SJack F Vogel 
5589ca4041bSJack F Vogel /**
5599ca4041bSJack F Vogel  *  ixgbe_setup_phy_link - Restart PHY autoneg
5609ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
5619ca4041bSJack F Vogel  *
5629ca4041bSJack F Vogel  *  Restart autonegotiation and PHY and waits for completion.
5639ca4041bSJack F Vogel  **/
5649ca4041bSJack F Vogel s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw)
5659ca4041bSJack F Vogel {
5669ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw),
56713705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
56813705f88SJack F Vogel }
5699ca4041bSJack F Vogel 
5709ca4041bSJack F Vogel /**
571758cc3dcSJack F Vogel  * ixgbe_setup_internal_phy - Configure integrated PHY
572758cc3dcSJack F Vogel  * @hw: pointer to hardware structure
573758cc3dcSJack F Vogel  *
574758cc3dcSJack F Vogel  * Reconfigure the integrated PHY in order to enable talk to the external PHY.
575758cc3dcSJack F Vogel  * Returns success if not implemented, since nothing needs to be done in this
576758cc3dcSJack F Vogel  * case.
577758cc3dcSJack F Vogel  */
578758cc3dcSJack F Vogel s32 ixgbe_setup_internal_phy(struct ixgbe_hw *hw)
579758cc3dcSJack F Vogel {
580758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.setup_internal_link, (hw),
581758cc3dcSJack F Vogel 			       IXGBE_SUCCESS);
582758cc3dcSJack F Vogel }
583758cc3dcSJack F Vogel 
584758cc3dcSJack F Vogel /**
5859ca4041bSJack F Vogel  *  ixgbe_check_phy_link - Determine link and speed status
5869ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
5877d48aa4cSEric Joyner  *  @speed: link speed
5887d48aa4cSEric Joyner  *  @link_up: TRUE when link is up
5899ca4041bSJack F Vogel  *
5909ca4041bSJack F Vogel  *  Reads a PHY register to determine if link is up and the current speed for
5919ca4041bSJack F Vogel  *  the PHY.
5929ca4041bSJack F Vogel  **/
5939ca4041bSJack F Vogel s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
5949ca4041bSJack F Vogel 			 bool *link_up)
5959ca4041bSJack F Vogel {
5969ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed,
5979ca4041bSJack F Vogel 			       link_up), IXGBE_NOT_IMPLEMENTED);
5989ca4041bSJack F Vogel }
5999ca4041bSJack F Vogel 
6009ca4041bSJack F Vogel /**
6019ca4041bSJack F Vogel  *  ixgbe_setup_phy_link_speed - Set auto advertise
6029ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
6039ca4041bSJack F Vogel  *  @speed: new link speed
6047d48aa4cSEric Joyner  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
6059ca4041bSJack F Vogel  *
6069ca4041bSJack F Vogel  *  Sets the auto advertised capabilities
6079ca4041bSJack F Vogel  **/
6089ca4041bSJack F Vogel s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
6099ca4041bSJack F Vogel 			       bool autoneg_wait_to_complete)
6109ca4041bSJack F Vogel {
6119ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.setup_link_speed, (hw, speed,
6120ecc2ff0SJack F Vogel 			       autoneg_wait_to_complete),
6139ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
61413705f88SJack F Vogel }
61513705f88SJack F Vogel 
61613705f88SJack F Vogel /**
617758cc3dcSJack F Vogel  * ixgbe_set_phy_power - Control the phy power state
618758cc3dcSJack F Vogel  * @hw: pointer to hardware structure
619758cc3dcSJack F Vogel  * @on: TRUE for on, FALSE for off
620758cc3dcSJack F Vogel  */
621758cc3dcSJack F Vogel s32 ixgbe_set_phy_power(struct ixgbe_hw *hw, bool on)
622758cc3dcSJack F Vogel {
623758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.set_phy_power, (hw, on),
624758cc3dcSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
625758cc3dcSJack F Vogel }
626758cc3dcSJack F Vogel 
627758cc3dcSJack F Vogel /**
62813705f88SJack F Vogel  *  ixgbe_check_link - Get link and speed status
62913705f88SJack F Vogel  *  @hw: pointer to hardware structure
6307d48aa4cSEric Joyner  *  @speed: pointer to link speed
6317d48aa4cSEric Joyner  *  @link_up: TRUE when link is up
6327d48aa4cSEric Joyner  *  @link_up_wait_to_complete: bool used to wait for link up or not
63313705f88SJack F Vogel  *
63413705f88SJack F Vogel  *  Reads the links register to determine if link is up and the current speed
63513705f88SJack F Vogel  **/
63613705f88SJack F Vogel s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
6379ca4041bSJack F Vogel 		     bool *link_up, bool link_up_wait_to_complete)
63813705f88SJack F Vogel {
6399ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.check_link, (hw, speed,
6409ca4041bSJack F Vogel 			       link_up, link_up_wait_to_complete),
64113705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
64213705f88SJack F Vogel }
64313705f88SJack F Vogel 
64413705f88SJack F Vogel /**
6451a4e3449SJack F Vogel  *  ixgbe_disable_tx_laser - Disable Tx laser
6461a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
6471a4e3449SJack F Vogel  *
6481a4e3449SJack F Vogel  *  If the driver needs to disable the laser on SFI optics.
6491a4e3449SJack F Vogel  **/
6501a4e3449SJack F Vogel void ixgbe_disable_tx_laser(struct ixgbe_hw *hw)
6511a4e3449SJack F Vogel {
6521a4e3449SJack F Vogel 	if (hw->mac.ops.disable_tx_laser)
6531a4e3449SJack F Vogel 		hw->mac.ops.disable_tx_laser(hw);
6541a4e3449SJack F Vogel }
6551a4e3449SJack F Vogel 
6561a4e3449SJack F Vogel /**
6571a4e3449SJack F Vogel  *  ixgbe_enable_tx_laser - Enable Tx laser
6581a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
6591a4e3449SJack F Vogel  *
6601a4e3449SJack F Vogel  *  If the driver needs to enable the laser on SFI optics.
6611a4e3449SJack F Vogel  **/
6621a4e3449SJack F Vogel void ixgbe_enable_tx_laser(struct ixgbe_hw *hw)
6631a4e3449SJack F Vogel {
6641a4e3449SJack F Vogel 	if (hw->mac.ops.enable_tx_laser)
6651a4e3449SJack F Vogel 		hw->mac.ops.enable_tx_laser(hw);
6661a4e3449SJack F Vogel }
6671a4e3449SJack F Vogel 
6681a4e3449SJack F Vogel /**
6691a4e3449SJack F Vogel  *  ixgbe_flap_tx_laser - flap Tx laser to start autotry process
6701a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
6711a4e3449SJack F Vogel  *
6721a4e3449SJack F Vogel  *  When the driver changes the link speeds that it can support then
6731a4e3449SJack F Vogel  *  flap the tx laser to alert the link partner to start autotry
6741a4e3449SJack F Vogel  *  process on its end.
6751a4e3449SJack F Vogel  **/
6761a4e3449SJack F Vogel void ixgbe_flap_tx_laser(struct ixgbe_hw *hw)
6771a4e3449SJack F Vogel {
6781a4e3449SJack F Vogel 	if (hw->mac.ops.flap_tx_laser)
6791a4e3449SJack F Vogel 		hw->mac.ops.flap_tx_laser(hw);
6801a4e3449SJack F Vogel }
6811a4e3449SJack F Vogel 
6821a4e3449SJack F Vogel /**
6832969bf0eSJack F Vogel  *  ixgbe_setup_link - Set link speed
68413705f88SJack F Vogel  *  @hw: pointer to hardware structure
68513705f88SJack F Vogel  *  @speed: new link speed
6867d48aa4cSEric Joyner  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
68713705f88SJack F Vogel  *
6882969bf0eSJack F Vogel  *  Configures link settings.  Restarts the link.
6892969bf0eSJack F Vogel  *  Performs autonegotiation if needed.
69013705f88SJack F Vogel  **/
6912969bf0eSJack F Vogel s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed,
69213705f88SJack F Vogel 		     bool autoneg_wait_to_complete)
69313705f88SJack F Vogel {
6942969bf0eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw, speed,
6950ecc2ff0SJack F Vogel 			       autoneg_wait_to_complete),
69613705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
69713705f88SJack F Vogel }
69813705f88SJack F Vogel 
69913705f88SJack F Vogel /**
700758cc3dcSJack F Vogel  *  ixgbe_setup_mac_link - Set link speed
701758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
702758cc3dcSJack F Vogel  *  @speed: new link speed
7037d48aa4cSEric Joyner  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
704758cc3dcSJack F Vogel  *
705758cc3dcSJack F Vogel  *  Configures link settings.  Restarts the link.
706758cc3dcSJack F Vogel  *  Performs autonegotiation if needed.
707758cc3dcSJack F Vogel  **/
708758cc3dcSJack F Vogel s32 ixgbe_setup_mac_link(struct ixgbe_hw *hw, ixgbe_link_speed speed,
709758cc3dcSJack F Vogel 			 bool autoneg_wait_to_complete)
710758cc3dcSJack F Vogel {
711758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_mac_link, (hw, speed,
712758cc3dcSJack F Vogel 			       autoneg_wait_to_complete),
713758cc3dcSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
714758cc3dcSJack F Vogel }
715758cc3dcSJack F Vogel 
716758cc3dcSJack F Vogel /**
7179ca4041bSJack F Vogel  *  ixgbe_get_link_capabilities - Returns link capabilities
71813705f88SJack F Vogel  *  @hw: pointer to hardware structure
7197d48aa4cSEric Joyner  *  @speed: link speed capabilities
7207d48aa4cSEric Joyner  *  @autoneg: TRUE when autoneg or autotry is enabled
72113705f88SJack F Vogel  *
7229ca4041bSJack F Vogel  *  Determines the link capabilities of the current configuration.
72313705f88SJack F Vogel  **/
7249ca4041bSJack F Vogel s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
72513705f88SJack F Vogel 				bool *autoneg)
72613705f88SJack F Vogel {
7279ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw,
7289ca4041bSJack F Vogel 			       speed, autoneg), IXGBE_NOT_IMPLEMENTED);
72913705f88SJack F Vogel }
73013705f88SJack F Vogel 
73113705f88SJack F Vogel /**
7329ca4041bSJack F Vogel  *  ixgbe_led_on - Turn on LEDs
73313705f88SJack F Vogel  *  @hw: pointer to hardware structure
73413705f88SJack F Vogel  *  @index: led number to turn on
73513705f88SJack F Vogel  *
73613705f88SJack F Vogel  *  Turns on the software controllable LEDs.
73713705f88SJack F Vogel  **/
73813705f88SJack F Vogel s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index)
73913705f88SJack F Vogel {
7409ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index),
74113705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
74213705f88SJack F Vogel }
74313705f88SJack F Vogel 
74413705f88SJack F Vogel /**
7459ca4041bSJack F Vogel  *  ixgbe_led_off - Turn off LEDs
74613705f88SJack F Vogel  *  @hw: pointer to hardware structure
74713705f88SJack F Vogel  *  @index: led number to turn off
74813705f88SJack F Vogel  *
74913705f88SJack F Vogel  *  Turns off the software controllable LEDs.
75013705f88SJack F Vogel  **/
75113705f88SJack F Vogel s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index)
75213705f88SJack F Vogel {
7539ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index),
75413705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
75513705f88SJack F Vogel }
75613705f88SJack F Vogel 
75713705f88SJack F Vogel /**
7589ca4041bSJack F Vogel  *  ixgbe_blink_led_start - Blink LEDs
75913705f88SJack F Vogel  *  @hw: pointer to hardware structure
76013705f88SJack F Vogel  *  @index: led number to blink
76113705f88SJack F Vogel  *
76213705f88SJack F Vogel  *  Blink LED based on index.
76313705f88SJack F Vogel  **/
76413705f88SJack F Vogel s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index)
76513705f88SJack F Vogel {
7669ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index),
76713705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
76813705f88SJack F Vogel }
76913705f88SJack F Vogel 
77013705f88SJack F Vogel /**
7719ca4041bSJack F Vogel  *  ixgbe_blink_led_stop - Stop blinking LEDs
77213705f88SJack F Vogel  *  @hw: pointer to hardware structure
7737d48aa4cSEric Joyner  *  @index: led number to stop
77413705f88SJack F Vogel  *
77513705f88SJack F Vogel  *  Stop blinking LED based on index.
77613705f88SJack F Vogel  **/
77713705f88SJack F Vogel s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index)
77813705f88SJack F Vogel {
7799ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index),
78013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
78113705f88SJack F Vogel }
78213705f88SJack F Vogel 
78313705f88SJack F Vogel /**
7849ca4041bSJack F Vogel  *  ixgbe_init_eeprom_params - Initialize EEPROM parameters
78513705f88SJack F Vogel  *  @hw: pointer to hardware structure
78613705f88SJack F Vogel  *
78713705f88SJack F Vogel  *  Initializes the EEPROM parameters ixgbe_eeprom_info within the
78813705f88SJack F Vogel  *  ixgbe_hw struct in order to set up EEPROM access.
78913705f88SJack F Vogel  **/
79013705f88SJack F Vogel s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw)
79113705f88SJack F Vogel {
7929ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw),
79313705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
79413705f88SJack F Vogel }
79513705f88SJack F Vogel 
79613705f88SJack F Vogel 
79713705f88SJack F Vogel /**
79813705f88SJack F Vogel  *  ixgbe_write_eeprom - Write word to EEPROM
79913705f88SJack F Vogel  *  @hw: pointer to hardware structure
80013705f88SJack F Vogel  *  @offset: offset within the EEPROM to be written to
80113705f88SJack F Vogel  *  @data: 16 bit word to be written to the EEPROM
80213705f88SJack F Vogel  *
80313705f88SJack F Vogel  *  Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not
80413705f88SJack F Vogel  *  called after this function, the EEPROM will most likely contain an
80513705f88SJack F Vogel  *  invalid checksum.
80613705f88SJack F Vogel  **/
80713705f88SJack F Vogel s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data)
80813705f88SJack F Vogel {
8099ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data),
81013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
81113705f88SJack F Vogel }
81213705f88SJack F Vogel 
81313705f88SJack F Vogel /**
81485d0a26eSJack F Vogel  *  ixgbe_write_eeprom_buffer - Write word(s) to EEPROM
81585d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
81685d0a26eSJack F Vogel  *  @offset: offset within the EEPROM to be written to
81785d0a26eSJack F Vogel  *  @data: 16 bit word(s) to be written to the EEPROM
81885d0a26eSJack F Vogel  *  @words: number of words
81985d0a26eSJack F Vogel  *
82085d0a26eSJack F Vogel  *  Writes 16 bit word(s) to EEPROM. If ixgbe_eeprom_update_checksum is not
82185d0a26eSJack F Vogel  *  called after this function, the EEPROM will most likely contain an
82285d0a26eSJack F Vogel  *  invalid checksum.
82385d0a26eSJack F Vogel  **/
82485d0a26eSJack F Vogel s32 ixgbe_write_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, u16 words,
82585d0a26eSJack F Vogel 			      u16 *data)
82685d0a26eSJack F Vogel {
82785d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.write_buffer,
82885d0a26eSJack F Vogel 			       (hw, offset, words, data),
82985d0a26eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
83085d0a26eSJack F Vogel }
83185d0a26eSJack F Vogel 
83285d0a26eSJack F Vogel /**
83313705f88SJack F Vogel  *  ixgbe_read_eeprom - Read word from EEPROM
83413705f88SJack F Vogel  *  @hw: pointer to hardware structure
83513705f88SJack F Vogel  *  @offset: offset within the EEPROM to be read
83613705f88SJack F Vogel  *  @data: read 16 bit value from EEPROM
83713705f88SJack F Vogel  *
83813705f88SJack F Vogel  *  Reads 16 bit value from EEPROM
83913705f88SJack F Vogel  **/
84013705f88SJack F Vogel s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data)
84113705f88SJack F Vogel {
8429ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data),
84313705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
84413705f88SJack F Vogel }
84513705f88SJack F Vogel 
84613705f88SJack F Vogel /**
84785d0a26eSJack F Vogel  *  ixgbe_read_eeprom_buffer - Read word(s) from EEPROM
84885d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
84985d0a26eSJack F Vogel  *  @offset: offset within the EEPROM to be read
85085d0a26eSJack F Vogel  *  @data: read 16 bit word(s) from EEPROM
85185d0a26eSJack F Vogel  *  @words: number of words
85285d0a26eSJack F Vogel  *
85385d0a26eSJack F Vogel  *  Reads 16 bit word(s) from EEPROM
85485d0a26eSJack F Vogel  **/
85585d0a26eSJack F Vogel s32 ixgbe_read_eeprom_buffer(struct ixgbe_hw *hw, u16 offset,
85685d0a26eSJack F Vogel 			     u16 words, u16 *data)
85785d0a26eSJack F Vogel {
85885d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.read_buffer,
85985d0a26eSJack F Vogel 			       (hw, offset, words, data),
86085d0a26eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
86185d0a26eSJack F Vogel }
86285d0a26eSJack F Vogel 
86385d0a26eSJack F Vogel /**
86413705f88SJack F Vogel  *  ixgbe_validate_eeprom_checksum - Validate EEPROM checksum
86513705f88SJack F Vogel  *  @hw: pointer to hardware structure
86613705f88SJack F Vogel  *  @checksum_val: calculated checksum
86713705f88SJack F Vogel  *
86813705f88SJack F Vogel  *  Performs checksum calculation and validates the EEPROM checksum
86913705f88SJack F Vogel  **/
87013705f88SJack F Vogel s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val)
87113705f88SJack F Vogel {
8729ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum,
87313705f88SJack F Vogel 			       (hw, checksum_val), IXGBE_NOT_IMPLEMENTED);
87413705f88SJack F Vogel }
87513705f88SJack F Vogel 
87613705f88SJack F Vogel /**
87713705f88SJack F Vogel  *  ixgbe_eeprom_update_checksum - Updates the EEPROM checksum
87813705f88SJack F Vogel  *  @hw: pointer to hardware structure
87913705f88SJack F Vogel  **/
88013705f88SJack F Vogel s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw)
88113705f88SJack F Vogel {
8829ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw),
88313705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
88413705f88SJack F Vogel }
88513705f88SJack F Vogel 
88613705f88SJack F Vogel /**
8870ac6dfecSJack F Vogel  *  ixgbe_insert_mac_addr - Find a RAR for this mac address
8880ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
8890ac6dfecSJack F Vogel  *  @addr: Address to put into receive address register
8900ac6dfecSJack F Vogel  *  @vmdq: VMDq pool to assign
8910ac6dfecSJack F Vogel  *
8920ac6dfecSJack F Vogel  *  Puts an ethernet address into a receive address register, or
893363089d8SPedro F. Giffuni  *  finds the rar that it is already in; adds to the pool list
8940ac6dfecSJack F Vogel  **/
8950ac6dfecSJack F Vogel s32 ixgbe_insert_mac_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
8960ac6dfecSJack F Vogel {
8970ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.insert_mac_addr,
8980ac6dfecSJack F Vogel 			       (hw, addr, vmdq),
8990ac6dfecSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
9000ac6dfecSJack F Vogel }
9010ac6dfecSJack F Vogel 
9020ac6dfecSJack F Vogel /**
9039ca4041bSJack F Vogel  *  ixgbe_set_rar - Set Rx address register
90413705f88SJack F Vogel  *  @hw: pointer to hardware structure
90513705f88SJack F Vogel  *  @index: Receive address register to write
9069ca4041bSJack F Vogel  *  @addr: Address to put into receive address register
9079ca4041bSJack F Vogel  *  @vmdq: VMDq "set"
90813705f88SJack F Vogel  *  @enable_addr: set flag that address is active
90913705f88SJack F Vogel  *
91013705f88SJack F Vogel  *  Puts an ethernet address into a receive address register.
91113705f88SJack F Vogel  **/
9129ca4041bSJack F Vogel s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
91313705f88SJack F Vogel 		  u32 enable_addr)
91413705f88SJack F Vogel {
9159ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq,
91613705f88SJack F Vogel 			       enable_addr), IXGBE_NOT_IMPLEMENTED);
91713705f88SJack F Vogel }
91813705f88SJack F Vogel 
91913705f88SJack F Vogel /**
9205b7f4cedSJack F Vogel  *  ixgbe_clear_rar - Clear Rx address register
9215b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
9225b7f4cedSJack F Vogel  *  @index: Receive address register to write
9235b7f4cedSJack F Vogel  *
9245b7f4cedSJack F Vogel  *  Puts an ethernet address into a receive address register.
9255b7f4cedSJack F Vogel  **/
9265b7f4cedSJack F Vogel s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index)
9275b7f4cedSJack F Vogel {
9285b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index),
9295b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
9305b7f4cedSJack F Vogel }
9315b7f4cedSJack F Vogel 
9325b7f4cedSJack F Vogel /**
9339ca4041bSJack F Vogel  *  ixgbe_set_vmdq - Associate a VMDq index with a receive address
9349ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
9359ca4041bSJack F Vogel  *  @rar: receive address register index to associate with VMDq index
9369ca4041bSJack F Vogel  *  @vmdq: VMDq set or pool index
9379ca4041bSJack F Vogel  **/
9389ca4041bSJack F Vogel s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
9399ca4041bSJack F Vogel {
9409ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq),
9419ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
942a621e3c8SJack F Vogel 
943a621e3c8SJack F Vogel }
944a621e3c8SJack F Vogel 
945a621e3c8SJack F Vogel /**
946a621e3c8SJack F Vogel  *  ixgbe_set_vmdq_san_mac - Associate VMDq index 127 with a receive address
947a621e3c8SJack F Vogel  *  @hw: pointer to hardware structure
948a621e3c8SJack F Vogel  *  @vmdq: VMDq default pool index
949a621e3c8SJack F Vogel  **/
950a621e3c8SJack F Vogel s32 ixgbe_set_vmdq_san_mac(struct ixgbe_hw *hw, u32 vmdq)
951a621e3c8SJack F Vogel {
952a621e3c8SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vmdq_san_mac,
953a621e3c8SJack F Vogel 			       (hw, vmdq), IXGBE_NOT_IMPLEMENTED);
9549ca4041bSJack F Vogel }
9559ca4041bSJack F Vogel 
9569ca4041bSJack F Vogel /**
9575b7f4cedSJack F Vogel  *  ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address
9585b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
9595b7f4cedSJack F Vogel  *  @rar: receive address register index to disassociate with VMDq index
9605b7f4cedSJack F Vogel  *  @vmdq: VMDq set or pool index
9615b7f4cedSJack F Vogel  **/
9625b7f4cedSJack F Vogel s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
9635b7f4cedSJack F Vogel {
9645b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq),
9655b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
9665b7f4cedSJack F Vogel }
9675b7f4cedSJack F Vogel 
9685b7f4cedSJack F Vogel /**
96913705f88SJack F Vogel  *  ixgbe_init_rx_addrs - Initializes receive address filters.
97013705f88SJack F Vogel  *  @hw: pointer to hardware structure
97113705f88SJack F Vogel  *
97213705f88SJack F Vogel  *  Places the MAC address in receive address register 0 and clears the rest
9739ca4041bSJack F Vogel  *  of the receive address registers. Clears the multicast table. Assumes
97413705f88SJack F Vogel  *  the receiver is in reset when the routine is called.
97513705f88SJack F Vogel  **/
97613705f88SJack F Vogel s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw)
97713705f88SJack F Vogel {
9789ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw),
97913705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
98013705f88SJack F Vogel }
98113705f88SJack F Vogel 
98213705f88SJack F Vogel /**
98313705f88SJack F Vogel  *  ixgbe_get_num_rx_addrs - Returns the number of RAR entries.
98413705f88SJack F Vogel  *  @hw: pointer to hardware structure
98513705f88SJack F Vogel  **/
98613705f88SJack F Vogel u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw)
98713705f88SJack F Vogel {
9889ca4041bSJack F Vogel 	return hw->mac.num_rar_entries;
9899ca4041bSJack F Vogel }
9909ca4041bSJack F Vogel 
9919ca4041bSJack F Vogel /**
9929ca4041bSJack F Vogel  *  ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses
9939ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
9949ca4041bSJack F Vogel  *  @addr_list: the list of new multicast addresses
9959ca4041bSJack F Vogel  *  @addr_count: number of addresses
9969ca4041bSJack F Vogel  *  @func: iterator function to walk the multicast address list
9979ca4041bSJack F Vogel  *
9989ca4041bSJack F Vogel  *  The given list replaces any existing list. Clears the secondary addrs from
9999ca4041bSJack F Vogel  *  receive address registers. Uses unused receive address registers for the
10009ca4041bSJack F Vogel  *  first secondary addresses, and falls back to promiscuous mode as needed.
10019ca4041bSJack F Vogel  **/
10029ca4041bSJack F Vogel s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list,
10039ca4041bSJack F Vogel 			      u32 addr_count, ixgbe_mc_addr_itr func)
10049ca4041bSJack F Vogel {
10059ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw,
10069ca4041bSJack F Vogel 			       addr_list, addr_count, func),
10079ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
100813705f88SJack F Vogel }
100913705f88SJack F Vogel 
101013705f88SJack F Vogel /**
101113705f88SJack F Vogel  *  ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses
101213705f88SJack F Vogel  *  @hw: pointer to hardware structure
101313705f88SJack F Vogel  *  @mc_addr_list: the list of new multicast addresses
101413705f88SJack F Vogel  *  @mc_addr_count: number of addresses
10159ca4041bSJack F Vogel  *  @func: iterator function to walk the multicast address list
10167d48aa4cSEric Joyner  *  @clear: flag, when set clears the table beforehand
101713705f88SJack F Vogel  *
101813705f88SJack F Vogel  *  The given list replaces any existing list. Clears the MC addrs from receive
10199ca4041bSJack F Vogel  *  address registers and the multicast table. Uses unused receive address
102013705f88SJack F Vogel  *  registers for the first multicast addresses, and hashes the rest into the
102113705f88SJack F Vogel  *  multicast table.
102213705f88SJack F Vogel  **/
102313705f88SJack F Vogel s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list,
102485d0a26eSJack F Vogel 			      u32 mc_addr_count, ixgbe_mc_addr_itr func,
102585d0a26eSJack F Vogel 			      bool clear)
102613705f88SJack F Vogel {
10279ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw,
102885d0a26eSJack F Vogel 			       mc_addr_list, mc_addr_count, func, clear),
102913705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
103013705f88SJack F Vogel }
103113705f88SJack F Vogel 
103213705f88SJack F Vogel /**
103313705f88SJack F Vogel  *  ixgbe_enable_mc - Enable multicast address in RAR
103413705f88SJack F Vogel  *  @hw: pointer to hardware structure
103513705f88SJack F Vogel  *
103613705f88SJack F Vogel  *  Enables multicast address in RAR and the use of the multicast hash table.
103713705f88SJack F Vogel  **/
103813705f88SJack F Vogel s32 ixgbe_enable_mc(struct ixgbe_hw *hw)
103913705f88SJack F Vogel {
10409ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw),
104113705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
104213705f88SJack F Vogel }
104313705f88SJack F Vogel 
104413705f88SJack F Vogel /**
104513705f88SJack F Vogel  *  ixgbe_disable_mc - Disable multicast address in RAR
104613705f88SJack F Vogel  *  @hw: pointer to hardware structure
104713705f88SJack F Vogel  *
104813705f88SJack F Vogel  *  Disables multicast address in RAR and the use of the multicast hash table.
104913705f88SJack F Vogel  **/
105013705f88SJack F Vogel s32 ixgbe_disable_mc(struct ixgbe_hw *hw)
105113705f88SJack F Vogel {
10529ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw),
105313705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
105413705f88SJack F Vogel }
105513705f88SJack F Vogel 
105613705f88SJack F Vogel /**
105713705f88SJack F Vogel  *  ixgbe_clear_vfta - Clear VLAN filter table
105813705f88SJack F Vogel  *  @hw: pointer to hardware structure
105913705f88SJack F Vogel  *
106013705f88SJack F Vogel  *  Clears the VLAN filer table, and the VMDq index associated with the filter
106113705f88SJack F Vogel  **/
106213705f88SJack F Vogel s32 ixgbe_clear_vfta(struct ixgbe_hw *hw)
106313705f88SJack F Vogel {
10649ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw),
106513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
106613705f88SJack F Vogel }
106713705f88SJack F Vogel 
106813705f88SJack F Vogel /**
106913705f88SJack F Vogel  *  ixgbe_set_vfta - Set VLAN filter table
107013705f88SJack F Vogel  *  @hw: pointer to hardware structure
107113705f88SJack F Vogel  *  @vlan: VLAN id to write to VLAN filter
10728eb6488eSEric Joyner  *  @vind: VMDq output index that maps queue to VLAN id in VLVFB
10738eb6488eSEric Joyner  *  @vlan_on: boolean flag to turn on/off VLAN
10748eb6488eSEric Joyner  *  @vlvf_bypass: boolean flag indicating updating the default pool is okay
107513705f88SJack F Vogel  *
107613705f88SJack F Vogel  *  Turn on/off specified VLAN in the VLAN filter table.
107713705f88SJack F Vogel  **/
10788eb6488eSEric Joyner s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on,
10798eb6488eSEric Joyner 		   bool vlvf_bypass)
108013705f88SJack F Vogel {
10819ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind,
10828eb6488eSEric Joyner 			       vlan_on, vlvf_bypass), IXGBE_NOT_IMPLEMENTED);
108313705f88SJack F Vogel }
108413705f88SJack F Vogel 
108513705f88SJack F Vogel /**
108685d0a26eSJack F Vogel  *  ixgbe_set_vlvf - Set VLAN Pool Filter
108785d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
108885d0a26eSJack F Vogel  *  @vlan: VLAN id to write to VLAN filter
10898eb6488eSEric Joyner  *  @vind: VMDq output index that maps queue to VLAN id in VLVFB
10908eb6488eSEric Joyner  *  @vlan_on: boolean flag to turn on/off VLAN in VLVF
10918eb6488eSEric Joyner  *  @vfta_delta: pointer to the difference between the current value of VFTA
10928eb6488eSEric Joyner  *		 and the desired value
10938eb6488eSEric Joyner  *  @vfta: the desired value of the VFTA
10948eb6488eSEric Joyner  *  @vlvf_bypass: boolean flag indicating updating the default pool is okay
109585d0a26eSJack F Vogel  *
109685d0a26eSJack F Vogel  *  Turn on/off specified bit in VLVF table.
109785d0a26eSJack F Vogel  **/
109885d0a26eSJack F Vogel s32 ixgbe_set_vlvf(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on,
10998eb6488eSEric Joyner 		   u32 *vfta_delta, u32 vfta, bool vlvf_bypass)
110085d0a26eSJack F Vogel {
110185d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vlvf, (hw, vlan, vind,
11028eb6488eSEric Joyner 			       vlan_on, vfta_delta, vfta, vlvf_bypass),
11038eb6488eSEric Joyner 			       IXGBE_NOT_IMPLEMENTED);
110485d0a26eSJack F Vogel }
110585d0a26eSJack F Vogel 
110685d0a26eSJack F Vogel /**
11070ac6dfecSJack F Vogel  *  ixgbe_fc_enable - Enable flow control
110813705f88SJack F Vogel  *  @hw: pointer to hardware structure
110913705f88SJack F Vogel  *
111013705f88SJack F Vogel  *  Configures the flow control settings based on SW configuration.
111113705f88SJack F Vogel  **/
1112a621e3c8SJack F Vogel s32 ixgbe_fc_enable(struct ixgbe_hw *hw)
111313705f88SJack F Vogel {
1114a621e3c8SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.fc_enable, (hw),
111513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
111613705f88SJack F Vogel }
111713705f88SJack F Vogel 
11183ec35e52SJack F Vogel /**
1119758cc3dcSJack F Vogel  *  ixgbe_setup_fc - Set up flow control
1120758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1121758cc3dcSJack F Vogel  *
1122758cc3dcSJack F Vogel  *  Called at init time to set up flow control.
1123758cc3dcSJack F Vogel  **/
1124758cc3dcSJack F Vogel s32 ixgbe_setup_fc(struct ixgbe_hw *hw)
1125758cc3dcSJack F Vogel {
1126758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_fc, (hw),
1127758cc3dcSJack F Vogel 		IXGBE_NOT_IMPLEMENTED);
1128758cc3dcSJack F Vogel }
1129758cc3dcSJack F Vogel 
1130758cc3dcSJack F Vogel /**
113185d0a26eSJack F Vogel  * ixgbe_set_fw_drv_ver - Try to send the driver version number FW
113285d0a26eSJack F Vogel  * @hw: pointer to hardware structure
113385d0a26eSJack F Vogel  * @maj: driver major number to be sent to firmware
113485d0a26eSJack F Vogel  * @min: driver minor number to be sent to firmware
113585d0a26eSJack F Vogel  * @build: driver build number to be sent to firmware
113685d0a26eSJack F Vogel  * @ver: driver version number to be sent to firmware
11378eb6488eSEric Joyner  * @len: length of driver_ver string
11388eb6488eSEric Joyner  * @driver_ver: driver string
113985d0a26eSJack F Vogel  **/
114085d0a26eSJack F Vogel s32 ixgbe_set_fw_drv_ver(struct ixgbe_hw *hw, u8 maj, u8 min, u8 build,
11418eb6488eSEric Joyner 			 u8 ver, u16 len, char *driver_ver)
114285d0a26eSJack F Vogel {
114385d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_fw_drv_ver, (hw, maj, min,
11448eb6488eSEric Joyner 			       build, ver, len, driver_ver),
11458eb6488eSEric Joyner 			       IXGBE_NOT_IMPLEMENTED);
114685d0a26eSJack F Vogel }
114785d0a26eSJack F Vogel 
114885d0a26eSJack F Vogel 
1149fd75b91dSJack F Vogel 
1150758cc3dcSJack F Vogel /**
1151758cc3dcSJack F Vogel  *  ixgbe_dmac_config - Configure DMA Coalescing registers.
1152758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1153758cc3dcSJack F Vogel  *
1154758cc3dcSJack F Vogel  *  Configure DMA coalescing. If enabling dmac, dmac is activated.
1155758cc3dcSJack F Vogel  *  When disabling dmac, dmac enable dmac bit is cleared.
1156758cc3dcSJack F Vogel  **/
1157758cc3dcSJack F Vogel s32 ixgbe_dmac_config(struct ixgbe_hw *hw)
1158758cc3dcSJack F Vogel {
1159758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.dmac_config, (hw),
1160758cc3dcSJack F Vogel 				IXGBE_NOT_IMPLEMENTED);
1161758cc3dcSJack F Vogel }
1162758cc3dcSJack F Vogel 
1163758cc3dcSJack F Vogel /**
1164758cc3dcSJack F Vogel  *  ixgbe_dmac_update_tcs - Configure DMA Coalescing registers.
1165758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1166758cc3dcSJack F Vogel  *
1167758cc3dcSJack F Vogel  *  Disables dmac, updates per TC settings, and then enable dmac.
1168758cc3dcSJack F Vogel  **/
1169758cc3dcSJack F Vogel s32 ixgbe_dmac_update_tcs(struct ixgbe_hw *hw)
1170758cc3dcSJack F Vogel {
1171758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.dmac_update_tcs, (hw),
1172758cc3dcSJack F Vogel 				IXGBE_NOT_IMPLEMENTED);
1173758cc3dcSJack F Vogel }
1174758cc3dcSJack F Vogel 
1175758cc3dcSJack F Vogel /**
1176758cc3dcSJack F Vogel  *  ixgbe_dmac_config_tcs - Configure DMA Coalescing registers.
1177758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1178758cc3dcSJack F Vogel  *
1179758cc3dcSJack F Vogel  *  Configure DMA coalescing threshold per TC and set high priority bit for
1180758cc3dcSJack F Vogel  *  FCOE TC. The dmac enable bit must be cleared before configuring.
1181758cc3dcSJack F Vogel  **/
1182758cc3dcSJack F Vogel s32 ixgbe_dmac_config_tcs(struct ixgbe_hw *hw)
1183758cc3dcSJack F Vogel {
1184758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.dmac_config_tcs, (hw),
1185758cc3dcSJack F Vogel 				IXGBE_NOT_IMPLEMENTED);
1186758cc3dcSJack F Vogel }
1187758cc3dcSJack F Vogel 
1188758cc3dcSJack F Vogel /**
1189758cc3dcSJack F Vogel  *  ixgbe_setup_eee - Enable/disable EEE support
1190758cc3dcSJack F Vogel  *  @hw: pointer to the HW structure
1191758cc3dcSJack F Vogel  *  @enable_eee: boolean flag to enable EEE
1192758cc3dcSJack F Vogel  *
1193758cc3dcSJack F Vogel  *  Enable/disable EEE based on enable_ee flag.
1194758cc3dcSJack F Vogel  *  Auto-negotiation must be started after BASE-T EEE bits in PHY register 7.3C
1195758cc3dcSJack F Vogel  *  are modified.
1196758cc3dcSJack F Vogel  *
1197758cc3dcSJack F Vogel  **/
1198758cc3dcSJack F Vogel s32 ixgbe_setup_eee(struct ixgbe_hw *hw, bool enable_eee)
1199758cc3dcSJack F Vogel {
1200758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_eee, (hw, enable_eee),
1201758cc3dcSJack F Vogel 			IXGBE_NOT_IMPLEMENTED);
1202758cc3dcSJack F Vogel }
1203758cc3dcSJack F Vogel 
1204758cc3dcSJack F Vogel /**
1205758cc3dcSJack F Vogel  * ixgbe_set_source_address_pruning - Enable/Disable source address pruning
1206758cc3dcSJack F Vogel  * @hw: pointer to hardware structure
12077d48aa4cSEric Joyner  * @enable: enable or disable source address pruning
1208758cc3dcSJack F Vogel  * @pool: Rx pool - Rx pool to toggle source address pruning
1209758cc3dcSJack F Vogel  **/
1210758cc3dcSJack F Vogel void ixgbe_set_source_address_pruning(struct ixgbe_hw *hw, bool enable,
1211758cc3dcSJack F Vogel 				      unsigned int pool)
1212758cc3dcSJack F Vogel {
1213758cc3dcSJack F Vogel 	if (hw->mac.ops.set_source_address_pruning)
1214758cc3dcSJack F Vogel 		hw->mac.ops.set_source_address_pruning(hw, enable, pool);
1215758cc3dcSJack F Vogel }
1216758cc3dcSJack F Vogel 
1217758cc3dcSJack F Vogel /**
1218758cc3dcSJack F Vogel  *  ixgbe_set_ethertype_anti_spoofing - Enable/Disable Ethertype anti-spoofing
1219758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1220758cc3dcSJack F Vogel  *  @enable: enable or disable switch for Ethertype anti-spoofing
1221758cc3dcSJack F Vogel  *  @vf: Virtual Function pool - VF Pool to set for Ethertype anti-spoofing
1222758cc3dcSJack F Vogel  *
1223758cc3dcSJack F Vogel  **/
1224758cc3dcSJack F Vogel void ixgbe_set_ethertype_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf)
1225758cc3dcSJack F Vogel {
1226758cc3dcSJack F Vogel 	if (hw->mac.ops.set_ethertype_anti_spoofing)
1227758cc3dcSJack F Vogel 		hw->mac.ops.set_ethertype_anti_spoofing(hw, enable, vf);
1228758cc3dcSJack F Vogel }
1229758cc3dcSJack F Vogel 
1230758cc3dcSJack F Vogel /**
1231758cc3dcSJack F Vogel  *  ixgbe_read_iosf_sb_reg - Read 32 bit PHY register
1232758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1233758cc3dcSJack F Vogel  *  @reg_addr: 32 bit address of PHY register to read
1234758cc3dcSJack F Vogel  *  @device_type: type of device you want to communicate with
1235758cc3dcSJack F Vogel  *  @phy_data: Pointer to read data from PHY register
1236758cc3dcSJack F Vogel  *
1237758cc3dcSJack F Vogel  *  Reads a value from a specified PHY register
1238758cc3dcSJack F Vogel  **/
1239758cc3dcSJack F Vogel s32 ixgbe_read_iosf_sb_reg(struct ixgbe_hw *hw, u32 reg_addr,
1240758cc3dcSJack F Vogel 			   u32 device_type, u32 *phy_data)
1241758cc3dcSJack F Vogel {
1242758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.read_iosf_sb_reg, (hw, reg_addr,
1243758cc3dcSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
1244758cc3dcSJack F Vogel }
1245758cc3dcSJack F Vogel 
1246758cc3dcSJack F Vogel /**
1247758cc3dcSJack F Vogel  *  ixgbe_write_iosf_sb_reg - Write 32 bit register through IOSF Sideband
1248758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1249758cc3dcSJack F Vogel  *  @reg_addr: 32 bit PHY register to write
1250758cc3dcSJack F Vogel  *  @device_type: type of device you want to communicate with
1251758cc3dcSJack F Vogel  *  @phy_data: Data to write to the PHY register
1252758cc3dcSJack F Vogel  *
1253758cc3dcSJack F Vogel  *  Writes a value to specified PHY register
1254758cc3dcSJack F Vogel  **/
1255758cc3dcSJack F Vogel s32 ixgbe_write_iosf_sb_reg(struct ixgbe_hw *hw, u32 reg_addr,
1256758cc3dcSJack F Vogel 			    u32 device_type, u32 phy_data)
1257758cc3dcSJack F Vogel {
1258758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.write_iosf_sb_reg, (hw, reg_addr,
1259758cc3dcSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
1260758cc3dcSJack F Vogel }
1261758cc3dcSJack F Vogel 
1262758cc3dcSJack F Vogel /**
1263758cc3dcSJack F Vogel  *  ixgbe_disable_mdd - Disable malicious driver detection
1264758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1265758cc3dcSJack F Vogel  *
1266758cc3dcSJack F Vogel  **/
1267758cc3dcSJack F Vogel void ixgbe_disable_mdd(struct ixgbe_hw *hw)
1268758cc3dcSJack F Vogel {
1269758cc3dcSJack F Vogel 	if (hw->mac.ops.disable_mdd)
1270758cc3dcSJack F Vogel 		hw->mac.ops.disable_mdd(hw);
1271758cc3dcSJack F Vogel }
1272758cc3dcSJack F Vogel 
1273758cc3dcSJack F Vogel /**
1274758cc3dcSJack F Vogel  *  ixgbe_enable_mdd - Enable malicious driver detection
1275758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1276758cc3dcSJack F Vogel  *
1277758cc3dcSJack F Vogel  **/
1278758cc3dcSJack F Vogel void ixgbe_enable_mdd(struct ixgbe_hw *hw)
1279758cc3dcSJack F Vogel {
1280758cc3dcSJack F Vogel 	if (hw->mac.ops.enable_mdd)
1281758cc3dcSJack F Vogel 		hw->mac.ops.enable_mdd(hw);
1282758cc3dcSJack F Vogel }
1283758cc3dcSJack F Vogel 
1284758cc3dcSJack F Vogel /**
1285758cc3dcSJack F Vogel  *  ixgbe_mdd_event - Handle malicious driver detection event
1286758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1287758cc3dcSJack F Vogel  *  @vf_bitmap: vf bitmap of malicious vfs
1288758cc3dcSJack F Vogel  *
1289758cc3dcSJack F Vogel  **/
1290758cc3dcSJack F Vogel void ixgbe_mdd_event(struct ixgbe_hw *hw, u32 *vf_bitmap)
1291758cc3dcSJack F Vogel {
1292758cc3dcSJack F Vogel 	if (hw->mac.ops.mdd_event)
1293758cc3dcSJack F Vogel 		hw->mac.ops.mdd_event(hw, vf_bitmap);
1294758cc3dcSJack F Vogel }
1295758cc3dcSJack F Vogel 
1296758cc3dcSJack F Vogel /**
1297758cc3dcSJack F Vogel  *  ixgbe_restore_mdd_vf - Restore VF that was disabled during malicious driver
1298758cc3dcSJack F Vogel  *  detection event
1299758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1300758cc3dcSJack F Vogel  *  @vf: vf index
1301758cc3dcSJack F Vogel  *
1302758cc3dcSJack F Vogel  **/
1303758cc3dcSJack F Vogel void ixgbe_restore_mdd_vf(struct ixgbe_hw *hw, u32 vf)
1304758cc3dcSJack F Vogel {
1305758cc3dcSJack F Vogel 	if (hw->mac.ops.restore_mdd_vf)
1306758cc3dcSJack F Vogel 		hw->mac.ops.restore_mdd_vf(hw, vf);
1307758cc3dcSJack F Vogel }
1308758cc3dcSJack F Vogel 
1309758cc3dcSJack F Vogel /**
1310b622bdb4SXiaoyun Li  *  ixgbe_fw_recovery_mode - Check if in FW NVM recovery mode
1311b622bdb4SXiaoyun Li  *  @hw: pointer to hardware structure
1312b622bdb4SXiaoyun Li  *
1313b622bdb4SXiaoyun Li  **/
1314b622bdb4SXiaoyun Li bool ixgbe_fw_recovery_mode(struct ixgbe_hw *hw)
1315b622bdb4SXiaoyun Li {
1316b622bdb4SXiaoyun Li 	if (hw->mac.ops.fw_recovery_mode)
1317b622bdb4SXiaoyun Li 		return hw->mac.ops.fw_recovery_mode(hw);
1318b622bdb4SXiaoyun Li 	return false;
1319b622bdb4SXiaoyun Li }
1320b622bdb4SXiaoyun Li 
1321b622bdb4SXiaoyun Li /**
1322758cc3dcSJack F Vogel  *  ixgbe_enter_lplu - Transition to low power states
1323758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1324758cc3dcSJack F Vogel  *
1325758cc3dcSJack F Vogel  * Configures Low Power Link Up on transition to low power states
1326758cc3dcSJack F Vogel  * (from D0 to non-D0).
1327758cc3dcSJack F Vogel  **/
1328758cc3dcSJack F Vogel s32 ixgbe_enter_lplu(struct ixgbe_hw *hw)
1329758cc3dcSJack F Vogel {
1330758cc3dcSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.enter_lplu, (hw),
1331758cc3dcSJack F Vogel 				IXGBE_NOT_IMPLEMENTED);
1332758cc3dcSJack F Vogel }
1333fd75b91dSJack F Vogel 
133485d0a26eSJack F Vogel /**
13356f37f232SEric Joyner  * ixgbe_handle_lasi - Handle external Base T PHY interrupt
13366f37f232SEric Joyner  * @hw: pointer to hardware structure
13376f37f232SEric Joyner  *
13386f37f232SEric Joyner  * Handle external Base T PHY interrupt. If high temperature
13396f37f232SEric Joyner  * failure alarm then return error, else if link status change
13406f37f232SEric Joyner  * then setup internal/external PHY link
13416f37f232SEric Joyner  *
13426f37f232SEric Joyner  * Return IXGBE_ERR_OVERTEMP if interrupt is high temperature
13436f37f232SEric Joyner  * failure alarm, else return PHY access status.
13446f37f232SEric Joyner  */
13456f37f232SEric Joyner s32 ixgbe_handle_lasi(struct ixgbe_hw *hw)
13466f37f232SEric Joyner {
13476f37f232SEric Joyner 	return ixgbe_call_func(hw, hw->phy.ops.handle_lasi, (hw),
13486f37f232SEric Joyner 				IXGBE_NOT_IMPLEMENTED);
13496f37f232SEric Joyner }
13506f37f232SEric Joyner 
13516f37f232SEric Joyner /**
13528eb6488eSEric Joyner  *  ixgbe_bypass_rw - Bit bang data into by_pass FW
13538eb6488eSEric Joyner  *  @hw: pointer to hardware structure
13548eb6488eSEric Joyner  *  @cmd: Command we send to the FW
13558eb6488eSEric Joyner  *  @status: The reply from the FW
13568eb6488eSEric Joyner  *
13578eb6488eSEric Joyner  *  Bit-bangs the cmd to the by_pass FW status points to what is returned.
13588eb6488eSEric Joyner  **/
13598eb6488eSEric Joyner s32 ixgbe_bypass_rw(struct ixgbe_hw *hw, u32 cmd, u32 *status)
13608eb6488eSEric Joyner {
13618eb6488eSEric Joyner 	return ixgbe_call_func(hw, hw->mac.ops.bypass_rw, (hw, cmd, status),
13628eb6488eSEric Joyner 				IXGBE_NOT_IMPLEMENTED);
13638eb6488eSEric Joyner }
13648eb6488eSEric Joyner 
13658eb6488eSEric Joyner /**
13668eb6488eSEric Joyner  * ixgbe_bypass_valid_rd - Verify valid return from bit-bang.
13678eb6488eSEric Joyner  *
13688eb6488eSEric Joyner  * If we send a write we can't be sure it took until we can read back
13698eb6488eSEric Joyner  * that same register.  It can be a problem as some of the feilds may
13708eb6488eSEric Joyner  * for valid reasons change inbetween the time wrote the register and
13718eb6488eSEric Joyner  * we read it again to verify.  So this function check everything we
13728eb6488eSEric Joyner  * can check and then assumes it worked.
13738eb6488eSEric Joyner  *
13748eb6488eSEric Joyner  * @u32 in_reg - The register cmd for the bit-bang read.
13758eb6488eSEric Joyner  * @u32 out_reg - The register returned from a bit-bang read.
13768eb6488eSEric Joyner  **/
13778eb6488eSEric Joyner bool ixgbe_bypass_valid_rd(struct ixgbe_hw *hw, u32 in_reg, u32 out_reg)
13788eb6488eSEric Joyner {
13798eb6488eSEric Joyner 	return ixgbe_call_func(hw, hw->mac.ops.bypass_valid_rd,
13808eb6488eSEric Joyner 			       (in_reg, out_reg), IXGBE_NOT_IMPLEMENTED);
13818eb6488eSEric Joyner }
13828eb6488eSEric Joyner 
13838eb6488eSEric Joyner /**
13848eb6488eSEric Joyner  *  ixgbe_bypass_set - Set a bypass field in the FW CTRL Regiter.
13858eb6488eSEric Joyner  *  @hw: pointer to hardware structure
13868eb6488eSEric Joyner  *  @cmd: The control word we are setting.
13878eb6488eSEric Joyner  *  @event: The event we are setting in the FW.  This also happens to
13888eb6488eSEric Joyner  *          be the mask for the event we are setting (handy)
13898eb6488eSEric Joyner  *  @action: The action we set the event to in the FW. This is in a
13908eb6488eSEric Joyner  *           bit field that happens to be what we want to put in
13918eb6488eSEric Joyner  *           the event spot (also handy)
13928eb6488eSEric Joyner  *
13938eb6488eSEric Joyner  *  Writes to the cmd control the bits in actions.
13948eb6488eSEric Joyner  **/
13958eb6488eSEric Joyner s32 ixgbe_bypass_set(struct ixgbe_hw *hw, u32 cmd, u32 event, u32 action)
13968eb6488eSEric Joyner {
13978eb6488eSEric Joyner 	return ixgbe_call_func(hw, hw->mac.ops.bypass_set,
13988eb6488eSEric Joyner 			       (hw, cmd, event, action),
13998eb6488eSEric Joyner 				IXGBE_NOT_IMPLEMENTED);
14008eb6488eSEric Joyner }
14018eb6488eSEric Joyner 
14028eb6488eSEric Joyner /**
14038eb6488eSEric Joyner  *  ixgbe_bypass_rd_eep - Read the bypass FW eeprom address
14048eb6488eSEric Joyner  *  @hw: pointer to hardware structure
14058eb6488eSEric Joyner  *  @addr: The bypass eeprom address to read.
14068eb6488eSEric Joyner  *  @value: The 8b of data at the address above.
14078eb6488eSEric Joyner  **/
14088eb6488eSEric Joyner s32 ixgbe_bypass_rd_eep(struct ixgbe_hw *hw, u32 addr, u8 *value)
14098eb6488eSEric Joyner {
14108eb6488eSEric Joyner 	return ixgbe_call_func(hw, hw->mac.ops.bypass_rd_eep,
14118eb6488eSEric Joyner 			       (hw, addr, value), IXGBE_NOT_IMPLEMENTED);
14128eb6488eSEric Joyner }
14138eb6488eSEric Joyner 
14148eb6488eSEric Joyner /**
14153ec35e52SJack F Vogel  *  ixgbe_read_analog_reg8 - Reads 8 bit analog register
14163ec35e52SJack F Vogel  *  @hw: pointer to hardware structure
14173ec35e52SJack F Vogel  *  @reg: analog register to read
14183ec35e52SJack F Vogel  *  @val: read value
14193ec35e52SJack F Vogel  *
14203ec35e52SJack F Vogel  *  Performs write operation to analog register specified.
14213ec35e52SJack F Vogel  **/
14223ec35e52SJack F Vogel s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val)
14233ec35e52SJack F Vogel {
14249ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg,
14259ca4041bSJack F Vogel 			       val), IXGBE_NOT_IMPLEMENTED);
14263ec35e52SJack F Vogel }
14273ec35e52SJack F Vogel 
14283ec35e52SJack F Vogel /**
14293ec35e52SJack F Vogel  *  ixgbe_write_analog_reg8 - Writes 8 bit analog register
14303ec35e52SJack F Vogel  *  @hw: pointer to hardware structure
14313ec35e52SJack F Vogel  *  @reg: analog register to write
14323ec35e52SJack F Vogel  *  @val: value to write
14333ec35e52SJack F Vogel  *
14343ec35e52SJack F Vogel  *  Performs write operation to Atlas analog register specified.
14353ec35e52SJack F Vogel  **/
14363ec35e52SJack F Vogel s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val)
14373ec35e52SJack F Vogel {
14389ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg,
14399ca4041bSJack F Vogel 			       val), IXGBE_NOT_IMPLEMENTED);
14403ec35e52SJack F Vogel }
14413ec35e52SJack F Vogel 
14425b7f4cedSJack F Vogel /**
14435b7f4cedSJack F Vogel  *  ixgbe_init_uta_tables - Initializes Unicast Table Arrays.
14445b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
14455b7f4cedSJack F Vogel  *
14465b7f4cedSJack F Vogel  *  Initializes the Unicast Table Arrays to zero on device load.  This
14475b7f4cedSJack F Vogel  *  is part of the Rx init addr execution path.
14485b7f4cedSJack F Vogel  **/
14495b7f4cedSJack F Vogel s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw)
14505b7f4cedSJack F Vogel {
14515b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw),
14525b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
14535b7f4cedSJack F Vogel }
14541b6e0dbaSJack F Vogel 
14551b6e0dbaSJack F Vogel /**
14560ac6dfecSJack F Vogel  *  ixgbe_read_i2c_byte - Reads 8 bit word over I2C at specified device address
14570ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
14580ac6dfecSJack F Vogel  *  @byte_offset: byte offset to read
1459758cc3dcSJack F Vogel  *  @dev_addr: I2C bus address to read from
14600ac6dfecSJack F Vogel  *  @data: value read
14610ac6dfecSJack F Vogel  *
14620ac6dfecSJack F Vogel  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
14630ac6dfecSJack F Vogel  **/
14640ac6dfecSJack F Vogel s32 ixgbe_read_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr,
14650ac6dfecSJack F Vogel 			u8 *data)
14660ac6dfecSJack F Vogel {
14670ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte, (hw, byte_offset,
14680ac6dfecSJack F Vogel 			       dev_addr, data), IXGBE_NOT_IMPLEMENTED);
14690ac6dfecSJack F Vogel }
14700ac6dfecSJack F Vogel 
14710ac6dfecSJack F Vogel /**
14726f37f232SEric Joyner  *  ixgbe_read_i2c_byte_unlocked - Reads 8 bit word via I2C from device address
14736f37f232SEric Joyner  *  @hw: pointer to hardware structure
14746f37f232SEric Joyner  *  @byte_offset: byte offset to read
14756f37f232SEric Joyner  *  @dev_addr: I2C bus address to read from
14766f37f232SEric Joyner  *  @data: value read
14776f37f232SEric Joyner  *
14786f37f232SEric Joyner  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
14796f37f232SEric Joyner  **/
14806f37f232SEric Joyner s32 ixgbe_read_i2c_byte_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
14816f37f232SEric Joyner 				 u8 dev_addr, u8 *data)
14826f37f232SEric Joyner {
14836f37f232SEric Joyner 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte_unlocked,
14846f37f232SEric Joyner 			       (hw, byte_offset, dev_addr, data),
14856f37f232SEric Joyner 			       IXGBE_NOT_IMPLEMENTED);
14866f37f232SEric Joyner }
14876f37f232SEric Joyner 
14886f37f232SEric Joyner /**
14898eb6488eSEric Joyner  * ixgbe_read_link - Perform read operation on link device
1490758cc3dcSJack F Vogel  * @hw: pointer to the hardware structure
14918eb6488eSEric Joyner  * @addr: bus address to read from
14928eb6488eSEric Joyner  * @reg: device register to read from
1493758cc3dcSJack F Vogel  * @val: pointer to location to receive read value
1494758cc3dcSJack F Vogel  *
1495758cc3dcSJack F Vogel  * Returns an error code on error.
1496758cc3dcSJack F Vogel  */
14978eb6488eSEric Joyner s32 ixgbe_read_link(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 *val)
1498758cc3dcSJack F Vogel {
14998eb6488eSEric Joyner 	return ixgbe_call_func(hw, hw->link.ops.read_link, (hw, addr,
1500758cc3dcSJack F Vogel 			       reg, val), IXGBE_NOT_IMPLEMENTED);
1501758cc3dcSJack F Vogel }
1502758cc3dcSJack F Vogel 
1503758cc3dcSJack F Vogel /**
15048eb6488eSEric Joyner  * ixgbe_read_link_unlocked - Perform read operation on link device
15056f37f232SEric Joyner  * @hw: pointer to the hardware structure
15068eb6488eSEric Joyner  * @addr: bus address to read from
15078eb6488eSEric Joyner  * @reg: device register to read from
15086f37f232SEric Joyner  * @val: pointer to location to receive read value
15096f37f232SEric Joyner  *
15106f37f232SEric Joyner  * Returns an error code on error.
15116f37f232SEric Joyner  **/
15128eb6488eSEric Joyner s32 ixgbe_read_link_unlocked(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 *val)
15136f37f232SEric Joyner {
15148eb6488eSEric Joyner 	return ixgbe_call_func(hw, hw->link.ops.read_link_unlocked,
15158eb6488eSEric Joyner 			       (hw, addr, reg, val), IXGBE_NOT_IMPLEMENTED);
15166f37f232SEric Joyner }
15176f37f232SEric Joyner 
15186f37f232SEric Joyner /**
15190ac6dfecSJack F Vogel  *  ixgbe_write_i2c_byte - Writes 8 bit word over I2C
15200ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
15210ac6dfecSJack F Vogel  *  @byte_offset: byte offset to write
1522758cc3dcSJack F Vogel  *  @dev_addr: I2C bus address to write to
15230ac6dfecSJack F Vogel  *  @data: value to write
15240ac6dfecSJack F Vogel  *
15250ac6dfecSJack F Vogel  *  Performs byte write operation to SFP module's EEPROM over I2C interface
15260ac6dfecSJack F Vogel  *  at a specified device address.
15270ac6dfecSJack F Vogel  **/
15280ac6dfecSJack F Vogel s32 ixgbe_write_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr,
15290ac6dfecSJack F Vogel 			 u8 data)
15300ac6dfecSJack F Vogel {
15310ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte, (hw, byte_offset,
15320ac6dfecSJack F Vogel 			       dev_addr, data), IXGBE_NOT_IMPLEMENTED);
15330ac6dfecSJack F Vogel }
15340ac6dfecSJack F Vogel 
15350ac6dfecSJack F Vogel /**
15366f37f232SEric Joyner  *  ixgbe_write_i2c_byte_unlocked - Writes 8 bit word over I2C
15376f37f232SEric Joyner  *  @hw: pointer to hardware structure
15386f37f232SEric Joyner  *  @byte_offset: byte offset to write
15396f37f232SEric Joyner  *  @dev_addr: I2C bus address to write to
15406f37f232SEric Joyner  *  @data: value to write
15416f37f232SEric Joyner  *
15426f37f232SEric Joyner  *  Performs byte write operation to SFP module's EEPROM over I2C interface
15436f37f232SEric Joyner  *  at a specified device address.
15446f37f232SEric Joyner  **/
15456f37f232SEric Joyner s32 ixgbe_write_i2c_byte_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
15466f37f232SEric Joyner 				  u8 dev_addr, u8 data)
15476f37f232SEric Joyner {
15486f37f232SEric Joyner 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte_unlocked,
15496f37f232SEric Joyner 			       (hw, byte_offset, dev_addr, data),
15506f37f232SEric Joyner 			       IXGBE_NOT_IMPLEMENTED);
15516f37f232SEric Joyner }
15526f37f232SEric Joyner 
15536f37f232SEric Joyner /**
15548eb6488eSEric Joyner  * ixgbe_write_link - Perform write operation on link device
1555758cc3dcSJack F Vogel  * @hw: pointer to the hardware structure
15568eb6488eSEric Joyner  * @addr: bus address to write to
15578eb6488eSEric Joyner  * @reg: device register to write to
1558758cc3dcSJack F Vogel  * @val: value to write
1559758cc3dcSJack F Vogel  *
1560758cc3dcSJack F Vogel  * Returns an error code on error.
1561758cc3dcSJack F Vogel  */
15628eb6488eSEric Joyner s32 ixgbe_write_link(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 val)
1563758cc3dcSJack F Vogel {
15648eb6488eSEric Joyner 	return ixgbe_call_func(hw, hw->link.ops.write_link,
15658eb6488eSEric Joyner 			       (hw, addr, reg, val), IXGBE_NOT_IMPLEMENTED);
1566758cc3dcSJack F Vogel }
1567758cc3dcSJack F Vogel 
1568758cc3dcSJack F Vogel /**
15698eb6488eSEric Joyner  * ixgbe_write_link_unlocked - Perform write operation on link device
15706f37f232SEric Joyner  * @hw: pointer to the hardware structure
15718eb6488eSEric Joyner  * @addr: bus address to write to
15728eb6488eSEric Joyner  * @reg: device register to write to
15736f37f232SEric Joyner  * @val: value to write
15746f37f232SEric Joyner  *
15756f37f232SEric Joyner  * Returns an error code on error.
15766f37f232SEric Joyner  **/
15778eb6488eSEric Joyner s32 ixgbe_write_link_unlocked(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 val)
15786f37f232SEric Joyner {
15798eb6488eSEric Joyner 	return ixgbe_call_func(hw, hw->link.ops.write_link_unlocked,
15806f37f232SEric Joyner 			       (hw, addr, reg, val), IXGBE_NOT_IMPLEMENTED);
15816f37f232SEric Joyner }
15826f37f232SEric Joyner 
15836f37f232SEric Joyner /**
15840ac6dfecSJack F Vogel  *  ixgbe_write_i2c_eeprom - Writes 8 bit EEPROM word over I2C interface
15850ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
15860ac6dfecSJack F Vogel  *  @byte_offset: EEPROM byte offset to write
15870ac6dfecSJack F Vogel  *  @eeprom_data: value to write
15880ac6dfecSJack F Vogel  *
15890ac6dfecSJack F Vogel  *  Performs byte write operation to SFP module's EEPROM over I2C interface.
15900ac6dfecSJack F Vogel  **/
15910ac6dfecSJack F Vogel s32 ixgbe_write_i2c_eeprom(struct ixgbe_hw *hw,
15920ac6dfecSJack F Vogel 			   u8 byte_offset, u8 eeprom_data)
15930ac6dfecSJack F Vogel {
15940ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_eeprom,
15950ac6dfecSJack F Vogel 			       (hw, byte_offset, eeprom_data),
15960ac6dfecSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
15970ac6dfecSJack F Vogel }
15980ac6dfecSJack F Vogel 
15990ac6dfecSJack F Vogel /**
16001b6e0dbaSJack F Vogel  *  ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface
16011b6e0dbaSJack F Vogel  *  @hw: pointer to hardware structure
16021b6e0dbaSJack F Vogel  *  @byte_offset: EEPROM byte offset to read
16031b6e0dbaSJack F Vogel  *  @eeprom_data: value read
16041b6e0dbaSJack F Vogel  *
16051b6e0dbaSJack F Vogel  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
16061b6e0dbaSJack F Vogel  **/
16071b6e0dbaSJack F Vogel s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data)
16081b6e0dbaSJack F Vogel {
16091b6e0dbaSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom,
16101b6e0dbaSJack F Vogel 			      (hw, byte_offset, eeprom_data),
16111b6e0dbaSJack F Vogel 			      IXGBE_NOT_IMPLEMENTED);
16121b6e0dbaSJack F Vogel }
16131b6e0dbaSJack F Vogel 
16141b6e0dbaSJack F Vogel /**
16151b6e0dbaSJack F Vogel  *  ixgbe_get_supported_physical_layer - Returns physical layer type
16161b6e0dbaSJack F Vogel  *  @hw: pointer to hardware structure
16171b6e0dbaSJack F Vogel  *
16181b6e0dbaSJack F Vogel  *  Determines physical layer capabilities of the current configuration.
16191b6e0dbaSJack F Vogel  **/
16208eb6488eSEric Joyner u64 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw)
16211b6e0dbaSJack F Vogel {
16221b6e0dbaSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer,
16231b6e0dbaSJack F Vogel 			       (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN);
16241b6e0dbaSJack F Vogel }
16250ac6dfecSJack F Vogel 
16260ac6dfecSJack F Vogel /**
1627a621e3c8SJack F Vogel  *  ixgbe_enable_rx_dma - Enables Rx DMA unit, dependent on device specifics
16280ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
16290ac6dfecSJack F Vogel  *  @regval: bitfield to write to the Rx DMA register
16300ac6dfecSJack F Vogel  *
16310ac6dfecSJack F Vogel  *  Enables the Rx DMA unit of the device.
16320ac6dfecSJack F Vogel  **/
16330ac6dfecSJack F Vogel s32 ixgbe_enable_rx_dma(struct ixgbe_hw *hw, u32 regval)
16340ac6dfecSJack F Vogel {
16350ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_rx_dma,
16360ac6dfecSJack F Vogel 			       (hw, regval), IXGBE_NOT_IMPLEMENTED);
16370ac6dfecSJack F Vogel }
1638d8602bb9SJack F Vogel 
1639d8602bb9SJack F Vogel /**
164085d0a26eSJack F Vogel  *  ixgbe_disable_sec_rx_path - Stops the receive data path
164185d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
164285d0a26eSJack F Vogel  *
164385d0a26eSJack F Vogel  *  Stops the receive data path.
164485d0a26eSJack F Vogel  **/
164585d0a26eSJack F Vogel s32 ixgbe_disable_sec_rx_path(struct ixgbe_hw *hw)
164685d0a26eSJack F Vogel {
164785d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.disable_sec_rx_path,
164885d0a26eSJack F Vogel 				(hw), IXGBE_NOT_IMPLEMENTED);
164985d0a26eSJack F Vogel }
165085d0a26eSJack F Vogel 
165185d0a26eSJack F Vogel /**
165285d0a26eSJack F Vogel  *  ixgbe_enable_sec_rx_path - Enables the receive data path
165385d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
165485d0a26eSJack F Vogel  *
165585d0a26eSJack F Vogel  *  Enables the receive data path.
165685d0a26eSJack F Vogel  **/
165785d0a26eSJack F Vogel s32 ixgbe_enable_sec_rx_path(struct ixgbe_hw *hw)
165885d0a26eSJack F Vogel {
165985d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_sec_rx_path,
166085d0a26eSJack F Vogel 				(hw), IXGBE_NOT_IMPLEMENTED);
166185d0a26eSJack F Vogel }
166285d0a26eSJack F Vogel 
166385d0a26eSJack F Vogel /**
1664d8602bb9SJack F Vogel  *  ixgbe_acquire_swfw_semaphore - Acquire SWFW semaphore
1665d8602bb9SJack F Vogel  *  @hw: pointer to hardware structure
1666d8602bb9SJack F Vogel  *  @mask: Mask to specify which semaphore to acquire
1667d8602bb9SJack F Vogel  *
1668d8602bb9SJack F Vogel  *  Acquires the SWFW semaphore through SW_FW_SYNC register for the specified
1669d8602bb9SJack F Vogel  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
1670d8602bb9SJack F Vogel  **/
1671758cc3dcSJack F Vogel s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u32 mask)
1672d8602bb9SJack F Vogel {
1673d8602bb9SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.acquire_swfw_sync,
1674d8602bb9SJack F Vogel 			       (hw, mask), IXGBE_NOT_IMPLEMENTED);
1675d8602bb9SJack F Vogel }
1676d8602bb9SJack F Vogel 
1677d8602bb9SJack F Vogel /**
1678d8602bb9SJack F Vogel  *  ixgbe_release_swfw_semaphore - Release SWFW semaphore
1679d8602bb9SJack F Vogel  *  @hw: pointer to hardware structure
1680d8602bb9SJack F Vogel  *  @mask: Mask to specify which semaphore to release
1681d8602bb9SJack F Vogel  *
1682d8602bb9SJack F Vogel  *  Releases the SWFW semaphore through SW_FW_SYNC register for the specified
1683d8602bb9SJack F Vogel  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
1684d8602bb9SJack F Vogel  **/
1685758cc3dcSJack F Vogel void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u32 mask)
1686d8602bb9SJack F Vogel {
1687d8602bb9SJack F Vogel 	if (hw->mac.ops.release_swfw_sync)
1688d8602bb9SJack F Vogel 		hw->mac.ops.release_swfw_sync(hw, mask);
1689d8602bb9SJack F Vogel }
1690d8602bb9SJack F Vogel 
16918eb6488eSEric Joyner /**
16928eb6488eSEric Joyner  *  ixgbe_init_swfw_semaphore - Clean up SWFW semaphore
16938eb6488eSEric Joyner  *  @hw: pointer to hardware structure
16948eb6488eSEric Joyner  *
16958eb6488eSEric Joyner  *  Attempts to acquire the SWFW semaphore through SW_FW_SYNC register.
16968eb6488eSEric Joyner  *  Regardless of whether is succeeds or not it then release the semaphore.
16978eb6488eSEric Joyner  *  This is function is called to recover from catastrophic failures that
16988eb6488eSEric Joyner  *  may have left the semaphore locked.
16998eb6488eSEric Joyner  **/
17008eb6488eSEric Joyner void ixgbe_init_swfw_semaphore(struct ixgbe_hw *hw)
17018eb6488eSEric Joyner {
17028eb6488eSEric Joyner 	if (hw->mac.ops.init_swfw_sync)
17038eb6488eSEric Joyner 		hw->mac.ops.init_swfw_sync(hw);
17048eb6488eSEric Joyner }
17058eb6488eSEric Joyner 
1706758cc3dcSJack F Vogel 
1707758cc3dcSJack F Vogel void ixgbe_disable_rx(struct ixgbe_hw *hw)
1708758cc3dcSJack F Vogel {
1709758cc3dcSJack F Vogel 	if (hw->mac.ops.disable_rx)
1710758cc3dcSJack F Vogel 		hw->mac.ops.disable_rx(hw);
1711758cc3dcSJack F Vogel }
1712758cc3dcSJack F Vogel 
1713758cc3dcSJack F Vogel void ixgbe_enable_rx(struct ixgbe_hw *hw)
1714758cc3dcSJack F Vogel {
1715758cc3dcSJack F Vogel 	if (hw->mac.ops.enable_rx)
1716758cc3dcSJack F Vogel 		hw->mac.ops.enable_rx(hw);
1717758cc3dcSJack F Vogel }
1718758cc3dcSJack F Vogel 
1719758cc3dcSJack F Vogel /**
1720758cc3dcSJack F Vogel  *  ixgbe_set_rate_select_speed - Set module link speed
1721758cc3dcSJack F Vogel  *  @hw: pointer to hardware structure
1722758cc3dcSJack F Vogel  *  @speed: link speed to set
1723758cc3dcSJack F Vogel  *
1724758cc3dcSJack F Vogel  *  Set module link speed via the rate select.
1725758cc3dcSJack F Vogel  */
1726758cc3dcSJack F Vogel void ixgbe_set_rate_select_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed)
1727758cc3dcSJack F Vogel {
1728758cc3dcSJack F Vogel 	if (hw->mac.ops.set_rate_select_speed)
1729758cc3dcSJack F Vogel 		hw->mac.ops.set_rate_select_speed(hw, speed);
1730758cc3dcSJack F Vogel }
1731