xref: /dflybsd-src/sys/dev/netif/ix/ixgbe_api.c (revision ea7edc3e47075908fbc209e54c638b773f7dc404)
179251f5eSSepherosa Ziehau /******************************************************************************
279251f5eSSepherosa Ziehau 
36150453fSSepherosa Ziehau   Copyright (c) 2001-2017, Intel Corporation
479251f5eSSepherosa Ziehau   All rights reserved.
579251f5eSSepherosa Ziehau 
679251f5eSSepherosa Ziehau   Redistribution and use in source and binary forms, with or without
779251f5eSSepherosa Ziehau   modification, are permitted provided that the following conditions are met:
879251f5eSSepherosa Ziehau 
979251f5eSSepherosa Ziehau    1. Redistributions of source code must retain the above copyright notice,
1079251f5eSSepherosa Ziehau       this list of conditions and the following disclaimer.
1179251f5eSSepherosa Ziehau 
1279251f5eSSepherosa Ziehau    2. Redistributions in binary form must reproduce the above copyright
1379251f5eSSepherosa Ziehau       notice, this list of conditions and the following disclaimer in the
1479251f5eSSepherosa Ziehau       documentation and/or other materials provided with the distribution.
1579251f5eSSepherosa Ziehau 
1679251f5eSSepherosa Ziehau    3. Neither the name of the Intel Corporation nor the names of its
1779251f5eSSepherosa Ziehau       contributors may be used to endorse or promote products derived from
1879251f5eSSepherosa Ziehau       this software without specific prior written permission.
1979251f5eSSepherosa Ziehau 
2079251f5eSSepherosa Ziehau   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2179251f5eSSepherosa Ziehau   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2279251f5eSSepherosa Ziehau   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2379251f5eSSepherosa Ziehau   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
2479251f5eSSepherosa Ziehau   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2579251f5eSSepherosa Ziehau   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2679251f5eSSepherosa Ziehau   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2779251f5eSSepherosa Ziehau   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2879251f5eSSepherosa Ziehau   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2979251f5eSSepherosa Ziehau   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3079251f5eSSepherosa Ziehau   POSSIBILITY OF SUCH DAMAGE.
3179251f5eSSepherosa Ziehau 
3279251f5eSSepherosa Ziehau ******************************************************************************/
3379251f5eSSepherosa Ziehau /*$FreeBSD$*/
3479251f5eSSepherosa Ziehau 
3579251f5eSSepherosa Ziehau #include "ixgbe_api.h"
3679251f5eSSepherosa Ziehau #include "ixgbe_common.h"
3779251f5eSSepherosa Ziehau 
386150453fSSepherosa Ziehau #define IXGBE_EMPTY_PARAM
396150453fSSepherosa Ziehau 
406150453fSSepherosa Ziehau static const u32 ixgbe_mvals_base[IXGBE_MVALS_IDX_LIMIT] = {
416150453fSSepherosa Ziehau 	IXGBE_MVALS_INIT(IXGBE_EMPTY_PARAM)
426150453fSSepherosa Ziehau };
436150453fSSepherosa Ziehau 
446150453fSSepherosa Ziehau static const u32 ixgbe_mvals_X540[IXGBE_MVALS_IDX_LIMIT] = {
456150453fSSepherosa Ziehau 	IXGBE_MVALS_INIT(_X540)
466150453fSSepherosa Ziehau };
476150453fSSepherosa Ziehau 
486150453fSSepherosa Ziehau static const u32 ixgbe_mvals_X550[IXGBE_MVALS_IDX_LIMIT] = {
496150453fSSepherosa Ziehau 	IXGBE_MVALS_INIT(_X550)
506150453fSSepherosa Ziehau };
516150453fSSepherosa Ziehau 
526150453fSSepherosa Ziehau static const u32 ixgbe_mvals_X550EM_x[IXGBE_MVALS_IDX_LIMIT] = {
536150453fSSepherosa Ziehau 	IXGBE_MVALS_INIT(_X550EM_x)
546150453fSSepherosa Ziehau };
556150453fSSepherosa Ziehau 
566150453fSSepherosa Ziehau static const u32 ixgbe_mvals_X550EM_a[IXGBE_MVALS_IDX_LIMIT] = {
576150453fSSepherosa Ziehau 	IXGBE_MVALS_INIT(_X550EM_a)
586150453fSSepherosa Ziehau };
596150453fSSepherosa Ziehau 
6079251f5eSSepherosa Ziehau /**
6179251f5eSSepherosa Ziehau  * ixgbe_dcb_get_rtrup2tc - read rtrup2tc reg
6279251f5eSSepherosa Ziehau  * @hw: pointer to hardware structure
6379251f5eSSepherosa Ziehau  * @map: pointer to u8 arr for returning map
6479251f5eSSepherosa Ziehau  *
6579251f5eSSepherosa Ziehau  * Read the rtrup2tc HW register and resolve its content into map
6679251f5eSSepherosa Ziehau  **/
ixgbe_dcb_get_rtrup2tc(struct ixgbe_hw * hw,u8 * map)6779251f5eSSepherosa Ziehau void ixgbe_dcb_get_rtrup2tc(struct ixgbe_hw *hw, u8 *map)
6879251f5eSSepherosa Ziehau {
6979251f5eSSepherosa Ziehau 	if (hw->mac.ops.get_rtrup2tc)
7079251f5eSSepherosa Ziehau 		hw->mac.ops.get_rtrup2tc(hw, map);
7179251f5eSSepherosa Ziehau }
7279251f5eSSepherosa Ziehau 
7379251f5eSSepherosa Ziehau /**
7479251f5eSSepherosa Ziehau  *  ixgbe_init_shared_code - Initialize the shared code
7579251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
7679251f5eSSepherosa Ziehau  *
7779251f5eSSepherosa Ziehau  *  This will assign function pointers and assign the MAC type and PHY code.
7879251f5eSSepherosa Ziehau  *  Does not touch the hardware. This function must be called prior to any
7979251f5eSSepherosa Ziehau  *  other function in the shared code. The ixgbe_hw structure should be
8079251f5eSSepherosa Ziehau  *  memset to 0 prior to calling this function.  The following fields in
8179251f5eSSepherosa Ziehau  *  hw structure should be filled in prior to calling this function:
8279251f5eSSepherosa Ziehau  *  hw_addr, back, device_id, vendor_id, subsystem_device_id,
8379251f5eSSepherosa Ziehau  *  subsystem_vendor_id, and revision_id
8479251f5eSSepherosa Ziehau  **/
ixgbe_init_shared_code(struct ixgbe_hw * hw)8579251f5eSSepherosa Ziehau s32 ixgbe_init_shared_code(struct ixgbe_hw *hw)
8679251f5eSSepherosa Ziehau {
8779251f5eSSepherosa Ziehau 	s32 status;
8879251f5eSSepherosa Ziehau 
8979251f5eSSepherosa Ziehau 	DEBUGFUNC("ixgbe_init_shared_code");
9079251f5eSSepherosa Ziehau 
9179251f5eSSepherosa Ziehau 	/*
9279251f5eSSepherosa Ziehau 	 * Set the mac type
9379251f5eSSepherosa Ziehau 	 */
9479251f5eSSepherosa Ziehau 	ixgbe_set_mac_type(hw);
9579251f5eSSepherosa Ziehau 
9679251f5eSSepherosa Ziehau 	switch (hw->mac.type) {
9779251f5eSSepherosa Ziehau 	case ixgbe_mac_82598EB:
9879251f5eSSepherosa Ziehau 		status = ixgbe_init_ops_82598(hw);
9979251f5eSSepherosa Ziehau 		break;
10079251f5eSSepherosa Ziehau 	case ixgbe_mac_82599EB:
10179251f5eSSepherosa Ziehau 		status = ixgbe_init_ops_82599(hw);
10279251f5eSSepherosa Ziehau 		break;
10379251f5eSSepherosa Ziehau 	case ixgbe_mac_X540:
10479251f5eSSepherosa Ziehau 		status = ixgbe_init_ops_X540(hw);
10579251f5eSSepherosa Ziehau 		break;
10663d483cdSSepherosa Ziehau 	case ixgbe_mac_X550:
10763d483cdSSepherosa Ziehau 		status = ixgbe_init_ops_X550(hw);
10863d483cdSSepherosa Ziehau 		break;
10963d483cdSSepherosa Ziehau 	case ixgbe_mac_X550EM_x:
1106150453fSSepherosa Ziehau 		status = ixgbe_init_ops_X550EM_x(hw);
11163d483cdSSepherosa Ziehau 		break;
1126150453fSSepherosa Ziehau 	case ixgbe_mac_X550EM_a:
1136150453fSSepherosa Ziehau 		status = ixgbe_init_ops_X550EM_a(hw);
11463d483cdSSepherosa Ziehau 		break;
11579251f5eSSepherosa Ziehau 	default:
11679251f5eSSepherosa Ziehau 		status = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
11779251f5eSSepherosa Ziehau 		break;
11879251f5eSSepherosa Ziehau 	}
1196150453fSSepherosa Ziehau 	hw->mac.max_link_up_time = IXGBE_LINK_UP_TIME;
12079251f5eSSepherosa Ziehau 
12179251f5eSSepherosa Ziehau 	return status;
12279251f5eSSepherosa Ziehau }
12379251f5eSSepherosa Ziehau 
12479251f5eSSepherosa Ziehau /**
12579251f5eSSepherosa Ziehau  *  ixgbe_set_mac_type - Sets MAC type
12679251f5eSSepherosa Ziehau  *  @hw: pointer to the HW structure
12779251f5eSSepherosa Ziehau  *
12879251f5eSSepherosa Ziehau  *  This function sets the mac type of the adapter based on the
12979251f5eSSepherosa Ziehau  *  vendor ID and device ID stored in the hw structure.
13079251f5eSSepherosa Ziehau  **/
ixgbe_set_mac_type(struct ixgbe_hw * hw)13179251f5eSSepherosa Ziehau s32 ixgbe_set_mac_type(struct ixgbe_hw *hw)
13279251f5eSSepherosa Ziehau {
13379251f5eSSepherosa Ziehau 	s32 ret_val = IXGBE_SUCCESS;
13479251f5eSSepherosa Ziehau 
13579251f5eSSepherosa Ziehau 	DEBUGFUNC("ixgbe_set_mac_type\n");
13679251f5eSSepherosa Ziehau 
13779251f5eSSepherosa Ziehau 	if (hw->vendor_id != IXGBE_INTEL_VENDOR_ID) {
13879251f5eSSepherosa Ziehau 		ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED,
13979251f5eSSepherosa Ziehau 			     "Unsupported vendor id: %x", hw->vendor_id);
14079251f5eSSepherosa Ziehau 		return IXGBE_ERR_DEVICE_NOT_SUPPORTED;
14179251f5eSSepherosa Ziehau 	}
14279251f5eSSepherosa Ziehau 
1436150453fSSepherosa Ziehau 	hw->mvals = ixgbe_mvals_base;
1446150453fSSepherosa Ziehau 
14579251f5eSSepherosa Ziehau 	switch (hw->device_id) {
14679251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82598:
14779251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82598_BX:
14879251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
14979251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82598AF_DUAL_PORT:
15079251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82598AT:
15179251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82598AT2:
15279251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82598EB_CX4:
15379251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
15479251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
15579251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
15679251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82598EB_XF_LR:
15779251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82598EB_SFP_LOM:
15879251f5eSSepherosa Ziehau 		hw->mac.type = ixgbe_mac_82598EB;
15979251f5eSSepherosa Ziehau 		break;
16079251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_KX4:
16179251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_KX4_MEZZ:
16279251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_XAUI_LOM:
16379251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:
16479251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_KR:
16579251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_SFP:
16679251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_BACKPLANE_FCOE:
16779251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_SFP_FCOE:
16879251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_SFP_EM:
16979251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_SFP_SF2:
17079251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_SFP_SF_QP:
17163d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_QSFP_SF_QP:
17279251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599EN_SFP:
17379251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_CX4:
17479251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_BYPASS:
17579251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_82599_T3_LOM:
17679251f5eSSepherosa Ziehau 		hw->mac.type = ixgbe_mac_82599EB;
17779251f5eSSepherosa Ziehau 		break;
17879251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_X540T:
17963d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X540T1:
18079251f5eSSepherosa Ziehau 	case IXGBE_DEV_ID_X540_BYPASS:
18179251f5eSSepherosa Ziehau 		hw->mac.type = ixgbe_mac_X540;
1826150453fSSepherosa Ziehau 		hw->mvals = ixgbe_mvals_X540;
18379251f5eSSepherosa Ziehau 		break;
18463d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550T:
1856150453fSSepherosa Ziehau 	case IXGBE_DEV_ID_X550T1:
18663d483cdSSepherosa Ziehau 		hw->mac.type = ixgbe_mac_X550;
1876150453fSSepherosa Ziehau 		hw->mvals = ixgbe_mvals_X550;
18863d483cdSSepherosa Ziehau 		break;
18963d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_X_KX4:
19063d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_X_KR:
19163d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_X_10G_T:
19263d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_X_1G_T:
19363d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_X_SFP:
1946150453fSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_X_XFI:
19563d483cdSSepherosa Ziehau 		hw->mac.type = ixgbe_mac_X550EM_x;
1966150453fSSepherosa Ziehau 		hw->mvals = ixgbe_mvals_X550EM_x;
19763d483cdSSepherosa Ziehau 		break;
19863d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_A_KR:
19963d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_A_KR_L:
20063d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_A_SFP_N:
2016150453fSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_A_SGMII:
2026150453fSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_A_SGMII_L:
20363d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_A_1G_T:
20463d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_A_1G_T_L:
20563d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_A_10G_T:
20663d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_A_QSFP:
20763d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_A_QSFP_N:
20863d483cdSSepherosa Ziehau 	case IXGBE_DEV_ID_X550EM_A_SFP:
20963d483cdSSepherosa Ziehau 		hw->mac.type = ixgbe_mac_X550EM_a;
2106150453fSSepherosa Ziehau 		hw->mvals = ixgbe_mvals_X550EM_a;
21163d483cdSSepherosa Ziehau 		break;
21279251f5eSSepherosa Ziehau 	default:
21379251f5eSSepherosa Ziehau 		ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
21479251f5eSSepherosa Ziehau 		ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED,
21579251f5eSSepherosa Ziehau 			     "Unsupported device id: %x",
21679251f5eSSepherosa Ziehau 			     hw->device_id);
21779251f5eSSepherosa Ziehau 		break;
21879251f5eSSepherosa Ziehau 	}
21979251f5eSSepherosa Ziehau 
22079251f5eSSepherosa Ziehau 	DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n",
22179251f5eSSepherosa Ziehau 		  hw->mac.type, ret_val);
22279251f5eSSepherosa Ziehau 	return ret_val;
22379251f5eSSepherosa Ziehau }
22479251f5eSSepherosa Ziehau 
22579251f5eSSepherosa Ziehau /**
22679251f5eSSepherosa Ziehau  *  ixgbe_init_hw - Initialize the hardware
22779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
22879251f5eSSepherosa Ziehau  *
22979251f5eSSepherosa Ziehau  *  Initialize the hardware by resetting and then starting the hardware
23079251f5eSSepherosa Ziehau  **/
ixgbe_init_hw(struct ixgbe_hw * hw)23179251f5eSSepherosa Ziehau s32 ixgbe_init_hw(struct ixgbe_hw *hw)
23279251f5eSSepherosa Ziehau {
23379251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw),
23479251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
23579251f5eSSepherosa Ziehau }
23679251f5eSSepherosa Ziehau 
23779251f5eSSepherosa Ziehau /**
23879251f5eSSepherosa Ziehau  *  ixgbe_reset_hw - Performs a hardware reset
23979251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
24079251f5eSSepherosa Ziehau  *
24179251f5eSSepherosa Ziehau  *  Resets the hardware by resetting the transmit and receive units, masks and
24279251f5eSSepherosa Ziehau  *  clears all interrupts, performs a PHY reset, and performs a MAC reset
24379251f5eSSepherosa Ziehau  **/
ixgbe_reset_hw(struct ixgbe_hw * hw)24479251f5eSSepherosa Ziehau s32 ixgbe_reset_hw(struct ixgbe_hw *hw)
24579251f5eSSepherosa Ziehau {
24679251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw),
24779251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
24879251f5eSSepherosa Ziehau }
24979251f5eSSepherosa Ziehau 
25079251f5eSSepherosa Ziehau /**
25179251f5eSSepherosa Ziehau  *  ixgbe_start_hw - Prepares hardware for Rx/Tx
25279251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
25379251f5eSSepherosa Ziehau  *
25479251f5eSSepherosa Ziehau  *  Starts the hardware by filling the bus info structure and media type,
25579251f5eSSepherosa Ziehau  *  clears all on chip counters, initializes receive address registers,
25679251f5eSSepherosa Ziehau  *  multicast table, VLAN filter table, calls routine to setup link and
25779251f5eSSepherosa Ziehau  *  flow control settings, and leaves transmit and receive units disabled
25879251f5eSSepherosa Ziehau  *  and uninitialized.
25979251f5eSSepherosa Ziehau  **/
ixgbe_start_hw(struct ixgbe_hw * hw)26079251f5eSSepherosa Ziehau s32 ixgbe_start_hw(struct ixgbe_hw *hw)
26179251f5eSSepherosa Ziehau {
26279251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw),
26379251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
26479251f5eSSepherosa Ziehau }
26579251f5eSSepherosa Ziehau 
26679251f5eSSepherosa Ziehau /**
26779251f5eSSepherosa Ziehau  *  ixgbe_enable_relaxed_ordering - Enables tx relaxed ordering,
26879251f5eSSepherosa Ziehau  *  which is disabled by default in ixgbe_start_hw();
26979251f5eSSepherosa Ziehau  *
27079251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
27179251f5eSSepherosa Ziehau  *
27279251f5eSSepherosa Ziehau  *   Enable relaxed ordering;
27379251f5eSSepherosa Ziehau  **/
ixgbe_enable_relaxed_ordering(struct ixgbe_hw * hw)27479251f5eSSepherosa Ziehau void ixgbe_enable_relaxed_ordering(struct ixgbe_hw *hw)
27579251f5eSSepherosa Ziehau {
27679251f5eSSepherosa Ziehau 	if (hw->mac.ops.enable_relaxed_ordering)
27779251f5eSSepherosa Ziehau 		hw->mac.ops.enable_relaxed_ordering(hw);
27879251f5eSSepherosa Ziehau }
27979251f5eSSepherosa Ziehau 
28079251f5eSSepherosa Ziehau /**
28179251f5eSSepherosa Ziehau  *  ixgbe_clear_hw_cntrs - Clear hardware counters
28279251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
28379251f5eSSepherosa Ziehau  *
28479251f5eSSepherosa Ziehau  *  Clears all hardware statistics counters by reading them from the hardware
28579251f5eSSepherosa Ziehau  *  Statistics counters are clear on read.
28679251f5eSSepherosa Ziehau  **/
ixgbe_clear_hw_cntrs(struct ixgbe_hw * hw)28779251f5eSSepherosa Ziehau s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw)
28879251f5eSSepherosa Ziehau {
28979251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw),
29079251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
29179251f5eSSepherosa Ziehau }
29279251f5eSSepherosa Ziehau 
29379251f5eSSepherosa Ziehau /**
29479251f5eSSepherosa Ziehau  *  ixgbe_get_media_type - Get media type
29579251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
29679251f5eSSepherosa Ziehau  *
29779251f5eSSepherosa Ziehau  *  Returns the media type (fiber, copper, backplane)
29879251f5eSSepherosa Ziehau  **/
ixgbe_get_media_type(struct ixgbe_hw * hw)29979251f5eSSepherosa Ziehau enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw)
30079251f5eSSepherosa Ziehau {
30179251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw),
30279251f5eSSepherosa Ziehau 			       ixgbe_media_type_unknown);
30379251f5eSSepherosa Ziehau }
30479251f5eSSepherosa Ziehau 
30579251f5eSSepherosa Ziehau /**
30679251f5eSSepherosa Ziehau  *  ixgbe_get_mac_addr - Get MAC address
30779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
30879251f5eSSepherosa Ziehau  *  @mac_addr: Adapter MAC address
30979251f5eSSepherosa Ziehau  *
31079251f5eSSepherosa Ziehau  *  Reads the adapter's MAC address from the first Receive Address Register
31179251f5eSSepherosa Ziehau  *  (RAR0) A reset of the adapter must have been performed prior to calling
31279251f5eSSepherosa Ziehau  *  this function in order for the MAC address to have been loaded from the
31379251f5eSSepherosa Ziehau  *  EEPROM into RAR0
31479251f5eSSepherosa Ziehau  **/
ixgbe_get_mac_addr(struct ixgbe_hw * hw,u8 * mac_addr)31579251f5eSSepherosa Ziehau s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr)
31679251f5eSSepherosa Ziehau {
31779251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr,
31879251f5eSSepherosa Ziehau 			       (hw, mac_addr), IXGBE_NOT_IMPLEMENTED);
31979251f5eSSepherosa Ziehau }
32079251f5eSSepherosa Ziehau 
32179251f5eSSepherosa Ziehau /**
32279251f5eSSepherosa Ziehau  *  ixgbe_get_san_mac_addr - Get SAN MAC address
32379251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
32479251f5eSSepherosa Ziehau  *  @san_mac_addr: SAN MAC address
32579251f5eSSepherosa Ziehau  *
32679251f5eSSepherosa Ziehau  *  Reads the SAN MAC address from the EEPROM, if it's available.  This is
32779251f5eSSepherosa Ziehau  *  per-port, so set_lan_id() must be called before reading the addresses.
32879251f5eSSepherosa Ziehau  **/
ixgbe_get_san_mac_addr(struct ixgbe_hw * hw,u8 * san_mac_addr)32979251f5eSSepherosa Ziehau s32 ixgbe_get_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr)
33079251f5eSSepherosa Ziehau {
33179251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.get_san_mac_addr,
33279251f5eSSepherosa Ziehau 			       (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED);
33379251f5eSSepherosa Ziehau }
33479251f5eSSepherosa Ziehau 
33579251f5eSSepherosa Ziehau /**
33679251f5eSSepherosa Ziehau  *  ixgbe_set_san_mac_addr - Write a SAN MAC address
33779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
33879251f5eSSepherosa Ziehau  *  @san_mac_addr: SAN MAC address
33979251f5eSSepherosa Ziehau  *
34079251f5eSSepherosa Ziehau  *  Writes A SAN MAC address to the EEPROM.
34179251f5eSSepherosa Ziehau  **/
ixgbe_set_san_mac_addr(struct ixgbe_hw * hw,u8 * san_mac_addr)34279251f5eSSepherosa Ziehau s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr)
34379251f5eSSepherosa Ziehau {
34479251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.set_san_mac_addr,
34579251f5eSSepherosa Ziehau 			       (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED);
34679251f5eSSepherosa Ziehau }
34779251f5eSSepherosa Ziehau 
34879251f5eSSepherosa Ziehau /**
34979251f5eSSepherosa Ziehau  *  ixgbe_get_device_caps - Get additional device capabilities
35079251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
35179251f5eSSepherosa Ziehau  *  @device_caps: the EEPROM word for device capabilities
35279251f5eSSepherosa Ziehau  *
35379251f5eSSepherosa Ziehau  *  Reads the extra device capabilities from the EEPROM
35479251f5eSSepherosa Ziehau  **/
ixgbe_get_device_caps(struct ixgbe_hw * hw,u16 * device_caps)35579251f5eSSepherosa Ziehau s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps)
35679251f5eSSepherosa Ziehau {
35779251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.get_device_caps,
35879251f5eSSepherosa Ziehau 			       (hw, device_caps), IXGBE_NOT_IMPLEMENTED);
35979251f5eSSepherosa Ziehau }
36079251f5eSSepherosa Ziehau 
36179251f5eSSepherosa Ziehau /**
36279251f5eSSepherosa Ziehau  *  ixgbe_get_wwn_prefix - Get alternative WWNN/WWPN prefix from the EEPROM
36379251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
36479251f5eSSepherosa Ziehau  *  @wwnn_prefix: the alternative WWNN prefix
36579251f5eSSepherosa Ziehau  *  @wwpn_prefix: the alternative WWPN prefix
36679251f5eSSepherosa Ziehau  *
36779251f5eSSepherosa Ziehau  *  This function will read the EEPROM from the alternative SAN MAC address
36879251f5eSSepherosa Ziehau  *  block to check the support for the alternative WWNN/WWPN prefix support.
36979251f5eSSepherosa Ziehau  **/
ixgbe_get_wwn_prefix(struct ixgbe_hw * hw,u16 * wwnn_prefix,u16 * wwpn_prefix)37079251f5eSSepherosa Ziehau s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix,
37179251f5eSSepherosa Ziehau 			 u16 *wwpn_prefix)
37279251f5eSSepherosa Ziehau {
37379251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.get_wwn_prefix,
37479251f5eSSepherosa Ziehau 			       (hw, wwnn_prefix, wwpn_prefix),
37579251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
37679251f5eSSepherosa Ziehau }
37779251f5eSSepherosa Ziehau 
37879251f5eSSepherosa Ziehau /**
37979251f5eSSepherosa Ziehau  *  ixgbe_get_fcoe_boot_status -  Get FCOE boot status from EEPROM
38079251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
38179251f5eSSepherosa Ziehau  *  @bs: the fcoe boot status
38279251f5eSSepherosa Ziehau  *
38379251f5eSSepherosa Ziehau  *  This function will read the FCOE boot status from the iSCSI FCOE block
38479251f5eSSepherosa Ziehau  **/
ixgbe_get_fcoe_boot_status(struct ixgbe_hw * hw,u16 * bs)38579251f5eSSepherosa Ziehau s32 ixgbe_get_fcoe_boot_status(struct ixgbe_hw *hw, u16 *bs)
38679251f5eSSepherosa Ziehau {
38779251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.get_fcoe_boot_status,
38879251f5eSSepherosa Ziehau 			       (hw, bs),
38979251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
39079251f5eSSepherosa Ziehau }
39179251f5eSSepherosa Ziehau 
39279251f5eSSepherosa Ziehau /**
39379251f5eSSepherosa Ziehau  *  ixgbe_get_bus_info - Set PCI bus info
39479251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
39579251f5eSSepherosa Ziehau  *
39679251f5eSSepherosa Ziehau  *  Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure
39779251f5eSSepherosa Ziehau  **/
ixgbe_get_bus_info(struct ixgbe_hw * hw)39879251f5eSSepherosa Ziehau s32 ixgbe_get_bus_info(struct ixgbe_hw *hw)
39979251f5eSSepherosa Ziehau {
40079251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw),
40179251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
40279251f5eSSepherosa Ziehau }
40379251f5eSSepherosa Ziehau 
40479251f5eSSepherosa Ziehau /**
40579251f5eSSepherosa Ziehau  *  ixgbe_get_num_of_tx_queues - Get Tx queues
40679251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
40779251f5eSSepherosa Ziehau  *
40879251f5eSSepherosa Ziehau  *  Returns the number of transmit queues for the given adapter.
40979251f5eSSepherosa Ziehau  **/
ixgbe_get_num_of_tx_queues(struct ixgbe_hw * hw)41079251f5eSSepherosa Ziehau u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw)
41179251f5eSSepherosa Ziehau {
41279251f5eSSepherosa Ziehau 	return hw->mac.max_tx_queues;
41379251f5eSSepherosa Ziehau }
41479251f5eSSepherosa Ziehau 
41579251f5eSSepherosa Ziehau /**
41679251f5eSSepherosa Ziehau  *  ixgbe_get_num_of_rx_queues - Get Rx queues
41779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
41879251f5eSSepherosa Ziehau  *
41979251f5eSSepherosa Ziehau  *  Returns the number of receive queues for the given adapter.
42079251f5eSSepherosa Ziehau  **/
ixgbe_get_num_of_rx_queues(struct ixgbe_hw * hw)42179251f5eSSepherosa Ziehau u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw)
42279251f5eSSepherosa Ziehau {
42379251f5eSSepherosa Ziehau 	return hw->mac.max_rx_queues;
42479251f5eSSepherosa Ziehau }
42579251f5eSSepherosa Ziehau 
42679251f5eSSepherosa Ziehau /**
42779251f5eSSepherosa Ziehau  *  ixgbe_stop_adapter - Disable Rx/Tx units
42879251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
42979251f5eSSepherosa Ziehau  *
43079251f5eSSepherosa Ziehau  *  Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts,
43179251f5eSSepherosa Ziehau  *  disables transmit and receive units. The adapter_stopped flag is used by
43279251f5eSSepherosa Ziehau  *  the shared code and drivers to determine if the adapter is in a stopped
43379251f5eSSepherosa Ziehau  *  state and should not touch the hardware.
43479251f5eSSepherosa Ziehau  **/
ixgbe_stop_adapter(struct ixgbe_hw * hw)43579251f5eSSepherosa Ziehau s32 ixgbe_stop_adapter(struct ixgbe_hw *hw)
43679251f5eSSepherosa Ziehau {
43779251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw),
43879251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
43979251f5eSSepherosa Ziehau }
44079251f5eSSepherosa Ziehau 
44179251f5eSSepherosa Ziehau /**
44279251f5eSSepherosa Ziehau  *  ixgbe_read_pba_string - Reads part number string from EEPROM
44379251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
44479251f5eSSepherosa Ziehau  *  @pba_num: stores the part number string from the EEPROM
44579251f5eSSepherosa Ziehau  *  @pba_num_size: part number string buffer length
44679251f5eSSepherosa Ziehau  *
44779251f5eSSepherosa Ziehau  *  Reads the part number string from the EEPROM.
44879251f5eSSepherosa Ziehau  **/
ixgbe_read_pba_string(struct ixgbe_hw * hw,u8 * pba_num,u32 pba_num_size)44979251f5eSSepherosa Ziehau s32 ixgbe_read_pba_string(struct ixgbe_hw *hw, u8 *pba_num, u32 pba_num_size)
45079251f5eSSepherosa Ziehau {
45179251f5eSSepherosa Ziehau 	return ixgbe_read_pba_string_generic(hw, pba_num, pba_num_size);
45279251f5eSSepherosa Ziehau }
45379251f5eSSepherosa Ziehau 
45479251f5eSSepherosa Ziehau /**
45579251f5eSSepherosa Ziehau  *  ixgbe_read_pba_num - Reads part number from EEPROM
45679251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
45779251f5eSSepherosa Ziehau  *  @pba_num: stores the part number from the EEPROM
45879251f5eSSepherosa Ziehau  *
45979251f5eSSepherosa Ziehau  *  Reads the part number from the EEPROM.
46079251f5eSSepherosa Ziehau  **/
ixgbe_read_pba_num(struct ixgbe_hw * hw,u32 * pba_num)46179251f5eSSepherosa Ziehau s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num)
46279251f5eSSepherosa Ziehau {
46379251f5eSSepherosa Ziehau 	return ixgbe_read_pba_num_generic(hw, pba_num);
46479251f5eSSepherosa Ziehau }
46579251f5eSSepherosa Ziehau 
46679251f5eSSepherosa Ziehau /**
46779251f5eSSepherosa Ziehau  *  ixgbe_identify_phy - Get PHY type
46879251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
46979251f5eSSepherosa Ziehau  *
47079251f5eSSepherosa Ziehau  *  Determines the physical layer module found on the current adapter.
47179251f5eSSepherosa Ziehau  **/
ixgbe_identify_phy(struct ixgbe_hw * hw)47279251f5eSSepherosa Ziehau s32 ixgbe_identify_phy(struct ixgbe_hw *hw)
47379251f5eSSepherosa Ziehau {
47479251f5eSSepherosa Ziehau 	s32 status = IXGBE_SUCCESS;
47579251f5eSSepherosa Ziehau 
47679251f5eSSepherosa Ziehau 	if (hw->phy.type == ixgbe_phy_unknown) {
47779251f5eSSepherosa Ziehau 		status = ixgbe_call_func(hw, hw->phy.ops.identify, (hw),
47879251f5eSSepherosa Ziehau 					 IXGBE_NOT_IMPLEMENTED);
47979251f5eSSepherosa Ziehau 	}
48079251f5eSSepherosa Ziehau 
48179251f5eSSepherosa Ziehau 	return status;
48279251f5eSSepherosa Ziehau }
48379251f5eSSepherosa Ziehau 
48479251f5eSSepherosa Ziehau /**
48579251f5eSSepherosa Ziehau  *  ixgbe_reset_phy - Perform a PHY reset
48679251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
48779251f5eSSepherosa Ziehau  **/
ixgbe_reset_phy(struct ixgbe_hw * hw)48879251f5eSSepherosa Ziehau s32 ixgbe_reset_phy(struct ixgbe_hw *hw)
48979251f5eSSepherosa Ziehau {
49079251f5eSSepherosa Ziehau 	s32 status = IXGBE_SUCCESS;
49179251f5eSSepherosa Ziehau 
49279251f5eSSepherosa Ziehau 	if (hw->phy.type == ixgbe_phy_unknown) {
49379251f5eSSepherosa Ziehau 		if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS)
49479251f5eSSepherosa Ziehau 			status = IXGBE_ERR_PHY;
49579251f5eSSepherosa Ziehau 	}
49679251f5eSSepherosa Ziehau 
49779251f5eSSepherosa Ziehau 	if (status == IXGBE_SUCCESS) {
49879251f5eSSepherosa Ziehau 		status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw),
49979251f5eSSepherosa Ziehau 					 IXGBE_NOT_IMPLEMENTED);
50079251f5eSSepherosa Ziehau 	}
50179251f5eSSepherosa Ziehau 	return status;
50279251f5eSSepherosa Ziehau }
50379251f5eSSepherosa Ziehau 
50479251f5eSSepherosa Ziehau /**
50579251f5eSSepherosa Ziehau  *  ixgbe_get_phy_firmware_version -
50679251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
50779251f5eSSepherosa Ziehau  *  @firmware_version: pointer to firmware version
50879251f5eSSepherosa Ziehau  **/
ixgbe_get_phy_firmware_version(struct ixgbe_hw * hw,u16 * firmware_version)50979251f5eSSepherosa Ziehau s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version)
51079251f5eSSepherosa Ziehau {
51179251f5eSSepherosa Ziehau 	s32 status = IXGBE_SUCCESS;
51279251f5eSSepherosa Ziehau 
51379251f5eSSepherosa Ziehau 	status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version,
51479251f5eSSepherosa Ziehau 				 (hw, firmware_version),
51579251f5eSSepherosa Ziehau 				 IXGBE_NOT_IMPLEMENTED);
51679251f5eSSepherosa Ziehau 	return status;
51779251f5eSSepherosa Ziehau }
51879251f5eSSepherosa Ziehau 
51979251f5eSSepherosa Ziehau /**
52079251f5eSSepherosa Ziehau  *  ixgbe_read_phy_reg - Read PHY register
52179251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
52279251f5eSSepherosa Ziehau  *  @reg_addr: 32 bit address of PHY register to read
523dd5ce676SSepherosa Ziehau  *  @device_type: type of device you want to communicate with
52479251f5eSSepherosa Ziehau  *  @phy_data: Pointer to read data from PHY register
52579251f5eSSepherosa Ziehau  *
52679251f5eSSepherosa Ziehau  *  Reads a value from a specified PHY register
52779251f5eSSepherosa Ziehau  **/
ixgbe_read_phy_reg(struct ixgbe_hw * hw,u32 reg_addr,u32 device_type,u16 * phy_data)52879251f5eSSepherosa Ziehau s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
52979251f5eSSepherosa Ziehau 		       u16 *phy_data)
53079251f5eSSepherosa Ziehau {
53179251f5eSSepherosa Ziehau 	if (hw->phy.id == 0)
53279251f5eSSepherosa Ziehau 		ixgbe_identify_phy(hw);
53379251f5eSSepherosa Ziehau 
53479251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr,
53579251f5eSSepherosa Ziehau 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
53679251f5eSSepherosa Ziehau }
53779251f5eSSepherosa Ziehau 
53879251f5eSSepherosa Ziehau /**
53979251f5eSSepherosa Ziehau  *  ixgbe_write_phy_reg - Write PHY register
54079251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
54179251f5eSSepherosa Ziehau  *  @reg_addr: 32 bit PHY register to write
542dd5ce676SSepherosa Ziehau  *  @device_type: type of device you want to communicate with
54379251f5eSSepherosa Ziehau  *  @phy_data: Data to write to the PHY register
54479251f5eSSepherosa Ziehau  *
54579251f5eSSepherosa Ziehau  *  Writes a value to specified PHY register
54679251f5eSSepherosa Ziehau  **/
ixgbe_write_phy_reg(struct ixgbe_hw * hw,u32 reg_addr,u32 device_type,u16 phy_data)54779251f5eSSepherosa Ziehau s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
54879251f5eSSepherosa Ziehau 			u16 phy_data)
54979251f5eSSepherosa Ziehau {
55079251f5eSSepherosa Ziehau 	if (hw->phy.id == 0)
55179251f5eSSepherosa Ziehau 		ixgbe_identify_phy(hw);
55279251f5eSSepherosa Ziehau 
55379251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr,
55479251f5eSSepherosa Ziehau 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
55579251f5eSSepherosa Ziehau }
55679251f5eSSepherosa Ziehau 
55779251f5eSSepherosa Ziehau /**
55879251f5eSSepherosa Ziehau  *  ixgbe_setup_phy_link - Restart PHY autoneg
55979251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
56079251f5eSSepherosa Ziehau  *
56179251f5eSSepherosa Ziehau  *  Restart autonegotiation and PHY and waits for completion.
56279251f5eSSepherosa Ziehau  **/
ixgbe_setup_phy_link(struct ixgbe_hw * hw)56379251f5eSSepherosa Ziehau s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw)
56479251f5eSSepherosa Ziehau {
56579251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw),
56679251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
56779251f5eSSepherosa Ziehau }
56879251f5eSSepherosa Ziehau 
56979251f5eSSepherosa Ziehau /**
57063d483cdSSepherosa Ziehau  * ixgbe_setup_internal_phy - Configure integrated PHY
57163d483cdSSepherosa Ziehau  * @hw: pointer to hardware structure
57263d483cdSSepherosa Ziehau  *
57363d483cdSSepherosa Ziehau  * Reconfigure the integrated PHY in order to enable talk to the external PHY.
57463d483cdSSepherosa Ziehau  * Returns success if not implemented, since nothing needs to be done in this
57563d483cdSSepherosa Ziehau  * case.
57663d483cdSSepherosa Ziehau  */
ixgbe_setup_internal_phy(struct ixgbe_hw * hw)57763d483cdSSepherosa Ziehau s32 ixgbe_setup_internal_phy(struct ixgbe_hw *hw)
57863d483cdSSepherosa Ziehau {
57963d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.setup_internal_link, (hw),
58063d483cdSSepherosa Ziehau 			       IXGBE_SUCCESS);
58163d483cdSSepherosa Ziehau }
58263d483cdSSepherosa Ziehau 
58363d483cdSSepherosa Ziehau /**
58479251f5eSSepherosa Ziehau  *  ixgbe_check_phy_link - Determine link and speed status
58579251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
586dd5ce676SSepherosa Ziehau  *  @speed: link speed
587dd5ce676SSepherosa Ziehau  *  @link_up: TRUE when link is up
58879251f5eSSepherosa Ziehau  *
58979251f5eSSepherosa Ziehau  *  Reads a PHY register to determine if link is up and the current speed for
59079251f5eSSepherosa Ziehau  *  the PHY.
59179251f5eSSepherosa Ziehau  **/
ixgbe_check_phy_link(struct ixgbe_hw * hw,ixgbe_link_speed * speed,bool * link_up)59279251f5eSSepherosa Ziehau s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
59379251f5eSSepherosa Ziehau 			 bool *link_up)
59479251f5eSSepherosa Ziehau {
59579251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed,
59679251f5eSSepherosa Ziehau 			       link_up), IXGBE_NOT_IMPLEMENTED);
59779251f5eSSepherosa Ziehau }
59879251f5eSSepherosa Ziehau 
59979251f5eSSepherosa Ziehau /**
60079251f5eSSepherosa Ziehau  *  ixgbe_setup_phy_link_speed - Set auto advertise
60179251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
60279251f5eSSepherosa Ziehau  *  @speed: new link speed
603dd5ce676SSepherosa Ziehau  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
60479251f5eSSepherosa Ziehau  *
60579251f5eSSepherosa Ziehau  *  Sets the auto advertised capabilities
60679251f5eSSepherosa Ziehau  **/
ixgbe_setup_phy_link_speed(struct ixgbe_hw * hw,ixgbe_link_speed speed,bool autoneg_wait_to_complete)60779251f5eSSepherosa Ziehau s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
60879251f5eSSepherosa Ziehau 			       bool autoneg_wait_to_complete)
60979251f5eSSepherosa Ziehau {
61079251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.setup_link_speed, (hw, speed,
61179251f5eSSepherosa Ziehau 			       autoneg_wait_to_complete),
61279251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
61379251f5eSSepherosa Ziehau }
61479251f5eSSepherosa Ziehau 
61579251f5eSSepherosa Ziehau /**
61663d483cdSSepherosa Ziehau  * ixgbe_set_phy_power - Control the phy power state
61763d483cdSSepherosa Ziehau  * @hw: pointer to hardware structure
61863d483cdSSepherosa Ziehau  * @on: TRUE for on, FALSE for off
61963d483cdSSepherosa Ziehau  */
ixgbe_set_phy_power(struct ixgbe_hw * hw,bool on)62063d483cdSSepherosa Ziehau s32 ixgbe_set_phy_power(struct ixgbe_hw *hw, bool on)
62163d483cdSSepherosa Ziehau {
62263d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.set_phy_power, (hw, on),
62363d483cdSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
62463d483cdSSepherosa Ziehau }
62563d483cdSSepherosa Ziehau 
62663d483cdSSepherosa Ziehau /**
62779251f5eSSepherosa Ziehau  *  ixgbe_check_link - Get link and speed status
62879251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
629dd5ce676SSepherosa Ziehau  *  @speed: pointer to link speed
630dd5ce676SSepherosa Ziehau  *  @link_up: TRUE when link is up
631dd5ce676SSepherosa Ziehau  *  @link_up_wait_to_complete: bool used to wait for link up or not
63279251f5eSSepherosa Ziehau  *
63379251f5eSSepherosa Ziehau  *  Reads the links register to determine if link is up and the current speed
63479251f5eSSepherosa Ziehau  **/
ixgbe_check_link(struct ixgbe_hw * hw,ixgbe_link_speed * speed,bool * link_up,bool link_up_wait_to_complete)63579251f5eSSepherosa Ziehau s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
63679251f5eSSepherosa Ziehau 		     bool *link_up, bool link_up_wait_to_complete)
63779251f5eSSepherosa Ziehau {
63879251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.check_link, (hw, speed,
63979251f5eSSepherosa Ziehau 			       link_up, link_up_wait_to_complete),
64079251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
64179251f5eSSepherosa Ziehau }
64279251f5eSSepherosa Ziehau 
64379251f5eSSepherosa Ziehau /**
64479251f5eSSepherosa Ziehau  *  ixgbe_disable_tx_laser - Disable Tx laser
64579251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
64679251f5eSSepherosa Ziehau  *
64779251f5eSSepherosa Ziehau  *  If the driver needs to disable the laser on SFI optics.
64879251f5eSSepherosa Ziehau  **/
ixgbe_disable_tx_laser(struct ixgbe_hw * hw)64979251f5eSSepherosa Ziehau void ixgbe_disable_tx_laser(struct ixgbe_hw *hw)
65079251f5eSSepherosa Ziehau {
65179251f5eSSepherosa Ziehau 	if (hw->mac.ops.disable_tx_laser)
65279251f5eSSepherosa Ziehau 		hw->mac.ops.disable_tx_laser(hw);
65379251f5eSSepherosa Ziehau }
65479251f5eSSepherosa Ziehau 
65579251f5eSSepherosa Ziehau /**
65679251f5eSSepherosa Ziehau  *  ixgbe_enable_tx_laser - Enable Tx laser
65779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
65879251f5eSSepherosa Ziehau  *
65979251f5eSSepherosa Ziehau  *  If the driver needs to enable the laser on SFI optics.
66079251f5eSSepherosa Ziehau  **/
ixgbe_enable_tx_laser(struct ixgbe_hw * hw)66179251f5eSSepherosa Ziehau void ixgbe_enable_tx_laser(struct ixgbe_hw *hw)
66279251f5eSSepherosa Ziehau {
66379251f5eSSepherosa Ziehau 	if (hw->mac.ops.enable_tx_laser)
66479251f5eSSepherosa Ziehau 		hw->mac.ops.enable_tx_laser(hw);
66579251f5eSSepherosa Ziehau }
66679251f5eSSepherosa Ziehau 
66779251f5eSSepherosa Ziehau /**
66879251f5eSSepherosa Ziehau  *  ixgbe_flap_tx_laser - flap Tx laser to start autotry process
66979251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
67079251f5eSSepherosa Ziehau  *
67179251f5eSSepherosa Ziehau  *  When the driver changes the link speeds that it can support then
67279251f5eSSepherosa Ziehau  *  flap the tx laser to alert the link partner to start autotry
67379251f5eSSepherosa Ziehau  *  process on its end.
67479251f5eSSepherosa Ziehau  **/
ixgbe_flap_tx_laser(struct ixgbe_hw * hw)67579251f5eSSepherosa Ziehau void ixgbe_flap_tx_laser(struct ixgbe_hw *hw)
67679251f5eSSepherosa Ziehau {
67779251f5eSSepherosa Ziehau 	if (hw->mac.ops.flap_tx_laser)
67879251f5eSSepherosa Ziehau 		hw->mac.ops.flap_tx_laser(hw);
67979251f5eSSepherosa Ziehau }
68079251f5eSSepherosa Ziehau 
68179251f5eSSepherosa Ziehau /**
68279251f5eSSepherosa Ziehau  *  ixgbe_setup_link - Set link speed
68379251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
68479251f5eSSepherosa Ziehau  *  @speed: new link speed
685dd5ce676SSepherosa Ziehau  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
68679251f5eSSepherosa Ziehau  *
68779251f5eSSepherosa Ziehau  *  Configures link settings.  Restarts the link.
68879251f5eSSepherosa Ziehau  *  Performs autonegotiation if needed.
68979251f5eSSepherosa Ziehau  **/
ixgbe_setup_link(struct ixgbe_hw * hw,ixgbe_link_speed speed,bool autoneg_wait_to_complete)69079251f5eSSepherosa Ziehau s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed,
69179251f5eSSepherosa Ziehau 		     bool autoneg_wait_to_complete)
69279251f5eSSepherosa Ziehau {
69379251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw, speed,
69479251f5eSSepherosa Ziehau 			       autoneg_wait_to_complete),
69579251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
69679251f5eSSepherosa Ziehau }
69779251f5eSSepherosa Ziehau 
69879251f5eSSepherosa Ziehau /**
69963d483cdSSepherosa Ziehau  *  ixgbe_setup_mac_link - Set link speed
70063d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
70163d483cdSSepherosa Ziehau  *  @speed: new link speed
702dd5ce676SSepherosa Ziehau  *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
70363d483cdSSepherosa Ziehau  *
70463d483cdSSepherosa Ziehau  *  Configures link settings.  Restarts the link.
70563d483cdSSepherosa Ziehau  *  Performs autonegotiation if needed.
70663d483cdSSepherosa Ziehau  **/
ixgbe_setup_mac_link(struct ixgbe_hw * hw,ixgbe_link_speed speed,bool autoneg_wait_to_complete)70763d483cdSSepherosa Ziehau s32 ixgbe_setup_mac_link(struct ixgbe_hw *hw, ixgbe_link_speed speed,
70863d483cdSSepherosa Ziehau 			 bool autoneg_wait_to_complete)
70963d483cdSSepherosa Ziehau {
71063d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.setup_mac_link, (hw, speed,
71163d483cdSSepherosa Ziehau 			       autoneg_wait_to_complete),
71263d483cdSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
71363d483cdSSepherosa Ziehau }
71463d483cdSSepherosa Ziehau 
71563d483cdSSepherosa Ziehau /**
71679251f5eSSepherosa Ziehau  *  ixgbe_get_link_capabilities - Returns link capabilities
71779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
718dd5ce676SSepherosa Ziehau  *  @speed: link speed capabilities
719dd5ce676SSepherosa Ziehau  *  @autoneg: TRUE when autoneg or autotry is enabled
72079251f5eSSepherosa Ziehau  *
72179251f5eSSepherosa Ziehau  *  Determines the link capabilities of the current configuration.
72279251f5eSSepherosa Ziehau  **/
ixgbe_get_link_capabilities(struct ixgbe_hw * hw,ixgbe_link_speed * speed,bool * autoneg)72379251f5eSSepherosa Ziehau s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
72479251f5eSSepherosa Ziehau 				bool *autoneg)
72579251f5eSSepherosa Ziehau {
72679251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw,
72779251f5eSSepherosa Ziehau 			       speed, autoneg), IXGBE_NOT_IMPLEMENTED);
72879251f5eSSepherosa Ziehau }
72979251f5eSSepherosa Ziehau 
73079251f5eSSepherosa Ziehau /**
73179251f5eSSepherosa Ziehau  *  ixgbe_led_on - Turn on LEDs
73279251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
73379251f5eSSepherosa Ziehau  *  @index: led number to turn on
73479251f5eSSepherosa Ziehau  *
73579251f5eSSepherosa Ziehau  *  Turns on the software controllable LEDs.
73679251f5eSSepherosa Ziehau  **/
ixgbe_led_on(struct ixgbe_hw * hw,u32 index)73779251f5eSSepherosa Ziehau s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index)
73879251f5eSSepherosa Ziehau {
73979251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index),
74079251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
74179251f5eSSepherosa Ziehau }
74279251f5eSSepherosa Ziehau 
74379251f5eSSepherosa Ziehau /**
74479251f5eSSepherosa Ziehau  *  ixgbe_led_off - Turn off LEDs
74579251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
74679251f5eSSepherosa Ziehau  *  @index: led number to turn off
74779251f5eSSepherosa Ziehau  *
74879251f5eSSepherosa Ziehau  *  Turns off the software controllable LEDs.
74979251f5eSSepherosa Ziehau  **/
ixgbe_led_off(struct ixgbe_hw * hw,u32 index)75079251f5eSSepherosa Ziehau s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index)
75179251f5eSSepherosa Ziehau {
75279251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index),
75379251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
75479251f5eSSepherosa Ziehau }
75579251f5eSSepherosa Ziehau 
75679251f5eSSepherosa Ziehau /**
75779251f5eSSepherosa Ziehau  *  ixgbe_blink_led_start - Blink LEDs
75879251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
75979251f5eSSepherosa Ziehau  *  @index: led number to blink
76079251f5eSSepherosa Ziehau  *
76179251f5eSSepherosa Ziehau  *  Blink LED based on index.
76279251f5eSSepherosa Ziehau  **/
ixgbe_blink_led_start(struct ixgbe_hw * hw,u32 index)76379251f5eSSepherosa Ziehau s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index)
76479251f5eSSepherosa Ziehau {
76579251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index),
76679251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
76779251f5eSSepherosa Ziehau }
76879251f5eSSepherosa Ziehau 
76979251f5eSSepherosa Ziehau /**
77079251f5eSSepherosa Ziehau  *  ixgbe_blink_led_stop - Stop blinking LEDs
77179251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
772dd5ce676SSepherosa Ziehau  *  @index: led number to stop
77379251f5eSSepherosa Ziehau  *
77479251f5eSSepherosa Ziehau  *  Stop blinking LED based on index.
77579251f5eSSepherosa Ziehau  **/
ixgbe_blink_led_stop(struct ixgbe_hw * hw,u32 index)77679251f5eSSepherosa Ziehau s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index)
77779251f5eSSepherosa Ziehau {
77879251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index),
77979251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
78079251f5eSSepherosa Ziehau }
78179251f5eSSepherosa Ziehau 
78279251f5eSSepherosa Ziehau /**
78379251f5eSSepherosa Ziehau  *  ixgbe_init_eeprom_params - Initialize EEPROM parameters
78479251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
78579251f5eSSepherosa Ziehau  *
78679251f5eSSepherosa Ziehau  *  Initializes the EEPROM parameters ixgbe_eeprom_info within the
78779251f5eSSepherosa Ziehau  *  ixgbe_hw struct in order to set up EEPROM access.
78879251f5eSSepherosa Ziehau  **/
ixgbe_init_eeprom_params(struct ixgbe_hw * hw)78979251f5eSSepherosa Ziehau s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw)
79079251f5eSSepherosa Ziehau {
79179251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw),
79279251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
79379251f5eSSepherosa Ziehau }
79479251f5eSSepherosa Ziehau 
79579251f5eSSepherosa Ziehau 
79679251f5eSSepherosa Ziehau /**
79779251f5eSSepherosa Ziehau  *  ixgbe_write_eeprom - Write word to EEPROM
79879251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
79979251f5eSSepherosa Ziehau  *  @offset: offset within the EEPROM to be written to
80079251f5eSSepherosa Ziehau  *  @data: 16 bit word to be written to the EEPROM
80179251f5eSSepherosa Ziehau  *
80279251f5eSSepherosa Ziehau  *  Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not
80379251f5eSSepherosa Ziehau  *  called after this function, the EEPROM will most likely contain an
80479251f5eSSepherosa Ziehau  *  invalid checksum.
80579251f5eSSepherosa Ziehau  **/
ixgbe_write_eeprom(struct ixgbe_hw * hw,u16 offset,u16 data)80679251f5eSSepherosa Ziehau s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data)
80779251f5eSSepherosa Ziehau {
80879251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data),
80979251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
81079251f5eSSepherosa Ziehau }
81179251f5eSSepherosa Ziehau 
81279251f5eSSepherosa Ziehau /**
81379251f5eSSepherosa Ziehau  *  ixgbe_write_eeprom_buffer - Write word(s) to EEPROM
81479251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
81579251f5eSSepherosa Ziehau  *  @offset: offset within the EEPROM to be written to
81679251f5eSSepherosa Ziehau  *  @data: 16 bit word(s) to be written to the EEPROM
81779251f5eSSepherosa Ziehau  *  @words: number of words
81879251f5eSSepherosa Ziehau  *
81979251f5eSSepherosa Ziehau  *  Writes 16 bit word(s) to EEPROM. If ixgbe_eeprom_update_checksum is not
82079251f5eSSepherosa Ziehau  *  called after this function, the EEPROM will most likely contain an
82179251f5eSSepherosa Ziehau  *  invalid checksum.
82279251f5eSSepherosa Ziehau  **/
ixgbe_write_eeprom_buffer(struct ixgbe_hw * hw,u16 offset,u16 words,u16 * data)82379251f5eSSepherosa Ziehau s32 ixgbe_write_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, u16 words,
82479251f5eSSepherosa Ziehau 			      u16 *data)
82579251f5eSSepherosa Ziehau {
82679251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->eeprom.ops.write_buffer,
82779251f5eSSepherosa Ziehau 			       (hw, offset, words, data),
82879251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
82979251f5eSSepherosa Ziehau }
83079251f5eSSepherosa Ziehau 
83179251f5eSSepherosa Ziehau /**
83279251f5eSSepherosa Ziehau  *  ixgbe_read_eeprom - Read word from EEPROM
83379251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
83479251f5eSSepherosa Ziehau  *  @offset: offset within the EEPROM to be read
83579251f5eSSepherosa Ziehau  *  @data: read 16 bit value from EEPROM
83679251f5eSSepherosa Ziehau  *
83779251f5eSSepherosa Ziehau  *  Reads 16 bit value from EEPROM
83879251f5eSSepherosa Ziehau  **/
ixgbe_read_eeprom(struct ixgbe_hw * hw,u16 offset,u16 * data)83979251f5eSSepherosa Ziehau s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data)
84079251f5eSSepherosa Ziehau {
84179251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data),
84279251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
84379251f5eSSepherosa Ziehau }
84479251f5eSSepherosa Ziehau 
84579251f5eSSepherosa Ziehau /**
84679251f5eSSepherosa Ziehau  *  ixgbe_read_eeprom_buffer - Read word(s) from EEPROM
84779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
84879251f5eSSepherosa Ziehau  *  @offset: offset within the EEPROM to be read
84979251f5eSSepherosa Ziehau  *  @data: read 16 bit word(s) from EEPROM
85079251f5eSSepherosa Ziehau  *  @words: number of words
85179251f5eSSepherosa Ziehau  *
85279251f5eSSepherosa Ziehau  *  Reads 16 bit word(s) from EEPROM
85379251f5eSSepherosa Ziehau  **/
ixgbe_read_eeprom_buffer(struct ixgbe_hw * hw,u16 offset,u16 words,u16 * data)85479251f5eSSepherosa Ziehau s32 ixgbe_read_eeprom_buffer(struct ixgbe_hw *hw, u16 offset,
85579251f5eSSepherosa Ziehau 			     u16 words, u16 *data)
85679251f5eSSepherosa Ziehau {
85779251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->eeprom.ops.read_buffer,
85879251f5eSSepherosa Ziehau 			       (hw, offset, words, data),
85979251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
86079251f5eSSepherosa Ziehau }
86179251f5eSSepherosa Ziehau 
86279251f5eSSepherosa Ziehau /**
86379251f5eSSepherosa Ziehau  *  ixgbe_validate_eeprom_checksum - Validate EEPROM checksum
86479251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
86579251f5eSSepherosa Ziehau  *  @checksum_val: calculated checksum
86679251f5eSSepherosa Ziehau  *
86779251f5eSSepherosa Ziehau  *  Performs checksum calculation and validates the EEPROM checksum
86879251f5eSSepherosa Ziehau  **/
ixgbe_validate_eeprom_checksum(struct ixgbe_hw * hw,u16 * checksum_val)86979251f5eSSepherosa Ziehau s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val)
87079251f5eSSepherosa Ziehau {
87179251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum,
87279251f5eSSepherosa Ziehau 			       (hw, checksum_val), IXGBE_NOT_IMPLEMENTED);
87379251f5eSSepherosa Ziehau }
87479251f5eSSepherosa Ziehau 
87579251f5eSSepherosa Ziehau /**
87679251f5eSSepherosa Ziehau  *  ixgbe_eeprom_update_checksum - Updates the EEPROM checksum
87779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
87879251f5eSSepherosa Ziehau  **/
ixgbe_update_eeprom_checksum(struct ixgbe_hw * hw)87979251f5eSSepherosa Ziehau s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw)
88079251f5eSSepherosa Ziehau {
88179251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw),
88279251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
88379251f5eSSepherosa Ziehau }
88479251f5eSSepherosa Ziehau 
88579251f5eSSepherosa Ziehau /**
88679251f5eSSepherosa Ziehau  *  ixgbe_insert_mac_addr - Find a RAR for this mac address
88779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
88879251f5eSSepherosa Ziehau  *  @addr: Address to put into receive address register
88979251f5eSSepherosa Ziehau  *  @vmdq: VMDq pool to assign
89079251f5eSSepherosa Ziehau  *
89179251f5eSSepherosa Ziehau  *  Puts an ethernet address into a receive address register, or
89279251f5eSSepherosa Ziehau  *  finds the rar that it is aleady in; adds to the pool list
89379251f5eSSepherosa Ziehau  **/
ixgbe_insert_mac_addr(struct ixgbe_hw * hw,u8 * addr,u32 vmdq)89479251f5eSSepherosa Ziehau s32 ixgbe_insert_mac_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
89579251f5eSSepherosa Ziehau {
89679251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.insert_mac_addr,
89779251f5eSSepherosa Ziehau 			       (hw, addr, vmdq),
89879251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
89979251f5eSSepherosa Ziehau }
90079251f5eSSepherosa Ziehau 
90179251f5eSSepherosa Ziehau /**
90279251f5eSSepherosa Ziehau  *  ixgbe_set_rar - Set Rx address register
90379251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
90479251f5eSSepherosa Ziehau  *  @index: Receive address register to write
90579251f5eSSepherosa Ziehau  *  @addr: Address to put into receive address register
90679251f5eSSepherosa Ziehau  *  @vmdq: VMDq "set"
90779251f5eSSepherosa Ziehau  *  @enable_addr: set flag that address is active
90879251f5eSSepherosa Ziehau  *
90979251f5eSSepherosa Ziehau  *  Puts an ethernet address into a receive address register.
91079251f5eSSepherosa Ziehau  **/
ixgbe_set_rar(struct ixgbe_hw * hw,u32 index,u8 * addr,u32 vmdq,u32 enable_addr)91179251f5eSSepherosa Ziehau s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
91279251f5eSSepherosa Ziehau 		  u32 enable_addr)
91379251f5eSSepherosa Ziehau {
91479251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq,
91579251f5eSSepherosa Ziehau 			       enable_addr), IXGBE_NOT_IMPLEMENTED);
91679251f5eSSepherosa Ziehau }
91779251f5eSSepherosa Ziehau 
91879251f5eSSepherosa Ziehau /**
91979251f5eSSepherosa Ziehau  *  ixgbe_clear_rar - Clear Rx address register
92079251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
92179251f5eSSepherosa Ziehau  *  @index: Receive address register to write
92279251f5eSSepherosa Ziehau  *
92379251f5eSSepherosa Ziehau  *  Puts an ethernet address into a receive address register.
92479251f5eSSepherosa Ziehau  **/
ixgbe_clear_rar(struct ixgbe_hw * hw,u32 index)92579251f5eSSepherosa Ziehau s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index)
92679251f5eSSepherosa Ziehau {
92779251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index),
92879251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
92979251f5eSSepherosa Ziehau }
93079251f5eSSepherosa Ziehau 
93179251f5eSSepherosa Ziehau /**
93279251f5eSSepherosa Ziehau  *  ixgbe_set_vmdq - Associate a VMDq index with a receive address
93379251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
93479251f5eSSepherosa Ziehau  *  @rar: receive address register index to associate with VMDq index
93579251f5eSSepherosa Ziehau  *  @vmdq: VMDq set or pool index
93679251f5eSSepherosa Ziehau  **/
ixgbe_set_vmdq(struct ixgbe_hw * hw,u32 rar,u32 vmdq)93779251f5eSSepherosa Ziehau s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
93879251f5eSSepherosa Ziehau {
93979251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq),
94079251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
94179251f5eSSepherosa Ziehau 
94279251f5eSSepherosa Ziehau }
94379251f5eSSepherosa Ziehau 
94479251f5eSSepherosa Ziehau /**
94579251f5eSSepherosa Ziehau  *  ixgbe_set_vmdq_san_mac - Associate VMDq index 127 with a receive address
94679251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
94779251f5eSSepherosa Ziehau  *  @vmdq: VMDq default pool index
94879251f5eSSepherosa Ziehau  **/
ixgbe_set_vmdq_san_mac(struct ixgbe_hw * hw,u32 vmdq)94979251f5eSSepherosa Ziehau s32 ixgbe_set_vmdq_san_mac(struct ixgbe_hw *hw, u32 vmdq)
95079251f5eSSepherosa Ziehau {
95179251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.set_vmdq_san_mac,
95279251f5eSSepherosa Ziehau 			       (hw, vmdq), IXGBE_NOT_IMPLEMENTED);
95379251f5eSSepherosa Ziehau }
95479251f5eSSepherosa Ziehau 
95579251f5eSSepherosa Ziehau /**
95679251f5eSSepherosa Ziehau  *  ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address
95779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
95879251f5eSSepherosa Ziehau  *  @rar: receive address register index to disassociate with VMDq index
95979251f5eSSepherosa Ziehau  *  @vmdq: VMDq set or pool index
96079251f5eSSepherosa Ziehau  **/
ixgbe_clear_vmdq(struct ixgbe_hw * hw,u32 rar,u32 vmdq)96179251f5eSSepherosa Ziehau s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
96279251f5eSSepherosa Ziehau {
96379251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq),
96479251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
96579251f5eSSepherosa Ziehau }
96679251f5eSSepherosa Ziehau 
96779251f5eSSepherosa Ziehau /**
96879251f5eSSepherosa Ziehau  *  ixgbe_init_rx_addrs - Initializes receive address filters.
96979251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
97079251f5eSSepherosa Ziehau  *
97179251f5eSSepherosa Ziehau  *  Places the MAC address in receive address register 0 and clears the rest
97279251f5eSSepherosa Ziehau  *  of the receive address registers. Clears the multicast table. Assumes
97379251f5eSSepherosa Ziehau  *  the receiver is in reset when the routine is called.
97479251f5eSSepherosa Ziehau  **/
ixgbe_init_rx_addrs(struct ixgbe_hw * hw)97579251f5eSSepherosa Ziehau s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw)
97679251f5eSSepherosa Ziehau {
97779251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw),
97879251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
97979251f5eSSepherosa Ziehau }
98079251f5eSSepherosa Ziehau 
98179251f5eSSepherosa Ziehau /**
98279251f5eSSepherosa Ziehau  *  ixgbe_get_num_rx_addrs - Returns the number of RAR entries.
98379251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
98479251f5eSSepherosa Ziehau  **/
ixgbe_get_num_rx_addrs(struct ixgbe_hw * hw)98579251f5eSSepherosa Ziehau u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw)
98679251f5eSSepherosa Ziehau {
98779251f5eSSepherosa Ziehau 	return hw->mac.num_rar_entries;
98879251f5eSSepherosa Ziehau }
98979251f5eSSepherosa Ziehau 
99079251f5eSSepherosa Ziehau /**
99179251f5eSSepherosa Ziehau  *  ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses
99279251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
99379251f5eSSepherosa Ziehau  *  @addr_list: the list of new multicast addresses
99479251f5eSSepherosa Ziehau  *  @addr_count: number of addresses
99579251f5eSSepherosa Ziehau  *  @func: iterator function to walk the multicast address list
99679251f5eSSepherosa Ziehau  *
99779251f5eSSepherosa Ziehau  *  The given list replaces any existing list. Clears the secondary addrs from
99879251f5eSSepherosa Ziehau  *  receive address registers. Uses unused receive address registers for the
99979251f5eSSepherosa Ziehau  *  first secondary addresses, and falls back to promiscuous mode as needed.
100079251f5eSSepherosa Ziehau  **/
ixgbe_update_uc_addr_list(struct ixgbe_hw * hw,u8 * addr_list,u32 addr_count,ixgbe_mc_addr_itr func)100179251f5eSSepherosa Ziehau s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list,
100279251f5eSSepherosa Ziehau 			      u32 addr_count, ixgbe_mc_addr_itr func)
100379251f5eSSepherosa Ziehau {
100479251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw,
100579251f5eSSepherosa Ziehau 			       addr_list, addr_count, func),
100679251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
100779251f5eSSepherosa Ziehau }
100879251f5eSSepherosa Ziehau 
100979251f5eSSepherosa Ziehau /**
101079251f5eSSepherosa Ziehau  *  ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses
101179251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
101279251f5eSSepherosa Ziehau  *  @mc_addr_list: the list of new multicast addresses
101379251f5eSSepherosa Ziehau  *  @mc_addr_count: number of addresses
101479251f5eSSepherosa Ziehau  *  @func: iterator function to walk the multicast address list
1015dd5ce676SSepherosa Ziehau  *  @clear: flag, when set clears the table beforehand
101679251f5eSSepherosa Ziehau  *
101779251f5eSSepherosa Ziehau  *  The given list replaces any existing list. Clears the MC addrs from receive
101879251f5eSSepherosa Ziehau  *  address registers and the multicast table. Uses unused receive address
101979251f5eSSepherosa Ziehau  *  registers for the first multicast addresses, and hashes the rest into the
102079251f5eSSepherosa Ziehau  *  multicast table.
102179251f5eSSepherosa Ziehau  **/
ixgbe_update_mc_addr_list(struct ixgbe_hw * hw,u8 * mc_addr_list,u32 mc_addr_count,ixgbe_mc_addr_itr func,bool clear)102279251f5eSSepherosa Ziehau s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list,
102379251f5eSSepherosa Ziehau 			      u32 mc_addr_count, ixgbe_mc_addr_itr func,
102479251f5eSSepherosa Ziehau 			      bool clear)
102579251f5eSSepherosa Ziehau {
102679251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw,
102779251f5eSSepherosa Ziehau 			       mc_addr_list, mc_addr_count, func, clear),
102879251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
102979251f5eSSepherosa Ziehau }
103079251f5eSSepherosa Ziehau 
103179251f5eSSepherosa Ziehau /**
103279251f5eSSepherosa Ziehau  *  ixgbe_enable_mc - Enable multicast address in RAR
103379251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
103479251f5eSSepherosa Ziehau  *
103579251f5eSSepherosa Ziehau  *  Enables multicast address in RAR and the use of the multicast hash table.
103679251f5eSSepherosa Ziehau  **/
ixgbe_enable_mc(struct ixgbe_hw * hw)103779251f5eSSepherosa Ziehau s32 ixgbe_enable_mc(struct ixgbe_hw *hw)
103879251f5eSSepherosa Ziehau {
103979251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw),
104079251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
104179251f5eSSepherosa Ziehau }
104279251f5eSSepherosa Ziehau 
104379251f5eSSepherosa Ziehau /**
104479251f5eSSepherosa Ziehau  *  ixgbe_disable_mc - Disable multicast address in RAR
104579251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
104679251f5eSSepherosa Ziehau  *
104779251f5eSSepherosa Ziehau  *  Disables multicast address in RAR and the use of the multicast hash table.
104879251f5eSSepherosa Ziehau  **/
ixgbe_disable_mc(struct ixgbe_hw * hw)104979251f5eSSepherosa Ziehau s32 ixgbe_disable_mc(struct ixgbe_hw *hw)
105079251f5eSSepherosa Ziehau {
105179251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw),
105279251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
105379251f5eSSepherosa Ziehau }
105479251f5eSSepherosa Ziehau 
105579251f5eSSepherosa Ziehau /**
105679251f5eSSepherosa Ziehau  *  ixgbe_clear_vfta - Clear VLAN filter table
105779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
105879251f5eSSepherosa Ziehau  *
105979251f5eSSepherosa Ziehau  *  Clears the VLAN filer table, and the VMDq index associated with the filter
106079251f5eSSepherosa Ziehau  **/
ixgbe_clear_vfta(struct ixgbe_hw * hw)106179251f5eSSepherosa Ziehau s32 ixgbe_clear_vfta(struct ixgbe_hw *hw)
106279251f5eSSepherosa Ziehau {
106379251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw),
106479251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
106579251f5eSSepherosa Ziehau }
106679251f5eSSepherosa Ziehau 
106779251f5eSSepherosa Ziehau /**
106879251f5eSSepherosa Ziehau  *  ixgbe_set_vfta - Set VLAN filter table
106979251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
107079251f5eSSepherosa Ziehau  *  @vlan: VLAN id to write to VLAN filter
10716150453fSSepherosa Ziehau  *  @vind: VMDq output index that maps queue to VLAN id in VLVFB
10726150453fSSepherosa Ziehau  *  @vlan_on: boolean flag to turn on/off VLAN
10736150453fSSepherosa Ziehau  *  @vlvf_bypass: boolean flag indicating updating the default pool is okay
107479251f5eSSepherosa Ziehau  *
107579251f5eSSepherosa Ziehau  *  Turn on/off specified VLAN in the VLAN filter table.
107679251f5eSSepherosa Ziehau  **/
ixgbe_set_vfta(struct ixgbe_hw * hw,u32 vlan,u32 vind,bool vlan_on,bool vlvf_bypass)10776150453fSSepherosa Ziehau s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on,
10786150453fSSepherosa Ziehau 		   bool vlvf_bypass)
107979251f5eSSepherosa Ziehau {
108079251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind,
10816150453fSSepherosa Ziehau 			       vlan_on, vlvf_bypass), IXGBE_NOT_IMPLEMENTED);
108279251f5eSSepherosa Ziehau }
108379251f5eSSepherosa Ziehau 
108479251f5eSSepherosa Ziehau /**
108579251f5eSSepherosa Ziehau  *  ixgbe_set_vlvf - Set VLAN Pool Filter
108679251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
108779251f5eSSepherosa Ziehau  *  @vlan: VLAN id to write to VLAN filter
10886150453fSSepherosa Ziehau  *  @vind: VMDq output index that maps queue to VLAN id in VLVFB
10896150453fSSepherosa Ziehau  *  @vlan_on: boolean flag to turn on/off VLAN in VLVF
10906150453fSSepherosa Ziehau  *  @vfta_delta: pointer to the difference between the current value of VFTA
10916150453fSSepherosa Ziehau  *		 and the desired value
10926150453fSSepherosa Ziehau  *  @vfta: the desired value of the VFTA
10936150453fSSepherosa Ziehau  *  @vlvf_bypass: boolean flag indicating updating the default pool is okay
109479251f5eSSepherosa Ziehau  *
109579251f5eSSepherosa Ziehau  *  Turn on/off specified bit in VLVF table.
109679251f5eSSepherosa Ziehau  **/
ixgbe_set_vlvf(struct ixgbe_hw * hw,u32 vlan,u32 vind,bool vlan_on,u32 * vfta_delta,u32 vfta,bool vlvf_bypass)109779251f5eSSepherosa Ziehau s32 ixgbe_set_vlvf(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on,
10986150453fSSepherosa Ziehau 		   u32 *vfta_delta, u32 vfta, bool vlvf_bypass)
109979251f5eSSepherosa Ziehau {
110079251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.set_vlvf, (hw, vlan, vind,
11016150453fSSepherosa Ziehau 			       vlan_on, vfta_delta, vfta, vlvf_bypass),
11026150453fSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
110379251f5eSSepherosa Ziehau }
110479251f5eSSepherosa Ziehau 
110579251f5eSSepherosa Ziehau /**
110679251f5eSSepherosa Ziehau  *  ixgbe_fc_enable - Enable flow control
110779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
110879251f5eSSepherosa Ziehau  *
110979251f5eSSepherosa Ziehau  *  Configures the flow control settings based on SW configuration.
111079251f5eSSepherosa Ziehau  **/
ixgbe_fc_enable(struct ixgbe_hw * hw)111179251f5eSSepherosa Ziehau s32 ixgbe_fc_enable(struct ixgbe_hw *hw)
111279251f5eSSepherosa Ziehau {
111379251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.fc_enable, (hw),
111479251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
111579251f5eSSepherosa Ziehau }
111679251f5eSSepherosa Ziehau 
111779251f5eSSepherosa Ziehau /**
111863d483cdSSepherosa Ziehau  *  ixgbe_setup_fc - Set up flow control
111963d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
112063d483cdSSepherosa Ziehau  *
112163d483cdSSepherosa Ziehau  *  Called at init time to set up flow control.
112263d483cdSSepherosa Ziehau  **/
ixgbe_setup_fc(struct ixgbe_hw * hw)112363d483cdSSepherosa Ziehau s32 ixgbe_setup_fc(struct ixgbe_hw *hw)
112463d483cdSSepherosa Ziehau {
112563d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.setup_fc, (hw),
112663d483cdSSepherosa Ziehau 		IXGBE_NOT_IMPLEMENTED);
112763d483cdSSepherosa Ziehau }
112863d483cdSSepherosa Ziehau 
112963d483cdSSepherosa Ziehau /**
113079251f5eSSepherosa Ziehau  * ixgbe_set_fw_drv_ver - Try to send the driver version number FW
113179251f5eSSepherosa Ziehau  * @hw: pointer to hardware structure
113279251f5eSSepherosa Ziehau  * @maj: driver major number to be sent to firmware
113379251f5eSSepherosa Ziehau  * @min: driver minor number to be sent to firmware
113479251f5eSSepherosa Ziehau  * @build: driver build number to be sent to firmware
113579251f5eSSepherosa Ziehau  * @ver: driver version number to be sent to firmware
11366150453fSSepherosa Ziehau  * @len: length of driver_ver string
11376150453fSSepherosa Ziehau  * @driver_ver: driver string
113879251f5eSSepherosa Ziehau  **/
ixgbe_set_fw_drv_ver(struct ixgbe_hw * hw,u8 maj,u8 min,u8 build,u8 ver,u16 len,char * driver_ver)113979251f5eSSepherosa Ziehau s32 ixgbe_set_fw_drv_ver(struct ixgbe_hw *hw, u8 maj, u8 min, u8 build,
11406150453fSSepherosa Ziehau 			 u8 ver, u16 len, char *driver_ver)
114179251f5eSSepherosa Ziehau {
114279251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.set_fw_drv_ver, (hw, maj, min,
11436150453fSSepherosa Ziehau 			       build, ver, len, driver_ver),
11446150453fSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
114579251f5eSSepherosa Ziehau }
114679251f5eSSepherosa Ziehau 
114779251f5eSSepherosa Ziehau 
114879251f5eSSepherosa Ziehau 
114963d483cdSSepherosa Ziehau /**
115063d483cdSSepherosa Ziehau  *  ixgbe_dmac_config - Configure DMA Coalescing registers.
115163d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
115263d483cdSSepherosa Ziehau  *
115363d483cdSSepherosa Ziehau  *  Configure DMA coalescing. If enabling dmac, dmac is activated.
115463d483cdSSepherosa Ziehau  *  When disabling dmac, dmac enable dmac bit is cleared.
115563d483cdSSepherosa Ziehau  **/
ixgbe_dmac_config(struct ixgbe_hw * hw)115663d483cdSSepherosa Ziehau s32 ixgbe_dmac_config(struct ixgbe_hw *hw)
115763d483cdSSepherosa Ziehau {
115863d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.dmac_config, (hw),
115963d483cdSSepherosa Ziehau 				IXGBE_NOT_IMPLEMENTED);
116063d483cdSSepherosa Ziehau }
116163d483cdSSepherosa Ziehau 
116263d483cdSSepherosa Ziehau /**
116363d483cdSSepherosa Ziehau  *  ixgbe_dmac_update_tcs - Configure DMA Coalescing registers.
116463d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
116563d483cdSSepherosa Ziehau  *
116663d483cdSSepherosa Ziehau  *  Disables dmac, updates per TC settings, and then enable dmac.
116763d483cdSSepherosa Ziehau  **/
ixgbe_dmac_update_tcs(struct ixgbe_hw * hw)116863d483cdSSepherosa Ziehau s32 ixgbe_dmac_update_tcs(struct ixgbe_hw *hw)
116963d483cdSSepherosa Ziehau {
117063d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.dmac_update_tcs, (hw),
117163d483cdSSepherosa Ziehau 				IXGBE_NOT_IMPLEMENTED);
117263d483cdSSepherosa Ziehau }
117363d483cdSSepherosa Ziehau 
117463d483cdSSepherosa Ziehau /**
117563d483cdSSepherosa Ziehau  *  ixgbe_dmac_config_tcs - Configure DMA Coalescing registers.
117663d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
117763d483cdSSepherosa Ziehau  *
117863d483cdSSepherosa Ziehau  *  Configure DMA coalescing threshold per TC and set high priority bit for
117963d483cdSSepherosa Ziehau  *  FCOE TC. The dmac enable bit must be cleared before configuring.
118063d483cdSSepherosa Ziehau  **/
ixgbe_dmac_config_tcs(struct ixgbe_hw * hw)118163d483cdSSepherosa Ziehau s32 ixgbe_dmac_config_tcs(struct ixgbe_hw *hw)
118263d483cdSSepherosa Ziehau {
118363d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.dmac_config_tcs, (hw),
118463d483cdSSepherosa Ziehau 				IXGBE_NOT_IMPLEMENTED);
118563d483cdSSepherosa Ziehau }
118663d483cdSSepherosa Ziehau 
118763d483cdSSepherosa Ziehau /**
118863d483cdSSepherosa Ziehau  *  ixgbe_setup_eee - Enable/disable EEE support
118963d483cdSSepherosa Ziehau  *  @hw: pointer to the HW structure
119063d483cdSSepherosa Ziehau  *  @enable_eee: boolean flag to enable EEE
119163d483cdSSepherosa Ziehau  *
119263d483cdSSepherosa Ziehau  *  Enable/disable EEE based on enable_ee flag.
119363d483cdSSepherosa Ziehau  *  Auto-negotiation must be started after BASE-T EEE bits in PHY register 7.3C
119463d483cdSSepherosa Ziehau  *  are modified.
119563d483cdSSepherosa Ziehau  *
119663d483cdSSepherosa Ziehau  **/
ixgbe_setup_eee(struct ixgbe_hw * hw,bool enable_eee)119763d483cdSSepherosa Ziehau s32 ixgbe_setup_eee(struct ixgbe_hw *hw, bool enable_eee)
119863d483cdSSepherosa Ziehau {
119963d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.setup_eee, (hw, enable_eee),
120063d483cdSSepherosa Ziehau 			IXGBE_NOT_IMPLEMENTED);
120163d483cdSSepherosa Ziehau }
120263d483cdSSepherosa Ziehau 
120363d483cdSSepherosa Ziehau /**
120463d483cdSSepherosa Ziehau  * ixgbe_set_source_address_pruning - Enable/Disable source address pruning
120563d483cdSSepherosa Ziehau  * @hw: pointer to hardware structure
1206dd5ce676SSepherosa Ziehau  * @enable: enable or disable source address pruning
120763d483cdSSepherosa Ziehau  * @pool: Rx pool - Rx pool to toggle source address pruning
120863d483cdSSepherosa Ziehau  **/
ixgbe_set_source_address_pruning(struct ixgbe_hw * hw,bool enable,unsigned int pool)120963d483cdSSepherosa Ziehau void ixgbe_set_source_address_pruning(struct ixgbe_hw *hw, bool enable,
121063d483cdSSepherosa Ziehau 				      unsigned int pool)
121163d483cdSSepherosa Ziehau {
121263d483cdSSepherosa Ziehau 	if (hw->mac.ops.set_source_address_pruning)
121363d483cdSSepherosa Ziehau 		hw->mac.ops.set_source_address_pruning(hw, enable, pool);
121463d483cdSSepherosa Ziehau }
121563d483cdSSepherosa Ziehau 
121663d483cdSSepherosa Ziehau /**
121763d483cdSSepherosa Ziehau  *  ixgbe_set_ethertype_anti_spoofing - Enable/Disable Ethertype anti-spoofing
121863d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
121963d483cdSSepherosa Ziehau  *  @enable: enable or disable switch for Ethertype anti-spoofing
122063d483cdSSepherosa Ziehau  *  @vf: Virtual Function pool - VF Pool to set for Ethertype anti-spoofing
122163d483cdSSepherosa Ziehau  *
122263d483cdSSepherosa Ziehau  **/
ixgbe_set_ethertype_anti_spoofing(struct ixgbe_hw * hw,bool enable,int vf)122363d483cdSSepherosa Ziehau void ixgbe_set_ethertype_anti_spoofing(struct ixgbe_hw *hw, bool enable, int vf)
122463d483cdSSepherosa Ziehau {
122563d483cdSSepherosa Ziehau 	if (hw->mac.ops.set_ethertype_anti_spoofing)
122663d483cdSSepherosa Ziehau 		hw->mac.ops.set_ethertype_anti_spoofing(hw, enable, vf);
122763d483cdSSepherosa Ziehau }
122863d483cdSSepherosa Ziehau 
122963d483cdSSepherosa Ziehau /**
123063d483cdSSepherosa Ziehau  *  ixgbe_read_iosf_sb_reg - Read 32 bit PHY register
123163d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
123263d483cdSSepherosa Ziehau  *  @reg_addr: 32 bit address of PHY register to read
123363d483cdSSepherosa Ziehau  *  @device_type: type of device you want to communicate with
123463d483cdSSepherosa Ziehau  *  @phy_data: Pointer to read data from PHY register
123563d483cdSSepherosa Ziehau  *
123663d483cdSSepherosa Ziehau  *  Reads a value from a specified PHY register
123763d483cdSSepherosa Ziehau  **/
ixgbe_read_iosf_sb_reg(struct ixgbe_hw * hw,u32 reg_addr,u32 device_type,u32 * phy_data)123863d483cdSSepherosa Ziehau s32 ixgbe_read_iosf_sb_reg(struct ixgbe_hw *hw, u32 reg_addr,
123963d483cdSSepherosa Ziehau 			   u32 device_type, u32 *phy_data)
124063d483cdSSepherosa Ziehau {
124163d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.read_iosf_sb_reg, (hw, reg_addr,
124263d483cdSSepherosa Ziehau 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
124363d483cdSSepherosa Ziehau }
124463d483cdSSepherosa Ziehau 
124563d483cdSSepherosa Ziehau /**
124663d483cdSSepherosa Ziehau  *  ixgbe_write_iosf_sb_reg - Write 32 bit register through IOSF Sideband
124763d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
124863d483cdSSepherosa Ziehau  *  @reg_addr: 32 bit PHY register to write
124963d483cdSSepherosa Ziehau  *  @device_type: type of device you want to communicate with
125063d483cdSSepherosa Ziehau  *  @phy_data: Data to write to the PHY register
125163d483cdSSepherosa Ziehau  *
125263d483cdSSepherosa Ziehau  *  Writes a value to specified PHY register
125363d483cdSSepherosa Ziehau  **/
ixgbe_write_iosf_sb_reg(struct ixgbe_hw * hw,u32 reg_addr,u32 device_type,u32 phy_data)125463d483cdSSepherosa Ziehau s32 ixgbe_write_iosf_sb_reg(struct ixgbe_hw *hw, u32 reg_addr,
125563d483cdSSepherosa Ziehau 			    u32 device_type, u32 phy_data)
125663d483cdSSepherosa Ziehau {
125763d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.write_iosf_sb_reg, (hw, reg_addr,
125863d483cdSSepherosa Ziehau 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
125963d483cdSSepherosa Ziehau }
126063d483cdSSepherosa Ziehau 
126163d483cdSSepherosa Ziehau /**
126263d483cdSSepherosa Ziehau  *  ixgbe_disable_mdd - Disable malicious driver detection
126363d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
126463d483cdSSepherosa Ziehau  *
126563d483cdSSepherosa Ziehau  **/
ixgbe_disable_mdd(struct ixgbe_hw * hw)126663d483cdSSepherosa Ziehau void ixgbe_disable_mdd(struct ixgbe_hw *hw)
126763d483cdSSepherosa Ziehau {
126863d483cdSSepherosa Ziehau 	if (hw->mac.ops.disable_mdd)
126963d483cdSSepherosa Ziehau 		hw->mac.ops.disable_mdd(hw);
127063d483cdSSepherosa Ziehau }
127163d483cdSSepherosa Ziehau 
127263d483cdSSepherosa Ziehau /**
127363d483cdSSepherosa Ziehau  *  ixgbe_enable_mdd - Enable malicious driver detection
127463d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
127563d483cdSSepherosa Ziehau  *
127663d483cdSSepherosa Ziehau  **/
ixgbe_enable_mdd(struct ixgbe_hw * hw)127763d483cdSSepherosa Ziehau void ixgbe_enable_mdd(struct ixgbe_hw *hw)
127863d483cdSSepherosa Ziehau {
127963d483cdSSepherosa Ziehau 	if (hw->mac.ops.enable_mdd)
128063d483cdSSepherosa Ziehau 		hw->mac.ops.enable_mdd(hw);
128163d483cdSSepherosa Ziehau }
128263d483cdSSepherosa Ziehau 
128363d483cdSSepherosa Ziehau /**
128463d483cdSSepherosa Ziehau  *  ixgbe_mdd_event - Handle malicious driver detection event
128563d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
128663d483cdSSepherosa Ziehau  *  @vf_bitmap: vf bitmap of malicious vfs
128763d483cdSSepherosa Ziehau  *
128863d483cdSSepherosa Ziehau  **/
ixgbe_mdd_event(struct ixgbe_hw * hw,u32 * vf_bitmap)128963d483cdSSepherosa Ziehau void ixgbe_mdd_event(struct ixgbe_hw *hw, u32 *vf_bitmap)
129063d483cdSSepherosa Ziehau {
129163d483cdSSepherosa Ziehau 	if (hw->mac.ops.mdd_event)
129263d483cdSSepherosa Ziehau 		hw->mac.ops.mdd_event(hw, vf_bitmap);
129363d483cdSSepherosa Ziehau }
129463d483cdSSepherosa Ziehau 
129563d483cdSSepherosa Ziehau /**
129663d483cdSSepherosa Ziehau  *  ixgbe_restore_mdd_vf - Restore VF that was disabled during malicious driver
129763d483cdSSepherosa Ziehau  *  detection event
129863d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
129963d483cdSSepherosa Ziehau  *  @vf: vf index
130063d483cdSSepherosa Ziehau  *
130163d483cdSSepherosa Ziehau  **/
ixgbe_restore_mdd_vf(struct ixgbe_hw * hw,u32 vf)130263d483cdSSepherosa Ziehau void ixgbe_restore_mdd_vf(struct ixgbe_hw *hw, u32 vf)
130363d483cdSSepherosa Ziehau {
130463d483cdSSepherosa Ziehau 	if (hw->mac.ops.restore_mdd_vf)
130563d483cdSSepherosa Ziehau 		hw->mac.ops.restore_mdd_vf(hw, vf);
130663d483cdSSepherosa Ziehau }
130763d483cdSSepherosa Ziehau 
130863d483cdSSepherosa Ziehau /**
1309dd5ce676SSepherosa Ziehau  *  ixgbe_fw_recovery_mode - Check if in FW NVM recovery mode
1310dd5ce676SSepherosa Ziehau  *  @hw: pointer to hardware structure
1311dd5ce676SSepherosa Ziehau  *
1312dd5ce676SSepherosa Ziehau  **/
ixgbe_fw_recovery_mode(struct ixgbe_hw * hw)1313dd5ce676SSepherosa Ziehau bool ixgbe_fw_recovery_mode(struct ixgbe_hw *hw)
1314dd5ce676SSepherosa Ziehau {
1315dd5ce676SSepherosa Ziehau 	if (hw->mac.ops.fw_recovery_mode)
1316dd5ce676SSepherosa Ziehau 		return hw->mac.ops.fw_recovery_mode(hw);
1317dd5ce676SSepherosa Ziehau 	return FALSE;
1318dd5ce676SSepherosa Ziehau }
1319dd5ce676SSepherosa Ziehau 
1320dd5ce676SSepherosa Ziehau /**
132163d483cdSSepherosa Ziehau  *  ixgbe_enter_lplu - Transition to low power states
132263d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
132363d483cdSSepherosa Ziehau  *
132463d483cdSSepherosa Ziehau  * Configures Low Power Link Up on transition to low power states
132563d483cdSSepherosa Ziehau  * (from D0 to non-D0).
132663d483cdSSepherosa Ziehau  **/
ixgbe_enter_lplu(struct ixgbe_hw * hw)132763d483cdSSepherosa Ziehau s32 ixgbe_enter_lplu(struct ixgbe_hw *hw)
132863d483cdSSepherosa Ziehau {
132963d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.enter_lplu, (hw),
133063d483cdSSepherosa Ziehau 				IXGBE_NOT_IMPLEMENTED);
133163d483cdSSepherosa Ziehau }
133263d483cdSSepherosa Ziehau 
133363d483cdSSepherosa Ziehau /**
133463d483cdSSepherosa Ziehau  * ixgbe_handle_lasi - Handle external Base T PHY interrupt
133563d483cdSSepherosa Ziehau  * @hw: pointer to hardware structure
133663d483cdSSepherosa Ziehau  *
133763d483cdSSepherosa Ziehau  * Handle external Base T PHY interrupt. If high temperature
133863d483cdSSepherosa Ziehau  * failure alarm then return error, else if link status change
133963d483cdSSepherosa Ziehau  * then setup internal/external PHY link
134063d483cdSSepherosa Ziehau  *
134163d483cdSSepherosa Ziehau  * Return IXGBE_ERR_OVERTEMP if interrupt is high temperature
134263d483cdSSepherosa Ziehau  * failure alarm, else return PHY access status.
134363d483cdSSepherosa Ziehau  */
ixgbe_handle_lasi(struct ixgbe_hw * hw)134463d483cdSSepherosa Ziehau s32 ixgbe_handle_lasi(struct ixgbe_hw *hw)
134563d483cdSSepherosa Ziehau {
134663d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.handle_lasi, (hw),
134763d483cdSSepherosa Ziehau 				IXGBE_NOT_IMPLEMENTED);
134863d483cdSSepherosa Ziehau }
134979251f5eSSepherosa Ziehau 
135079251f5eSSepherosa Ziehau /**
13516150453fSSepherosa Ziehau  *  ixgbe_bypass_rw - Bit bang data into by_pass FW
13526150453fSSepherosa Ziehau  *  @hw: pointer to hardware structure
13536150453fSSepherosa Ziehau  *  @cmd: Command we send to the FW
13546150453fSSepherosa Ziehau  *  @status: The reply from the FW
13556150453fSSepherosa Ziehau  *
13566150453fSSepherosa Ziehau  *  Bit-bangs the cmd to the by_pass FW status points to what is returned.
13576150453fSSepherosa Ziehau  **/
ixgbe_bypass_rw(struct ixgbe_hw * hw,u32 cmd,u32 * status)13586150453fSSepherosa Ziehau s32 ixgbe_bypass_rw(struct ixgbe_hw *hw, u32 cmd, u32 *status)
13596150453fSSepherosa Ziehau {
13606150453fSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.bypass_rw, (hw, cmd, status),
13616150453fSSepherosa Ziehau 				IXGBE_NOT_IMPLEMENTED);
13626150453fSSepherosa Ziehau }
13636150453fSSepherosa Ziehau 
1364*ea7edc3eSSascha Wildner #if 0
13656150453fSSepherosa Ziehau /**
13666150453fSSepherosa Ziehau  * ixgbe_bypass_valid_rd - Verify valid return from bit-bang.
13676150453fSSepherosa Ziehau  *
13686150453fSSepherosa Ziehau  * If we send a write we can't be sure it took until we can read back
13696150453fSSepherosa Ziehau  * that same register.  It can be a problem as some of the feilds may
13706150453fSSepherosa Ziehau  * for valid reasons change inbetween the time wrote the register and
13716150453fSSepherosa Ziehau  * we read it again to verify.  So this function check everything we
13726150453fSSepherosa Ziehau  * can check and then assumes it worked.
13736150453fSSepherosa Ziehau  *
13746150453fSSepherosa Ziehau  * @u32 in_reg - The register cmd for the bit-bang read.
13756150453fSSepherosa Ziehau  * @u32 out_reg - The register returned from a bit-bang read.
13766150453fSSepherosa Ziehau  **/
13776150453fSSepherosa Ziehau bool ixgbe_bypass_valid_rd(struct ixgbe_hw *hw, u32 in_reg, u32 out_reg)
13786150453fSSepherosa Ziehau {
13796150453fSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.bypass_valid_rd,
13806150453fSSepherosa Ziehau 			       (in_reg, out_reg), IXGBE_NOT_IMPLEMENTED);
13816150453fSSepherosa Ziehau }
1382*ea7edc3eSSascha Wildner #endif
13836150453fSSepherosa Ziehau 
13846150453fSSepherosa Ziehau /**
13856150453fSSepherosa Ziehau  *  ixgbe_bypass_set - Set a bypass field in the FW CTRL Regiter.
13866150453fSSepherosa Ziehau  *  @hw: pointer to hardware structure
13876150453fSSepherosa Ziehau  *  @cmd: The control word we are setting.
13886150453fSSepherosa Ziehau  *  @event: The event we are setting in the FW.  This also happens to
13896150453fSSepherosa Ziehau  *          be the mask for the event we are setting (handy)
13906150453fSSepherosa Ziehau  *  @action: The action we set the event to in the FW. This is in a
13916150453fSSepherosa Ziehau  *           bit field that happens to be what we want to put in
13926150453fSSepherosa Ziehau  *           the event spot (also handy)
13936150453fSSepherosa Ziehau  *
13946150453fSSepherosa Ziehau  *  Writes to the cmd control the bits in actions.
13956150453fSSepherosa Ziehau  **/
ixgbe_bypass_set(struct ixgbe_hw * hw,u32 cmd,u32 event,u32 action)13966150453fSSepherosa Ziehau s32 ixgbe_bypass_set(struct ixgbe_hw *hw, u32 cmd, u32 event, u32 action)
13976150453fSSepherosa Ziehau {
13986150453fSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.bypass_set,
13996150453fSSepherosa Ziehau 			       (hw, cmd, event, action),
14006150453fSSepherosa Ziehau 				IXGBE_NOT_IMPLEMENTED);
14016150453fSSepherosa Ziehau }
14026150453fSSepherosa Ziehau 
14036150453fSSepherosa Ziehau /**
14046150453fSSepherosa Ziehau  *  ixgbe_bypass_rd_eep - Read the bypass FW eeprom address
14056150453fSSepherosa Ziehau  *  @hw: pointer to hardware structure
14066150453fSSepherosa Ziehau  *  @addr: The bypass eeprom address to read.
14076150453fSSepherosa Ziehau  *  @value: The 8b of data at the address above.
14086150453fSSepherosa Ziehau  **/
ixgbe_bypass_rd_eep(struct ixgbe_hw * hw,u32 addr,u8 * value)14096150453fSSepherosa Ziehau s32 ixgbe_bypass_rd_eep(struct ixgbe_hw *hw, u32 addr, u8 *value)
14106150453fSSepherosa Ziehau {
14116150453fSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.bypass_rd_eep,
14126150453fSSepherosa Ziehau 			       (hw, addr, value), IXGBE_NOT_IMPLEMENTED);
14136150453fSSepherosa Ziehau }
14146150453fSSepherosa Ziehau 
14156150453fSSepherosa Ziehau /**
141679251f5eSSepherosa Ziehau  *  ixgbe_read_analog_reg8 - Reads 8 bit analog register
141779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
141879251f5eSSepherosa Ziehau  *  @reg: analog register to read
141979251f5eSSepherosa Ziehau  *  @val: read value
142079251f5eSSepherosa Ziehau  *
142179251f5eSSepherosa Ziehau  *  Performs write operation to analog register specified.
142279251f5eSSepherosa Ziehau  **/
ixgbe_read_analog_reg8(struct ixgbe_hw * hw,u32 reg,u8 * val)142379251f5eSSepherosa Ziehau s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val)
142479251f5eSSepherosa Ziehau {
142579251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg,
142679251f5eSSepherosa Ziehau 			       val), IXGBE_NOT_IMPLEMENTED);
142779251f5eSSepherosa Ziehau }
142879251f5eSSepherosa Ziehau 
142979251f5eSSepherosa Ziehau /**
143079251f5eSSepherosa Ziehau  *  ixgbe_write_analog_reg8 - Writes 8 bit analog register
143179251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
143279251f5eSSepherosa Ziehau  *  @reg: analog register to write
143379251f5eSSepherosa Ziehau  *  @val: value to write
143479251f5eSSepherosa Ziehau  *
143579251f5eSSepherosa Ziehau  *  Performs write operation to Atlas analog register specified.
143679251f5eSSepherosa Ziehau  **/
ixgbe_write_analog_reg8(struct ixgbe_hw * hw,u32 reg,u8 val)143779251f5eSSepherosa Ziehau s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val)
143879251f5eSSepherosa Ziehau {
143979251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg,
144079251f5eSSepherosa Ziehau 			       val), IXGBE_NOT_IMPLEMENTED);
144179251f5eSSepherosa Ziehau }
144279251f5eSSepherosa Ziehau 
144379251f5eSSepherosa Ziehau /**
144479251f5eSSepherosa Ziehau  *  ixgbe_init_uta_tables - Initializes Unicast Table Arrays.
144579251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
144679251f5eSSepherosa Ziehau  *
144779251f5eSSepherosa Ziehau  *  Initializes the Unicast Table Arrays to zero on device load.  This
144879251f5eSSepherosa Ziehau  *  is part of the Rx init addr execution path.
144979251f5eSSepherosa Ziehau  **/
ixgbe_init_uta_tables(struct ixgbe_hw * hw)145079251f5eSSepherosa Ziehau s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw)
145179251f5eSSepherosa Ziehau {
145279251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw),
145379251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
145479251f5eSSepherosa Ziehau }
145579251f5eSSepherosa Ziehau 
145679251f5eSSepherosa Ziehau /**
145779251f5eSSepherosa Ziehau  *  ixgbe_read_i2c_byte - Reads 8 bit word over I2C at specified device address
145879251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
145979251f5eSSepherosa Ziehau  *  @byte_offset: byte offset to read
146063d483cdSSepherosa Ziehau  *  @dev_addr: I2C bus address to read from
146179251f5eSSepherosa Ziehau  *  @data: value read
146279251f5eSSepherosa Ziehau  *
146379251f5eSSepherosa Ziehau  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
146479251f5eSSepherosa Ziehau  **/
ixgbe_read_i2c_byte(struct ixgbe_hw * hw,u8 byte_offset,u8 dev_addr,u8 * data)146579251f5eSSepherosa Ziehau s32 ixgbe_read_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr,
146679251f5eSSepherosa Ziehau 			u8 *data)
146779251f5eSSepherosa Ziehau {
146879251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte, (hw, byte_offset,
146979251f5eSSepherosa Ziehau 			       dev_addr, data), IXGBE_NOT_IMPLEMENTED);
147079251f5eSSepherosa Ziehau }
147179251f5eSSepherosa Ziehau 
147279251f5eSSepherosa Ziehau /**
147363d483cdSSepherosa Ziehau  *  ixgbe_read_i2c_byte_unlocked - Reads 8 bit word via I2C from device address
147463d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
147563d483cdSSepherosa Ziehau  *  @byte_offset: byte offset to read
147663d483cdSSepherosa Ziehau  *  @dev_addr: I2C bus address to read from
147763d483cdSSepherosa Ziehau  *  @data: value read
147863d483cdSSepherosa Ziehau  *
147963d483cdSSepherosa Ziehau  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
148063d483cdSSepherosa Ziehau  **/
ixgbe_read_i2c_byte_unlocked(struct ixgbe_hw * hw,u8 byte_offset,u8 dev_addr,u8 * data)148163d483cdSSepherosa Ziehau s32 ixgbe_read_i2c_byte_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
148263d483cdSSepherosa Ziehau 				 u8 dev_addr, u8 *data)
148363d483cdSSepherosa Ziehau {
148463d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte_unlocked,
148563d483cdSSepherosa Ziehau 			       (hw, byte_offset, dev_addr, data),
148663d483cdSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
148763d483cdSSepherosa Ziehau }
148863d483cdSSepherosa Ziehau 
148963d483cdSSepherosa Ziehau /**
14906150453fSSepherosa Ziehau  * ixgbe_read_link - Perform read operation on link device
149163d483cdSSepherosa Ziehau  * @hw: pointer to the hardware structure
14926150453fSSepherosa Ziehau  * @addr: bus address to read from
14936150453fSSepherosa Ziehau  * @reg: device register to read from
149463d483cdSSepherosa Ziehau  * @val: pointer to location to receive read value
149563d483cdSSepherosa Ziehau  *
149663d483cdSSepherosa Ziehau  * Returns an error code on error.
149763d483cdSSepherosa Ziehau  */
ixgbe_read_link(struct ixgbe_hw * hw,u8 addr,u16 reg,u16 * val)14986150453fSSepherosa Ziehau s32 ixgbe_read_link(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 *val)
149963d483cdSSepherosa Ziehau {
15006150453fSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->link.ops.read_link, (hw, addr,
150163d483cdSSepherosa Ziehau 			       reg, val), IXGBE_NOT_IMPLEMENTED);
150263d483cdSSepherosa Ziehau }
150363d483cdSSepherosa Ziehau 
150463d483cdSSepherosa Ziehau /**
15056150453fSSepherosa Ziehau  * ixgbe_read_link_unlocked - Perform read operation on link device
150663d483cdSSepherosa Ziehau  * @hw: pointer to the hardware structure
15076150453fSSepherosa Ziehau  * @addr: bus address to read from
15086150453fSSepherosa Ziehau  * @reg: device register to read from
150963d483cdSSepherosa Ziehau  * @val: pointer to location to receive read value
151063d483cdSSepherosa Ziehau  *
151163d483cdSSepherosa Ziehau  * Returns an error code on error.
151263d483cdSSepherosa Ziehau  **/
ixgbe_read_link_unlocked(struct ixgbe_hw * hw,u8 addr,u16 reg,u16 * val)15136150453fSSepherosa Ziehau s32 ixgbe_read_link_unlocked(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 *val)
151463d483cdSSepherosa Ziehau {
15156150453fSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->link.ops.read_link_unlocked,
15166150453fSSepherosa Ziehau 			       (hw, addr, reg, val), IXGBE_NOT_IMPLEMENTED);
151763d483cdSSepherosa Ziehau }
151863d483cdSSepherosa Ziehau 
151963d483cdSSepherosa Ziehau /**
152079251f5eSSepherosa Ziehau  *  ixgbe_write_i2c_byte - Writes 8 bit word over I2C
152179251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
152279251f5eSSepherosa Ziehau  *  @byte_offset: byte offset to write
152363d483cdSSepherosa Ziehau  *  @dev_addr: I2C bus address to write to
152479251f5eSSepherosa Ziehau  *  @data: value to write
152579251f5eSSepherosa Ziehau  *
152679251f5eSSepherosa Ziehau  *  Performs byte write operation to SFP module's EEPROM over I2C interface
152779251f5eSSepherosa Ziehau  *  at a specified device address.
152879251f5eSSepherosa Ziehau  **/
ixgbe_write_i2c_byte(struct ixgbe_hw * hw,u8 byte_offset,u8 dev_addr,u8 data)152979251f5eSSepherosa Ziehau s32 ixgbe_write_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr,
153079251f5eSSepherosa Ziehau 			 u8 data)
153179251f5eSSepherosa Ziehau {
153279251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte, (hw, byte_offset,
153379251f5eSSepherosa Ziehau 			       dev_addr, data), IXGBE_NOT_IMPLEMENTED);
153479251f5eSSepherosa Ziehau }
153579251f5eSSepherosa Ziehau 
153679251f5eSSepherosa Ziehau /**
153763d483cdSSepherosa Ziehau  *  ixgbe_write_i2c_byte_unlocked - Writes 8 bit word over I2C
153863d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
153963d483cdSSepherosa Ziehau  *  @byte_offset: byte offset to write
154063d483cdSSepherosa Ziehau  *  @dev_addr: I2C bus address to write to
154163d483cdSSepherosa Ziehau  *  @data: value to write
154263d483cdSSepherosa Ziehau  *
154363d483cdSSepherosa Ziehau  *  Performs byte write operation to SFP module's EEPROM over I2C interface
154463d483cdSSepherosa Ziehau  *  at a specified device address.
154563d483cdSSepherosa Ziehau  **/
ixgbe_write_i2c_byte_unlocked(struct ixgbe_hw * hw,u8 byte_offset,u8 dev_addr,u8 data)154663d483cdSSepherosa Ziehau s32 ixgbe_write_i2c_byte_unlocked(struct ixgbe_hw *hw, u8 byte_offset,
154763d483cdSSepherosa Ziehau 				  u8 dev_addr, u8 data)
154863d483cdSSepherosa Ziehau {
154963d483cdSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte_unlocked,
155063d483cdSSepherosa Ziehau 			       (hw, byte_offset, dev_addr, data),
155163d483cdSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
155263d483cdSSepherosa Ziehau }
155363d483cdSSepherosa Ziehau 
155463d483cdSSepherosa Ziehau /**
15556150453fSSepherosa Ziehau  * ixgbe_write_link - Perform write operation on link device
155663d483cdSSepherosa Ziehau  * @hw: pointer to the hardware structure
15576150453fSSepherosa Ziehau  * @addr: bus address to write to
15586150453fSSepherosa Ziehau  * @reg: device register to write to
155963d483cdSSepherosa Ziehau  * @val: value to write
156063d483cdSSepherosa Ziehau  *
156163d483cdSSepherosa Ziehau  * Returns an error code on error.
156263d483cdSSepherosa Ziehau  */
ixgbe_write_link(struct ixgbe_hw * hw,u8 addr,u16 reg,u16 val)15636150453fSSepherosa Ziehau s32 ixgbe_write_link(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 val)
156463d483cdSSepherosa Ziehau {
15656150453fSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->link.ops.write_link,
15666150453fSSepherosa Ziehau 			       (hw, addr, reg, val), IXGBE_NOT_IMPLEMENTED);
156763d483cdSSepherosa Ziehau }
156863d483cdSSepherosa Ziehau 
156963d483cdSSepherosa Ziehau /**
15706150453fSSepherosa Ziehau  * ixgbe_write_link_unlocked - Perform write operation on link device
157163d483cdSSepherosa Ziehau  * @hw: pointer to the hardware structure
15726150453fSSepherosa Ziehau  * @addr: bus address to write to
15736150453fSSepherosa Ziehau  * @reg: device register to write to
157463d483cdSSepherosa Ziehau  * @val: value to write
157563d483cdSSepherosa Ziehau  *
157663d483cdSSepherosa Ziehau  * Returns an error code on error.
157763d483cdSSepherosa Ziehau  **/
ixgbe_write_link_unlocked(struct ixgbe_hw * hw,u8 addr,u16 reg,u16 val)15786150453fSSepherosa Ziehau s32 ixgbe_write_link_unlocked(struct ixgbe_hw *hw, u8 addr, u16 reg, u16 val)
157963d483cdSSepherosa Ziehau {
15806150453fSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->link.ops.write_link_unlocked,
158163d483cdSSepherosa Ziehau 			       (hw, addr, reg, val), IXGBE_NOT_IMPLEMENTED);
158263d483cdSSepherosa Ziehau }
158363d483cdSSepherosa Ziehau 
158463d483cdSSepherosa Ziehau /**
158579251f5eSSepherosa Ziehau  *  ixgbe_write_i2c_eeprom - Writes 8 bit EEPROM word over I2C interface
158679251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
158779251f5eSSepherosa Ziehau  *  @byte_offset: EEPROM byte offset to write
158879251f5eSSepherosa Ziehau  *  @eeprom_data: value to write
158979251f5eSSepherosa Ziehau  *
159079251f5eSSepherosa Ziehau  *  Performs byte write operation to SFP module's EEPROM over I2C interface.
159179251f5eSSepherosa Ziehau  **/
ixgbe_write_i2c_eeprom(struct ixgbe_hw * hw,u8 byte_offset,u8 eeprom_data)159279251f5eSSepherosa Ziehau s32 ixgbe_write_i2c_eeprom(struct ixgbe_hw *hw,
159379251f5eSSepherosa Ziehau 			   u8 byte_offset, u8 eeprom_data)
159479251f5eSSepherosa Ziehau {
159579251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_eeprom,
159679251f5eSSepherosa Ziehau 			       (hw, byte_offset, eeprom_data),
159779251f5eSSepherosa Ziehau 			       IXGBE_NOT_IMPLEMENTED);
159879251f5eSSepherosa Ziehau }
159979251f5eSSepherosa Ziehau 
160079251f5eSSepherosa Ziehau /**
160179251f5eSSepherosa Ziehau  *  ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface
160279251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
160379251f5eSSepherosa Ziehau  *  @byte_offset: EEPROM byte offset to read
160479251f5eSSepherosa Ziehau  *  @eeprom_data: value read
160579251f5eSSepherosa Ziehau  *
160679251f5eSSepherosa Ziehau  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
160779251f5eSSepherosa Ziehau  **/
ixgbe_read_i2c_eeprom(struct ixgbe_hw * hw,u8 byte_offset,u8 * eeprom_data)160879251f5eSSepherosa Ziehau s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data)
160979251f5eSSepherosa Ziehau {
161079251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom,
161179251f5eSSepherosa Ziehau 			      (hw, byte_offset, eeprom_data),
161279251f5eSSepherosa Ziehau 			      IXGBE_NOT_IMPLEMENTED);
161379251f5eSSepherosa Ziehau }
161479251f5eSSepherosa Ziehau 
161579251f5eSSepherosa Ziehau /**
161679251f5eSSepherosa Ziehau  *  ixgbe_get_supported_physical_layer - Returns physical layer type
161779251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
161879251f5eSSepherosa Ziehau  *
161979251f5eSSepherosa Ziehau  *  Determines physical layer capabilities of the current configuration.
162079251f5eSSepherosa Ziehau  **/
ixgbe_get_supported_physical_layer(struct ixgbe_hw * hw)16216150453fSSepherosa Ziehau u64 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw)
162279251f5eSSepherosa Ziehau {
162379251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer,
162479251f5eSSepherosa Ziehau 			       (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN);
162579251f5eSSepherosa Ziehau }
162679251f5eSSepherosa Ziehau 
162779251f5eSSepherosa Ziehau /**
162879251f5eSSepherosa Ziehau  *  ixgbe_enable_rx_dma - Enables Rx DMA unit, dependent on device specifics
162979251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
163079251f5eSSepherosa Ziehau  *  @regval: bitfield to write to the Rx DMA register
163179251f5eSSepherosa Ziehau  *
163279251f5eSSepherosa Ziehau  *  Enables the Rx DMA unit of the device.
163379251f5eSSepherosa Ziehau  **/
ixgbe_enable_rx_dma(struct ixgbe_hw * hw,u32 regval)163479251f5eSSepherosa Ziehau s32 ixgbe_enable_rx_dma(struct ixgbe_hw *hw, u32 regval)
163579251f5eSSepherosa Ziehau {
163679251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.enable_rx_dma,
163779251f5eSSepherosa Ziehau 			       (hw, regval), IXGBE_NOT_IMPLEMENTED);
163879251f5eSSepherosa Ziehau }
163979251f5eSSepherosa Ziehau 
164079251f5eSSepherosa Ziehau /**
164179251f5eSSepherosa Ziehau  *  ixgbe_disable_sec_rx_path - Stops the receive data path
164279251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
164379251f5eSSepherosa Ziehau  *
164479251f5eSSepherosa Ziehau  *  Stops the receive data path.
164579251f5eSSepherosa Ziehau  **/
ixgbe_disable_sec_rx_path(struct ixgbe_hw * hw)164679251f5eSSepherosa Ziehau s32 ixgbe_disable_sec_rx_path(struct ixgbe_hw *hw)
164779251f5eSSepherosa Ziehau {
164879251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.disable_sec_rx_path,
164979251f5eSSepherosa Ziehau 				(hw), IXGBE_NOT_IMPLEMENTED);
165079251f5eSSepherosa Ziehau }
165179251f5eSSepherosa Ziehau 
165279251f5eSSepherosa Ziehau /**
165379251f5eSSepherosa Ziehau  *  ixgbe_enable_sec_rx_path - Enables the receive data path
165479251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
165579251f5eSSepherosa Ziehau  *
165679251f5eSSepherosa Ziehau  *  Enables the receive data path.
165779251f5eSSepherosa Ziehau  **/
ixgbe_enable_sec_rx_path(struct ixgbe_hw * hw)165879251f5eSSepherosa Ziehau s32 ixgbe_enable_sec_rx_path(struct ixgbe_hw *hw)
165979251f5eSSepherosa Ziehau {
166079251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.enable_sec_rx_path,
166179251f5eSSepherosa Ziehau 				(hw), IXGBE_NOT_IMPLEMENTED);
166279251f5eSSepherosa Ziehau }
166379251f5eSSepherosa Ziehau 
166479251f5eSSepherosa Ziehau /**
166579251f5eSSepherosa Ziehau  *  ixgbe_acquire_swfw_semaphore - Acquire SWFW semaphore
166679251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
166779251f5eSSepherosa Ziehau  *  @mask: Mask to specify which semaphore to acquire
166879251f5eSSepherosa Ziehau  *
166979251f5eSSepherosa Ziehau  *  Acquires the SWFW semaphore through SW_FW_SYNC register for the specified
167079251f5eSSepherosa Ziehau  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
167179251f5eSSepherosa Ziehau  **/
ixgbe_acquire_swfw_semaphore(struct ixgbe_hw * hw,u32 mask)167263d483cdSSepherosa Ziehau s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u32 mask)
167379251f5eSSepherosa Ziehau {
167479251f5eSSepherosa Ziehau 	return ixgbe_call_func(hw, hw->mac.ops.acquire_swfw_sync,
167579251f5eSSepherosa Ziehau 			       (hw, mask), IXGBE_NOT_IMPLEMENTED);
167679251f5eSSepherosa Ziehau }
167779251f5eSSepherosa Ziehau 
167879251f5eSSepherosa Ziehau /**
167979251f5eSSepherosa Ziehau  *  ixgbe_release_swfw_semaphore - Release SWFW semaphore
168079251f5eSSepherosa Ziehau  *  @hw: pointer to hardware structure
168179251f5eSSepherosa Ziehau  *  @mask: Mask to specify which semaphore to release
168279251f5eSSepherosa Ziehau  *
168379251f5eSSepherosa Ziehau  *  Releases the SWFW semaphore through SW_FW_SYNC register for the specified
168479251f5eSSepherosa Ziehau  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
168579251f5eSSepherosa Ziehau  **/
ixgbe_release_swfw_semaphore(struct ixgbe_hw * hw,u32 mask)168663d483cdSSepherosa Ziehau void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u32 mask)
168779251f5eSSepherosa Ziehau {
168879251f5eSSepherosa Ziehau 	if (hw->mac.ops.release_swfw_sync)
168979251f5eSSepherosa Ziehau 		hw->mac.ops.release_swfw_sync(hw, mask);
169079251f5eSSepherosa Ziehau }
169179251f5eSSepherosa Ziehau 
16926150453fSSepherosa Ziehau /**
16936150453fSSepherosa Ziehau  *  ixgbe_init_swfw_semaphore - Clean up SWFW semaphore
16946150453fSSepherosa Ziehau  *  @hw: pointer to hardware structure
16956150453fSSepherosa Ziehau  *
16966150453fSSepherosa Ziehau  *  Attempts to acquire the SWFW semaphore through SW_FW_SYNC register.
16976150453fSSepherosa Ziehau  *  Regardless of whether is succeeds or not it then release the semaphore.
16986150453fSSepherosa Ziehau  *  This is function is called to recover from catastrophic failures that
16996150453fSSepherosa Ziehau  *  may have left the semaphore locked.
17006150453fSSepherosa Ziehau  **/
ixgbe_init_swfw_semaphore(struct ixgbe_hw * hw)17016150453fSSepherosa Ziehau void ixgbe_init_swfw_semaphore(struct ixgbe_hw *hw)
17026150453fSSepherosa Ziehau {
17036150453fSSepherosa Ziehau 	if (hw->mac.ops.init_swfw_sync)
17046150453fSSepherosa Ziehau 		hw->mac.ops.init_swfw_sync(hw);
17056150453fSSepherosa Ziehau }
17066150453fSSepherosa Ziehau 
170763d483cdSSepherosa Ziehau 
ixgbe_disable_rx(struct ixgbe_hw * hw)170863d483cdSSepherosa Ziehau void ixgbe_disable_rx(struct ixgbe_hw *hw)
170963d483cdSSepherosa Ziehau {
171063d483cdSSepherosa Ziehau 	if (hw->mac.ops.disable_rx)
171163d483cdSSepherosa Ziehau 		hw->mac.ops.disable_rx(hw);
171263d483cdSSepherosa Ziehau }
171363d483cdSSepherosa Ziehau 
ixgbe_enable_rx(struct ixgbe_hw * hw)171463d483cdSSepherosa Ziehau void ixgbe_enable_rx(struct ixgbe_hw *hw)
171563d483cdSSepherosa Ziehau {
171663d483cdSSepherosa Ziehau 	if (hw->mac.ops.enable_rx)
171763d483cdSSepherosa Ziehau 		hw->mac.ops.enable_rx(hw);
171863d483cdSSepherosa Ziehau }
171963d483cdSSepherosa Ziehau 
172063d483cdSSepherosa Ziehau /**
172163d483cdSSepherosa Ziehau  *  ixgbe_set_rate_select_speed - Set module link speed
172263d483cdSSepherosa Ziehau  *  @hw: pointer to hardware structure
172363d483cdSSepherosa Ziehau  *  @speed: link speed to set
172463d483cdSSepherosa Ziehau  *
172563d483cdSSepherosa Ziehau  *  Set module link speed via the rate select.
172663d483cdSSepherosa Ziehau  */
ixgbe_set_rate_select_speed(struct ixgbe_hw * hw,ixgbe_link_speed speed)172763d483cdSSepherosa Ziehau void ixgbe_set_rate_select_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed)
172863d483cdSSepherosa Ziehau {
172963d483cdSSepherosa Ziehau 	if (hw->mac.ops.set_rate_select_speed)
173063d483cdSSepherosa Ziehau 		hw->mac.ops.set_rate_select_speed(hw, speed);
173163d483cdSSepherosa Ziehau }
1732