xref: /freebsd/sys/dev/ixgbe/ixgbe_api.c (revision fd75b91d)
19ca4041bSJack F Vogel /******************************************************************************
213705f88SJack F Vogel 
30ecc2ff0SJack F Vogel   Copyright (c) 2001-2013, Intel Corporation
413705f88SJack F Vogel   All rights reserved.
513705f88SJack F Vogel 
613705f88SJack F Vogel   Redistribution and use in source and binary forms, with or without
713705f88SJack F Vogel   modification, are permitted provided that the following conditions are met:
813705f88SJack F Vogel 
913705f88SJack F Vogel    1. Redistributions of source code must retain the above copyright notice,
1013705f88SJack F Vogel       this list of conditions and the following disclaimer.
1113705f88SJack F Vogel 
1213705f88SJack F Vogel    2. Redistributions in binary form must reproduce the above copyright
1313705f88SJack F Vogel       notice, this list of conditions and the following disclaimer in the
1413705f88SJack F Vogel       documentation and/or other materials provided with the distribution.
1513705f88SJack F Vogel 
1613705f88SJack F Vogel    3. Neither the name of the Intel Corporation nor the names of its
1713705f88SJack F Vogel       contributors may be used to endorse or promote products derived from
1813705f88SJack F Vogel       this software without specific prior written permission.
1913705f88SJack F Vogel 
2013705f88SJack F Vogel   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2113705f88SJack F Vogel   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2213705f88SJack F Vogel   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2313705f88SJack F Vogel   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
2413705f88SJack F Vogel   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2513705f88SJack F Vogel   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2613705f88SJack F Vogel   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2713705f88SJack F Vogel   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2813705f88SJack F Vogel   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2913705f88SJack F Vogel   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3013705f88SJack F Vogel   POSSIBILITY OF SUCH DAMAGE.
3113705f88SJack F Vogel 
329ca4041bSJack F Vogel ******************************************************************************/
3313705f88SJack F Vogel /*$FreeBSD$*/
3413705f88SJack F Vogel 
3513705f88SJack F Vogel #include "ixgbe_api.h"
3613705f88SJack F Vogel #include "ixgbe_common.h"
3713705f88SJack F Vogel 
3813705f88SJack F Vogel /**
39fd75b91dSJack F Vogel  * ixgbe_dcb_get_rtrup2tc - read rtrup2tc reg
40fd75b91dSJack F Vogel  * @hw: pointer to hardware structure
41fd75b91dSJack F Vogel  * @map: pointer to u8 arr for returning map
42fd75b91dSJack F Vogel  *
43fd75b91dSJack F Vogel  * Read the rtrup2tc HW register and resolve its content into map
44fd75b91dSJack F Vogel  **/
45fd75b91dSJack F Vogel void ixgbe_dcb_get_rtrup2tc(struct ixgbe_hw *hw, u8 *map)
46fd75b91dSJack F Vogel {
47fd75b91dSJack F Vogel 	if (hw->mac.ops.get_rtrup2tc)
48fd75b91dSJack F Vogel 		hw->mac.ops.get_rtrup2tc(hw, map);
49fd75b91dSJack F Vogel }
50fd75b91dSJack F Vogel 
51fd75b91dSJack F Vogel /**
5213705f88SJack F Vogel  *  ixgbe_init_shared_code - Initialize the shared code
5313705f88SJack F Vogel  *  @hw: pointer to hardware structure
5413705f88SJack F Vogel  *
5513705f88SJack F Vogel  *  This will assign function pointers and assign the MAC type and PHY code.
5613705f88SJack F Vogel  *  Does not touch the hardware. This function must be called prior to any
5713705f88SJack F Vogel  *  other function in the shared code. The ixgbe_hw structure should be
5813705f88SJack F Vogel  *  memset to 0 prior to calling this function.  The following fields in
5913705f88SJack F Vogel  *  hw structure should be filled in prior to calling this function:
6013705f88SJack F Vogel  *  hw_addr, back, device_id, vendor_id, subsystem_device_id,
6113705f88SJack F Vogel  *  subsystem_vendor_id, and revision_id
6213705f88SJack F Vogel  **/
6313705f88SJack F Vogel s32 ixgbe_init_shared_code(struct ixgbe_hw *hw)
6413705f88SJack F Vogel {
653ec35e52SJack F Vogel 	s32 status;
6613705f88SJack F Vogel 
672969bf0eSJack F Vogel 	DEBUGFUNC("ixgbe_init_shared_code");
682969bf0eSJack F Vogel 
6913705f88SJack F Vogel 	/*
703ec35e52SJack F Vogel 	 * Set the mac type
713ec35e52SJack F Vogel 	 */
723ec35e52SJack F Vogel 	ixgbe_set_mac_type(hw);
733ec35e52SJack F Vogel 
743ec35e52SJack F Vogel 	switch (hw->mac.type) {
753ec35e52SJack F Vogel 	case ixgbe_mac_82598EB:
769ca4041bSJack F Vogel 		status = ixgbe_init_ops_82598(hw);
7713705f88SJack F Vogel 		break;
780ac6dfecSJack F Vogel 	case ixgbe_mac_82599EB:
790ac6dfecSJack F Vogel 		status = ixgbe_init_ops_82599(hw);
800ac6dfecSJack F Vogel 		break;
811a4e3449SJack F Vogel 	case ixgbe_mac_82599_vf:
8285d0a26eSJack F Vogel 	case ixgbe_mac_X540_vf:
831a4e3449SJack F Vogel 		status = ixgbe_init_ops_vf(hw);
841a4e3449SJack F Vogel 		break;
8585d0a26eSJack F Vogel 	case ixgbe_mac_X540:
8685d0a26eSJack F Vogel 		status = ixgbe_init_ops_X540(hw);
8785d0a26eSJack F Vogel 		break;
8813705f88SJack F Vogel 	default:
8913705f88SJack F Vogel 		status = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
9013705f88SJack F Vogel 		break;
9113705f88SJack F Vogel 	}
9213705f88SJack F Vogel 
9313705f88SJack F Vogel 	return status;
9413705f88SJack F Vogel }
9513705f88SJack F Vogel 
9613705f88SJack F Vogel /**
973ec35e52SJack F Vogel  *  ixgbe_set_mac_type - Sets MAC type
983ec35e52SJack F Vogel  *  @hw: pointer to the HW structure
993ec35e52SJack F Vogel  *
1003ec35e52SJack F Vogel  *  This function sets the mac type of the adapter based on the
1013ec35e52SJack F Vogel  *  vendor ID and device ID stored in the hw structure.
1023ec35e52SJack F Vogel  **/
1033ec35e52SJack F Vogel s32 ixgbe_set_mac_type(struct ixgbe_hw *hw)
1043ec35e52SJack F Vogel {
1053ec35e52SJack F Vogel 	s32 ret_val = IXGBE_SUCCESS;
1063ec35e52SJack F Vogel 
1079ca4041bSJack F Vogel 	DEBUGFUNC("ixgbe_set_mac_type\n");
1083ec35e52SJack F Vogel 
109fd75b91dSJack F Vogel 	if (hw->vendor_id != IXGBE_INTEL_VENDOR_ID) {
110fd75b91dSJack F Vogel 		ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED,
111fd75b91dSJack F Vogel 			     "Unsupported vendor id: %x", hw->vendor_id);
112fd75b91dSJack F Vogel 		return IXGBE_ERR_DEVICE_NOT_SUPPORTED;
113fd75b91dSJack F Vogel 	}
114fd75b91dSJack F Vogel 
1153ec35e52SJack F Vogel 	switch (hw->device_id) {
1161b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598:
1170ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82598_BX:
1183ec35e52SJack F Vogel 	case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
1193ec35e52SJack F Vogel 	case IXGBE_DEV_ID_82598AF_DUAL_PORT:
1209ca4041bSJack F Vogel 	case IXGBE_DEV_ID_82598AT:
1212969bf0eSJack F Vogel 	case IXGBE_DEV_ID_82598AT2:
1223ec35e52SJack F Vogel 	case IXGBE_DEV_ID_82598EB_CX4:
1239ca4041bSJack F Vogel 	case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
1241b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
1251b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
1269ca4041bSJack F Vogel 	case IXGBE_DEV_ID_82598EB_XF_LR:
1271b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598EB_SFP_LOM:
1283ec35e52SJack F Vogel 		hw->mac.type = ixgbe_mac_82598EB;
1293ec35e52SJack F Vogel 		break;
1300ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82599_KX4:
1312969bf0eSJack F Vogel 	case IXGBE_DEV_ID_82599_KX4_MEZZ:
132d8602bb9SJack F Vogel 	case IXGBE_DEV_ID_82599_XAUI_LOM:
1332969bf0eSJack F Vogel 	case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:
13485d0a26eSJack F Vogel 	case IXGBE_DEV_ID_82599_KR:
1350ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82599_SFP:
1361a4e3449SJack F Vogel 	case IXGBE_DEV_ID_82599_BACKPLANE_FCOE:
1371a4e3449SJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_FCOE:
13885d0a26eSJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_EM:
139a621e3c8SJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_SF2:
1400ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_SF_QP:
14185d0a26eSJack F Vogel 	case IXGBE_DEV_ID_82599EN_SFP:
1420ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82599_CX4:
1430ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_82599_BYPASS:
144c0014855SJack F Vogel 	case IXGBE_DEV_ID_82599_T3_LOM:
1450ac6dfecSJack F Vogel 		hw->mac.type = ixgbe_mac_82599EB;
1460ac6dfecSJack F Vogel 		break;
1471a4e3449SJack F Vogel 	case IXGBE_DEV_ID_82599_VF:
1480ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_82599_VF_HV:
1491a4e3449SJack F Vogel 		hw->mac.type = ixgbe_mac_82599_vf;
1501a4e3449SJack F Vogel 		break;
15185d0a26eSJack F Vogel 	case IXGBE_DEV_ID_X540_VF:
1520ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_X540_VF_HV:
15385d0a26eSJack F Vogel 		hw->mac.type = ixgbe_mac_X540_vf;
15485d0a26eSJack F Vogel 		break;
15585d0a26eSJack F Vogel 	case IXGBE_DEV_ID_X540T:
1560ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_X540_BYPASS:
15785d0a26eSJack F Vogel 		hw->mac.type = ixgbe_mac_X540;
15885d0a26eSJack F Vogel 		break;
1593ec35e52SJack F Vogel 	default:
1603ec35e52SJack F Vogel 		ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
161fd75b91dSJack F Vogel 		ERROR_REPORT2(IXGBE_ERROR_UNSUPPORTED,
162fd75b91dSJack F Vogel 			     "Unsupported device id: %x",
163fd75b91dSJack F Vogel 			     hw->device_id);
1643ec35e52SJack F Vogel 		break;
1653ec35e52SJack F Vogel 	}
1663ec35e52SJack F Vogel 
1679ca4041bSJack F Vogel 	DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n",
1689ca4041bSJack F Vogel 		  hw->mac.type, ret_val);
1693ec35e52SJack F Vogel 	return ret_val;
1703ec35e52SJack F Vogel }
1713ec35e52SJack F Vogel 
1723ec35e52SJack F Vogel /**
17313705f88SJack F Vogel  *  ixgbe_init_hw - Initialize the hardware
17413705f88SJack F Vogel  *  @hw: pointer to hardware structure
17513705f88SJack F Vogel  *
17613705f88SJack F Vogel  *  Initialize the hardware by resetting and then starting the hardware
17713705f88SJack F Vogel  **/
17813705f88SJack F Vogel s32 ixgbe_init_hw(struct ixgbe_hw *hw)
17913705f88SJack F Vogel {
1809ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw),
18113705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
18213705f88SJack F Vogel }
18313705f88SJack F Vogel 
18413705f88SJack F Vogel /**
18513705f88SJack F Vogel  *  ixgbe_reset_hw - Performs a hardware reset
18613705f88SJack F Vogel  *  @hw: pointer to hardware structure
18713705f88SJack F Vogel  *
18813705f88SJack F Vogel  *  Resets the hardware by resetting the transmit and receive units, masks and
18913705f88SJack F Vogel  *  clears all interrupts, performs a PHY reset, and performs a MAC reset
19013705f88SJack F Vogel  **/
19113705f88SJack F Vogel s32 ixgbe_reset_hw(struct ixgbe_hw *hw)
19213705f88SJack F Vogel {
1939ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw),
19413705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
19513705f88SJack F Vogel }
19613705f88SJack F Vogel 
19713705f88SJack F Vogel /**
1989ca4041bSJack F Vogel  *  ixgbe_start_hw - Prepares hardware for Rx/Tx
19913705f88SJack F Vogel  *  @hw: pointer to hardware structure
20013705f88SJack F Vogel  *
20113705f88SJack F Vogel  *  Starts the hardware by filling the bus info structure and media type,
20213705f88SJack F Vogel  *  clears all on chip counters, initializes receive address registers,
20313705f88SJack F Vogel  *  multicast table, VLAN filter table, calls routine to setup link and
20413705f88SJack F Vogel  *  flow control settings, and leaves transmit and receive units disabled
20513705f88SJack F Vogel  *  and uninitialized.
20613705f88SJack F Vogel  **/
20713705f88SJack F Vogel s32 ixgbe_start_hw(struct ixgbe_hw *hw)
20813705f88SJack F Vogel {
2099ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw),
21013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
21113705f88SJack F Vogel }
21213705f88SJack F Vogel 
21313705f88SJack F Vogel /**
214c0014855SJack F Vogel  *  ixgbe_enable_relaxed_ordering - Enables tx relaxed ordering,
215c0014855SJack F Vogel  *  which is disabled by default in ixgbe_start_hw();
216c0014855SJack F Vogel  *
217c0014855SJack F Vogel  *  @hw: pointer to hardware structure
218c0014855SJack F Vogel  *
219c0014855SJack F Vogel  *   Enable relaxed ordering;
220c0014855SJack F Vogel  **/
221c0014855SJack F Vogel void ixgbe_enable_relaxed_ordering(struct ixgbe_hw *hw)
222c0014855SJack F Vogel {
223c0014855SJack F Vogel 	if (hw->mac.ops.enable_relaxed_ordering)
224c0014855SJack F Vogel 		hw->mac.ops.enable_relaxed_ordering(hw);
225c0014855SJack F Vogel }
226c0014855SJack F Vogel 
227c0014855SJack F Vogel /**
22813705f88SJack F Vogel  *  ixgbe_clear_hw_cntrs - Clear hardware counters
22913705f88SJack F Vogel  *  @hw: pointer to hardware structure
23013705f88SJack F Vogel  *
23113705f88SJack F Vogel  *  Clears all hardware statistics counters by reading them from the hardware
23213705f88SJack F Vogel  *  Statistics counters are clear on read.
23313705f88SJack F Vogel  **/
23413705f88SJack F Vogel s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw)
23513705f88SJack F Vogel {
2369ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw),
23713705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
23813705f88SJack F Vogel }
23913705f88SJack F Vogel 
24013705f88SJack F Vogel /**
24113705f88SJack F Vogel  *  ixgbe_get_media_type - Get media type
24213705f88SJack F Vogel  *  @hw: pointer to hardware structure
24313705f88SJack F Vogel  *
24413705f88SJack F Vogel  *  Returns the media type (fiber, copper, backplane)
24513705f88SJack F Vogel  **/
24613705f88SJack F Vogel enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw)
24713705f88SJack F Vogel {
2489ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw),
24913705f88SJack F Vogel 			       ixgbe_media_type_unknown);
25013705f88SJack F Vogel }
25113705f88SJack F Vogel 
25213705f88SJack F Vogel /**
25313705f88SJack F Vogel  *  ixgbe_get_mac_addr - Get MAC address
25413705f88SJack F Vogel  *  @hw: pointer to hardware structure
25513705f88SJack F Vogel  *  @mac_addr: Adapter MAC address
25613705f88SJack F Vogel  *
25713705f88SJack F Vogel  *  Reads the adapter's MAC address from the first Receive Address Register
2589ca4041bSJack F Vogel  *  (RAR0) A reset of the adapter must have been performed prior to calling
2599ca4041bSJack F Vogel  *  this function in order for the MAC address to have been loaded from the
2609ca4041bSJack F Vogel  *  EEPROM into RAR0
26113705f88SJack F Vogel  **/
26213705f88SJack F Vogel s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr)
26313705f88SJack F Vogel {
2649ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr,
26513705f88SJack F Vogel 			       (hw, mac_addr), IXGBE_NOT_IMPLEMENTED);
26613705f88SJack F Vogel }
26713705f88SJack F Vogel 
26813705f88SJack F Vogel /**
2690ac6dfecSJack F Vogel  *  ixgbe_get_san_mac_addr - Get SAN MAC address
2700ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
2710ac6dfecSJack F Vogel  *  @san_mac_addr: SAN MAC address
2720ac6dfecSJack F Vogel  *
2730ac6dfecSJack F Vogel  *  Reads the SAN MAC address from the EEPROM, if it's available.  This is
2740ac6dfecSJack F Vogel  *  per-port, so set_lan_id() must be called before reading the addresses.
2750ac6dfecSJack F Vogel  **/
2760ac6dfecSJack F Vogel s32 ixgbe_get_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr)
2770ac6dfecSJack F Vogel {
2780ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_san_mac_addr,
2790ac6dfecSJack F Vogel 			       (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED);
2800ac6dfecSJack F Vogel }
2810ac6dfecSJack F Vogel 
2820ac6dfecSJack F Vogel /**
2830ac6dfecSJack F Vogel  *  ixgbe_set_san_mac_addr - Write a SAN MAC address
2840ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
2850ac6dfecSJack F Vogel  *  @san_mac_addr: SAN MAC address
2860ac6dfecSJack F Vogel  *
2870ac6dfecSJack F Vogel  *  Writes A SAN MAC address to the EEPROM.
2880ac6dfecSJack F Vogel  **/
2890ac6dfecSJack F Vogel s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr)
2900ac6dfecSJack F Vogel {
2910ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_san_mac_addr,
2920ac6dfecSJack F Vogel 			       (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED);
2930ac6dfecSJack F Vogel }
2940ac6dfecSJack F Vogel 
2950ac6dfecSJack F Vogel /**
2960ac6dfecSJack F Vogel  *  ixgbe_get_device_caps - Get additional device capabilities
2970ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
2980ac6dfecSJack F Vogel  *  @device_caps: the EEPROM word for device capabilities
2990ac6dfecSJack F Vogel  *
3000ac6dfecSJack F Vogel  *  Reads the extra device capabilities from the EEPROM
3010ac6dfecSJack F Vogel  **/
3020ac6dfecSJack F Vogel s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps)
3030ac6dfecSJack F Vogel {
3040ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_device_caps,
3050ac6dfecSJack F Vogel 			       (hw, device_caps), IXGBE_NOT_IMPLEMENTED);
3060ac6dfecSJack F Vogel }
3070ac6dfecSJack F Vogel 
3080ac6dfecSJack F Vogel /**
3092969bf0eSJack F Vogel  *  ixgbe_get_wwn_prefix - Get alternative WWNN/WWPN prefix from the EEPROM
3102969bf0eSJack F Vogel  *  @hw: pointer to hardware structure
3112969bf0eSJack F Vogel  *  @wwnn_prefix: the alternative WWNN prefix
3122969bf0eSJack F Vogel  *  @wwpn_prefix: the alternative WWPN prefix
3132969bf0eSJack F Vogel  *
3142969bf0eSJack F Vogel  *  This function will read the EEPROM from the alternative SAN MAC address
3152969bf0eSJack F Vogel  *  block to check the support for the alternative WWNN/WWPN prefix support.
3162969bf0eSJack F Vogel  **/
3172969bf0eSJack F Vogel s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix,
3182969bf0eSJack F Vogel 			 u16 *wwpn_prefix)
3192969bf0eSJack F Vogel {
3202969bf0eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_wwn_prefix,
3212969bf0eSJack F Vogel 			       (hw, wwnn_prefix, wwpn_prefix),
3222969bf0eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
3232969bf0eSJack F Vogel }
3242969bf0eSJack F Vogel 
3252969bf0eSJack F Vogel /**
3261a4e3449SJack F Vogel  *  ixgbe_get_fcoe_boot_status -  Get FCOE boot status from EEPROM
3271a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
3281a4e3449SJack F Vogel  *  @bs: the fcoe boot status
3291a4e3449SJack F Vogel  *
3301a4e3449SJack F Vogel  *  This function will read the FCOE boot status from the iSCSI FCOE block
3311a4e3449SJack F Vogel  **/
3321a4e3449SJack F Vogel s32 ixgbe_get_fcoe_boot_status(struct ixgbe_hw *hw, u16 *bs)
3331a4e3449SJack F Vogel {
3341a4e3449SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_fcoe_boot_status,
3351a4e3449SJack F Vogel 			       (hw, bs),
3361a4e3449SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
3371a4e3449SJack F Vogel }
3381a4e3449SJack F Vogel 
3391a4e3449SJack F Vogel /**
34013705f88SJack F Vogel  *  ixgbe_get_bus_info - Set PCI bus info
34113705f88SJack F Vogel  *  @hw: pointer to hardware structure
34213705f88SJack F Vogel  *
34313705f88SJack F Vogel  *  Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure
34413705f88SJack F Vogel  **/
34513705f88SJack F Vogel s32 ixgbe_get_bus_info(struct ixgbe_hw *hw)
34613705f88SJack F Vogel {
3479ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw),
34813705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
34913705f88SJack F Vogel }
35013705f88SJack F Vogel 
35113705f88SJack F Vogel /**
3529ca4041bSJack F Vogel  *  ixgbe_get_num_of_tx_queues - Get Tx queues
35313705f88SJack F Vogel  *  @hw: pointer to hardware structure
35413705f88SJack F Vogel  *
35513705f88SJack F Vogel  *  Returns the number of transmit queues for the given adapter.
35613705f88SJack F Vogel  **/
35713705f88SJack F Vogel u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw)
35813705f88SJack F Vogel {
3599ca4041bSJack F Vogel 	return hw->mac.max_tx_queues;
36013705f88SJack F Vogel }
36113705f88SJack F Vogel 
36213705f88SJack F Vogel /**
3639ca4041bSJack F Vogel  *  ixgbe_get_num_of_rx_queues - Get Rx queues
36413705f88SJack F Vogel  *  @hw: pointer to hardware structure
36513705f88SJack F Vogel  *
36613705f88SJack F Vogel  *  Returns the number of receive queues for the given adapter.
36713705f88SJack F Vogel  **/
36813705f88SJack F Vogel u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw)
36913705f88SJack F Vogel {
3709ca4041bSJack F Vogel 	return hw->mac.max_rx_queues;
37113705f88SJack F Vogel }
37213705f88SJack F Vogel 
37313705f88SJack F Vogel /**
3749ca4041bSJack F Vogel  *  ixgbe_stop_adapter - Disable Rx/Tx units
37513705f88SJack F Vogel  *  @hw: pointer to hardware structure
37613705f88SJack F Vogel  *
37713705f88SJack F Vogel  *  Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts,
37813705f88SJack F Vogel  *  disables transmit and receive units. The adapter_stopped flag is used by
37913705f88SJack F Vogel  *  the shared code and drivers to determine if the adapter is in a stopped
38013705f88SJack F Vogel  *  state and should not touch the hardware.
38113705f88SJack F Vogel  **/
38213705f88SJack F Vogel s32 ixgbe_stop_adapter(struct ixgbe_hw *hw)
38313705f88SJack F Vogel {
3849ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw),
38513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
38613705f88SJack F Vogel }
38713705f88SJack F Vogel 
38813705f88SJack F Vogel /**
3891a4e3449SJack F Vogel  *  ixgbe_read_pba_string - Reads part number string from EEPROM
3901a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
3911a4e3449SJack F Vogel  *  @pba_num: stores the part number string from the EEPROM
3921a4e3449SJack F Vogel  *  @pba_num_size: part number string buffer length
3931a4e3449SJack F Vogel  *
3941a4e3449SJack F Vogel  *  Reads the part number string from the EEPROM.
3951a4e3449SJack F Vogel  **/
3961a4e3449SJack F Vogel s32 ixgbe_read_pba_string(struct ixgbe_hw *hw, u8 *pba_num, u32 pba_num_size)
3971a4e3449SJack F Vogel {
3981a4e3449SJack F Vogel 	return ixgbe_read_pba_string_generic(hw, pba_num, pba_num_size);
3991a4e3449SJack F Vogel }
4001a4e3449SJack F Vogel 
4011a4e3449SJack F Vogel /**
4029ca4041bSJack F Vogel  *  ixgbe_read_pba_num - Reads part number from EEPROM
4039ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
4049ca4041bSJack F Vogel  *  @pba_num: stores the part number from the EEPROM
4059ca4041bSJack F Vogel  *
4069ca4041bSJack F Vogel  *  Reads the part number from the EEPROM.
4079ca4041bSJack F Vogel  **/
4089ca4041bSJack F Vogel s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num)
4099ca4041bSJack F Vogel {
4109ca4041bSJack F Vogel 	return ixgbe_read_pba_num_generic(hw, pba_num);
4119ca4041bSJack F Vogel }
4129ca4041bSJack F Vogel 
4139ca4041bSJack F Vogel /**
41413705f88SJack F Vogel  *  ixgbe_identify_phy - Get PHY type
41513705f88SJack F Vogel  *  @hw: pointer to hardware structure
41613705f88SJack F Vogel  *
41713705f88SJack F Vogel  *  Determines the physical layer module found on the current adapter.
41813705f88SJack F Vogel  **/
41913705f88SJack F Vogel s32 ixgbe_identify_phy(struct ixgbe_hw *hw)
42013705f88SJack F Vogel {
42113705f88SJack F Vogel 	s32 status = IXGBE_SUCCESS;
42213705f88SJack F Vogel 
42313705f88SJack F Vogel 	if (hw->phy.type == ixgbe_phy_unknown) {
4241a4e3449SJack F Vogel 		status = ixgbe_call_func(hw, hw->phy.ops.identify, (hw),
42513705f88SJack F Vogel 					 IXGBE_NOT_IMPLEMENTED);
42613705f88SJack F Vogel 	}
42713705f88SJack F Vogel 
42813705f88SJack F Vogel 	return status;
42913705f88SJack F Vogel }
43013705f88SJack F Vogel 
43113705f88SJack F Vogel /**
43213705f88SJack F Vogel  *  ixgbe_reset_phy - Perform a PHY reset
43313705f88SJack F Vogel  *  @hw: pointer to hardware structure
43413705f88SJack F Vogel  **/
43513705f88SJack F Vogel s32 ixgbe_reset_phy(struct ixgbe_hw *hw)
43613705f88SJack F Vogel {
43713705f88SJack F Vogel 	s32 status = IXGBE_SUCCESS;
43813705f88SJack F Vogel 
43913705f88SJack F Vogel 	if (hw->phy.type == ixgbe_phy_unknown) {
4401b6e0dbaSJack F Vogel 		if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS)
44113705f88SJack F Vogel 			status = IXGBE_ERR_PHY;
44213705f88SJack F Vogel 	}
44313705f88SJack F Vogel 
44413705f88SJack F Vogel 	if (status == IXGBE_SUCCESS) {
4459ca4041bSJack F Vogel 		status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw),
44613705f88SJack F Vogel 					 IXGBE_NOT_IMPLEMENTED);
44713705f88SJack F Vogel 	}
44813705f88SJack F Vogel 	return status;
44913705f88SJack F Vogel }
45013705f88SJack F Vogel 
45113705f88SJack F Vogel /**
4529ca4041bSJack F Vogel  *  ixgbe_get_phy_firmware_version -
4539ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
4549ca4041bSJack F Vogel  *  @firmware_version: pointer to firmware version
4559ca4041bSJack F Vogel  **/
4569ca4041bSJack F Vogel s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version)
4579ca4041bSJack F Vogel {
4589ca4041bSJack F Vogel 	s32 status = IXGBE_SUCCESS;
4599ca4041bSJack F Vogel 
4609ca4041bSJack F Vogel 	status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version,
4619ca4041bSJack F Vogel 				 (hw, firmware_version),
4629ca4041bSJack F Vogel 				 IXGBE_NOT_IMPLEMENTED);
4639ca4041bSJack F Vogel 	return status;
4649ca4041bSJack F Vogel }
4659ca4041bSJack F Vogel 
4669ca4041bSJack F Vogel /**
46713705f88SJack F Vogel  *  ixgbe_read_phy_reg - Read PHY register
46813705f88SJack F Vogel  *  @hw: pointer to hardware structure
46913705f88SJack F Vogel  *  @reg_addr: 32 bit address of PHY register to read
47013705f88SJack F Vogel  *  @phy_data: Pointer to read data from PHY register
47113705f88SJack F Vogel  *
47213705f88SJack F Vogel  *  Reads a value from a specified PHY register
47313705f88SJack F Vogel  **/
47413705f88SJack F Vogel s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
47513705f88SJack F Vogel 		       u16 *phy_data)
47613705f88SJack F Vogel {
4770ac6dfecSJack F Vogel 	if (hw->phy.id == 0)
4780ac6dfecSJack F Vogel 		ixgbe_identify_phy(hw);
4790ac6dfecSJack F Vogel 
4809ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr,
4819ca4041bSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
48213705f88SJack F Vogel }
48313705f88SJack F Vogel 
48413705f88SJack F Vogel /**
48513705f88SJack F Vogel  *  ixgbe_write_phy_reg - Write PHY register
48613705f88SJack F Vogel  *  @hw: pointer to hardware structure
48713705f88SJack F Vogel  *  @reg_addr: 32 bit PHY register to write
48813705f88SJack F Vogel  *  @phy_data: Data to write to the PHY register
48913705f88SJack F Vogel  *
49013705f88SJack F Vogel  *  Writes a value to specified PHY register
49113705f88SJack F Vogel  **/
49213705f88SJack F Vogel s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
49313705f88SJack F Vogel 			u16 phy_data)
49413705f88SJack F Vogel {
4950ac6dfecSJack F Vogel 	if (hw->phy.id == 0)
4960ac6dfecSJack F Vogel 		ixgbe_identify_phy(hw);
4970ac6dfecSJack F Vogel 
4989ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr,
4999ca4041bSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
50013705f88SJack F Vogel }
50113705f88SJack F Vogel 
5029ca4041bSJack F Vogel /**
5039ca4041bSJack F Vogel  *  ixgbe_setup_phy_link - Restart PHY autoneg
5049ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
5059ca4041bSJack F Vogel  *
5069ca4041bSJack F Vogel  *  Restart autonegotiation and PHY and waits for completion.
5079ca4041bSJack F Vogel  **/
5089ca4041bSJack F Vogel s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw)
5099ca4041bSJack F Vogel {
5109ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw),
51113705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
51213705f88SJack F Vogel }
5139ca4041bSJack F Vogel 
5149ca4041bSJack F Vogel /**
5159ca4041bSJack F Vogel  *  ixgbe_check_phy_link - Determine link and speed status
5169ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
5179ca4041bSJack F Vogel  *
5189ca4041bSJack F Vogel  *  Reads a PHY register to determine if link is up and the current speed for
5199ca4041bSJack F Vogel  *  the PHY.
5209ca4041bSJack F Vogel  **/
5219ca4041bSJack F Vogel s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
5229ca4041bSJack F Vogel 			 bool *link_up)
5239ca4041bSJack F Vogel {
5249ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed,
5259ca4041bSJack F Vogel 			       link_up), IXGBE_NOT_IMPLEMENTED);
5269ca4041bSJack F Vogel }
5279ca4041bSJack F Vogel 
5289ca4041bSJack F Vogel /**
5299ca4041bSJack F Vogel  *  ixgbe_setup_phy_link_speed - Set auto advertise
5309ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
5319ca4041bSJack F Vogel  *  @speed: new link speed
5329ca4041bSJack F Vogel  *
5339ca4041bSJack F Vogel  *  Sets the auto advertised capabilities
5349ca4041bSJack F Vogel  **/
5359ca4041bSJack F Vogel s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
5369ca4041bSJack F Vogel 			       bool autoneg_wait_to_complete)
5379ca4041bSJack F Vogel {
5389ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.setup_link_speed, (hw, speed,
5390ecc2ff0SJack F Vogel 			       autoneg_wait_to_complete),
5409ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
54113705f88SJack F Vogel }
54213705f88SJack F Vogel 
54313705f88SJack F Vogel /**
54413705f88SJack F Vogel  *  ixgbe_check_link - Get link and speed status
54513705f88SJack F Vogel  *  @hw: pointer to hardware structure
54613705f88SJack F Vogel  *
54713705f88SJack F Vogel  *  Reads the links register to determine if link is up and the current speed
54813705f88SJack F Vogel  **/
54913705f88SJack F Vogel s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
5509ca4041bSJack F Vogel 		     bool *link_up, bool link_up_wait_to_complete)
55113705f88SJack F Vogel {
5529ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.check_link, (hw, speed,
5539ca4041bSJack F Vogel 			       link_up, link_up_wait_to_complete),
55413705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
55513705f88SJack F Vogel }
55613705f88SJack F Vogel 
55713705f88SJack F Vogel /**
5581a4e3449SJack F Vogel  *  ixgbe_disable_tx_laser - Disable Tx laser
5591a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
5601a4e3449SJack F Vogel  *
5611a4e3449SJack F Vogel  *  If the driver needs to disable the laser on SFI optics.
5621a4e3449SJack F Vogel  **/
5631a4e3449SJack F Vogel void ixgbe_disable_tx_laser(struct ixgbe_hw *hw)
5641a4e3449SJack F Vogel {
5651a4e3449SJack F Vogel 	if (hw->mac.ops.disable_tx_laser)
5661a4e3449SJack F Vogel 		hw->mac.ops.disable_tx_laser(hw);
5671a4e3449SJack F Vogel }
5681a4e3449SJack F Vogel 
5691a4e3449SJack F Vogel /**
5701a4e3449SJack F Vogel  *  ixgbe_enable_tx_laser - Enable Tx laser
5711a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
5721a4e3449SJack F Vogel  *
5731a4e3449SJack F Vogel  *  If the driver needs to enable the laser on SFI optics.
5741a4e3449SJack F Vogel  **/
5751a4e3449SJack F Vogel void ixgbe_enable_tx_laser(struct ixgbe_hw *hw)
5761a4e3449SJack F Vogel {
5771a4e3449SJack F Vogel 	if (hw->mac.ops.enable_tx_laser)
5781a4e3449SJack F Vogel 		hw->mac.ops.enable_tx_laser(hw);
5791a4e3449SJack F Vogel }
5801a4e3449SJack F Vogel 
5811a4e3449SJack F Vogel /**
5821a4e3449SJack F Vogel  *  ixgbe_flap_tx_laser - flap Tx laser to start autotry process
5831a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
5841a4e3449SJack F Vogel  *
5851a4e3449SJack F Vogel  *  When the driver changes the link speeds that it can support then
5861a4e3449SJack F Vogel  *  flap the tx laser to alert the link partner to start autotry
5871a4e3449SJack F Vogel  *  process on its end.
5881a4e3449SJack F Vogel  **/
5891a4e3449SJack F Vogel void ixgbe_flap_tx_laser(struct ixgbe_hw *hw)
5901a4e3449SJack F Vogel {
5911a4e3449SJack F Vogel 	if (hw->mac.ops.flap_tx_laser)
5921a4e3449SJack F Vogel 		hw->mac.ops.flap_tx_laser(hw);
5931a4e3449SJack F Vogel }
5941a4e3449SJack F Vogel 
5951a4e3449SJack F Vogel /**
5962969bf0eSJack F Vogel  *  ixgbe_setup_link - Set link speed
59713705f88SJack F Vogel  *  @hw: pointer to hardware structure
59813705f88SJack F Vogel  *  @speed: new link speed
59913705f88SJack F Vogel  *
6002969bf0eSJack F Vogel  *  Configures link settings.  Restarts the link.
6012969bf0eSJack F Vogel  *  Performs autonegotiation if needed.
60213705f88SJack F Vogel  **/
6032969bf0eSJack F Vogel s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed,
60413705f88SJack F Vogel 		     bool autoneg_wait_to_complete)
60513705f88SJack F Vogel {
6062969bf0eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw, speed,
6070ecc2ff0SJack F Vogel 			       autoneg_wait_to_complete),
60813705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
60913705f88SJack F Vogel }
61013705f88SJack F Vogel 
61113705f88SJack F Vogel /**
6129ca4041bSJack F Vogel  *  ixgbe_get_link_capabilities - Returns link capabilities
61313705f88SJack F Vogel  *  @hw: pointer to hardware structure
61413705f88SJack F Vogel  *
6159ca4041bSJack F Vogel  *  Determines the link capabilities of the current configuration.
61613705f88SJack F Vogel  **/
6179ca4041bSJack F Vogel s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
61813705f88SJack F Vogel 				bool *autoneg)
61913705f88SJack F Vogel {
6209ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw,
6219ca4041bSJack F Vogel 			       speed, autoneg), IXGBE_NOT_IMPLEMENTED);
62213705f88SJack F Vogel }
62313705f88SJack F Vogel 
62413705f88SJack F Vogel /**
6259ca4041bSJack F Vogel  *  ixgbe_led_on - Turn on LEDs
62613705f88SJack F Vogel  *  @hw: pointer to hardware structure
62713705f88SJack F Vogel  *  @index: led number to turn on
62813705f88SJack F Vogel  *
62913705f88SJack F Vogel  *  Turns on the software controllable LEDs.
63013705f88SJack F Vogel  **/
63113705f88SJack F Vogel s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index)
63213705f88SJack F Vogel {
6339ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index),
63413705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
63513705f88SJack F Vogel }
63613705f88SJack F Vogel 
63713705f88SJack F Vogel /**
6389ca4041bSJack F Vogel  *  ixgbe_led_off - Turn off LEDs
63913705f88SJack F Vogel  *  @hw: pointer to hardware structure
64013705f88SJack F Vogel  *  @index: led number to turn off
64113705f88SJack F Vogel  *
64213705f88SJack F Vogel  *  Turns off the software controllable LEDs.
64313705f88SJack F Vogel  **/
64413705f88SJack F Vogel s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index)
64513705f88SJack F Vogel {
6469ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index),
64713705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
64813705f88SJack F Vogel }
64913705f88SJack F Vogel 
65013705f88SJack F Vogel /**
6519ca4041bSJack F Vogel  *  ixgbe_blink_led_start - Blink LEDs
65213705f88SJack F Vogel  *  @hw: pointer to hardware structure
65313705f88SJack F Vogel  *  @index: led number to blink
65413705f88SJack F Vogel  *
65513705f88SJack F Vogel  *  Blink LED based on index.
65613705f88SJack F Vogel  **/
65713705f88SJack F Vogel s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index)
65813705f88SJack F Vogel {
6599ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index),
66013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
66113705f88SJack F Vogel }
66213705f88SJack F Vogel 
66313705f88SJack F Vogel /**
6649ca4041bSJack F Vogel  *  ixgbe_blink_led_stop - Stop blinking LEDs
66513705f88SJack F Vogel  *  @hw: pointer to hardware structure
66613705f88SJack F Vogel  *
66713705f88SJack F Vogel  *  Stop blinking LED based on index.
66813705f88SJack F Vogel  **/
66913705f88SJack F Vogel s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index)
67013705f88SJack F Vogel {
6719ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index),
67213705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
67313705f88SJack F Vogel }
67413705f88SJack F Vogel 
67513705f88SJack F Vogel /**
6769ca4041bSJack F Vogel  *  ixgbe_init_eeprom_params - Initialize EEPROM parameters
67713705f88SJack F Vogel  *  @hw: pointer to hardware structure
67813705f88SJack F Vogel  *
67913705f88SJack F Vogel  *  Initializes the EEPROM parameters ixgbe_eeprom_info within the
68013705f88SJack F Vogel  *  ixgbe_hw struct in order to set up EEPROM access.
68113705f88SJack F Vogel  **/
68213705f88SJack F Vogel s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw)
68313705f88SJack F Vogel {
6849ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw),
68513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
68613705f88SJack F Vogel }
68713705f88SJack F Vogel 
68813705f88SJack F Vogel 
68913705f88SJack F Vogel /**
69013705f88SJack F Vogel  *  ixgbe_write_eeprom - Write word to EEPROM
69113705f88SJack F Vogel  *  @hw: pointer to hardware structure
69213705f88SJack F Vogel  *  @offset: offset within the EEPROM to be written to
69313705f88SJack F Vogel  *  @data: 16 bit word to be written to the EEPROM
69413705f88SJack F Vogel  *
69513705f88SJack F Vogel  *  Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not
69613705f88SJack F Vogel  *  called after this function, the EEPROM will most likely contain an
69713705f88SJack F Vogel  *  invalid checksum.
69813705f88SJack F Vogel  **/
69913705f88SJack F Vogel s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data)
70013705f88SJack F Vogel {
7019ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data),
70213705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
70313705f88SJack F Vogel }
70413705f88SJack F Vogel 
70513705f88SJack F Vogel /**
70685d0a26eSJack F Vogel  *  ixgbe_write_eeprom_buffer - Write word(s) to EEPROM
70785d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
70885d0a26eSJack F Vogel  *  @offset: offset within the EEPROM to be written to
70985d0a26eSJack F Vogel  *  @data: 16 bit word(s) to be written to the EEPROM
71085d0a26eSJack F Vogel  *  @words: number of words
71185d0a26eSJack F Vogel  *
71285d0a26eSJack F Vogel  *  Writes 16 bit word(s) to EEPROM. If ixgbe_eeprom_update_checksum is not
71385d0a26eSJack F Vogel  *  called after this function, the EEPROM will most likely contain an
71485d0a26eSJack F Vogel  *  invalid checksum.
71585d0a26eSJack F Vogel  **/
71685d0a26eSJack F Vogel s32 ixgbe_write_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, u16 words,
71785d0a26eSJack F Vogel 			      u16 *data)
71885d0a26eSJack F Vogel {
71985d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.write_buffer,
72085d0a26eSJack F Vogel 			       (hw, offset, words, data),
72185d0a26eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
72285d0a26eSJack F Vogel }
72385d0a26eSJack F Vogel 
72485d0a26eSJack F Vogel /**
72513705f88SJack F Vogel  *  ixgbe_read_eeprom - Read word from EEPROM
72613705f88SJack F Vogel  *  @hw: pointer to hardware structure
72713705f88SJack F Vogel  *  @offset: offset within the EEPROM to be read
72813705f88SJack F Vogel  *  @data: read 16 bit value from EEPROM
72913705f88SJack F Vogel  *
73013705f88SJack F Vogel  *  Reads 16 bit value from EEPROM
73113705f88SJack F Vogel  **/
73213705f88SJack F Vogel s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data)
73313705f88SJack F Vogel {
7349ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data),
73513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
73613705f88SJack F Vogel }
73713705f88SJack F Vogel 
73813705f88SJack F Vogel /**
73985d0a26eSJack F Vogel  *  ixgbe_read_eeprom_buffer - Read word(s) from EEPROM
74085d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
74185d0a26eSJack F Vogel  *  @offset: offset within the EEPROM to be read
74285d0a26eSJack F Vogel  *  @data: read 16 bit word(s) from EEPROM
74385d0a26eSJack F Vogel  *  @words: number of words
74485d0a26eSJack F Vogel  *
74585d0a26eSJack F Vogel  *  Reads 16 bit word(s) from EEPROM
74685d0a26eSJack F Vogel  **/
74785d0a26eSJack F Vogel s32 ixgbe_read_eeprom_buffer(struct ixgbe_hw *hw, u16 offset,
74885d0a26eSJack F Vogel 			     u16 words, u16 *data)
74985d0a26eSJack F Vogel {
75085d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.read_buffer,
75185d0a26eSJack F Vogel 			       (hw, offset, words, data),
75285d0a26eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
75385d0a26eSJack F Vogel }
75485d0a26eSJack F Vogel 
75585d0a26eSJack F Vogel /**
75613705f88SJack F Vogel  *  ixgbe_validate_eeprom_checksum - Validate EEPROM checksum
75713705f88SJack F Vogel  *  @hw: pointer to hardware structure
75813705f88SJack F Vogel  *  @checksum_val: calculated checksum
75913705f88SJack F Vogel  *
76013705f88SJack F Vogel  *  Performs checksum calculation and validates the EEPROM checksum
76113705f88SJack F Vogel  **/
76213705f88SJack F Vogel s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val)
76313705f88SJack F Vogel {
7649ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum,
76513705f88SJack F Vogel 			       (hw, checksum_val), IXGBE_NOT_IMPLEMENTED);
76613705f88SJack F Vogel }
76713705f88SJack F Vogel 
76813705f88SJack F Vogel /**
76913705f88SJack F Vogel  *  ixgbe_eeprom_update_checksum - Updates the EEPROM checksum
77013705f88SJack F Vogel  *  @hw: pointer to hardware structure
77113705f88SJack F Vogel  **/
77213705f88SJack F Vogel s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw)
77313705f88SJack F Vogel {
7749ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw),
77513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
77613705f88SJack F Vogel }
77713705f88SJack F Vogel 
77813705f88SJack F Vogel /**
7790ac6dfecSJack F Vogel  *  ixgbe_insert_mac_addr - Find a RAR for this mac address
7800ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
7810ac6dfecSJack F Vogel  *  @addr: Address to put into receive address register
7820ac6dfecSJack F Vogel  *  @vmdq: VMDq pool to assign
7830ac6dfecSJack F Vogel  *
7840ac6dfecSJack F Vogel  *  Puts an ethernet address into a receive address register, or
7850ac6dfecSJack F Vogel  *  finds the rar that it is aleady in; adds to the pool list
7860ac6dfecSJack F Vogel  **/
7870ac6dfecSJack F Vogel s32 ixgbe_insert_mac_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
7880ac6dfecSJack F Vogel {
7890ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.insert_mac_addr,
7900ac6dfecSJack F Vogel 			       (hw, addr, vmdq),
7910ac6dfecSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
7920ac6dfecSJack F Vogel }
7930ac6dfecSJack F Vogel 
7940ac6dfecSJack F Vogel /**
7959ca4041bSJack F Vogel  *  ixgbe_set_rar - Set Rx address register
79613705f88SJack F Vogel  *  @hw: pointer to hardware structure
79713705f88SJack F Vogel  *  @index: Receive address register to write
7989ca4041bSJack F Vogel  *  @addr: Address to put into receive address register
7999ca4041bSJack F Vogel  *  @vmdq: VMDq "set"
80013705f88SJack F Vogel  *  @enable_addr: set flag that address is active
80113705f88SJack F Vogel  *
80213705f88SJack F Vogel  *  Puts an ethernet address into a receive address register.
80313705f88SJack F Vogel  **/
8049ca4041bSJack F Vogel s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
80513705f88SJack F Vogel 		  u32 enable_addr)
80613705f88SJack F Vogel {
8079ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq,
80813705f88SJack F Vogel 			       enable_addr), IXGBE_NOT_IMPLEMENTED);
80913705f88SJack F Vogel }
81013705f88SJack F Vogel 
81113705f88SJack F Vogel /**
8125b7f4cedSJack F Vogel  *  ixgbe_clear_rar - Clear Rx address register
8135b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
8145b7f4cedSJack F Vogel  *  @index: Receive address register to write
8155b7f4cedSJack F Vogel  *
8165b7f4cedSJack F Vogel  *  Puts an ethernet address into a receive address register.
8175b7f4cedSJack F Vogel  **/
8185b7f4cedSJack F Vogel s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index)
8195b7f4cedSJack F Vogel {
8205b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index),
8215b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
8225b7f4cedSJack F Vogel }
8235b7f4cedSJack F Vogel 
8245b7f4cedSJack F Vogel /**
8259ca4041bSJack F Vogel  *  ixgbe_set_vmdq - Associate a VMDq index with a receive address
8269ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
8279ca4041bSJack F Vogel  *  @rar: receive address register index to associate with VMDq index
8289ca4041bSJack F Vogel  *  @vmdq: VMDq set or pool index
8299ca4041bSJack F Vogel  **/
8309ca4041bSJack F Vogel s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
8319ca4041bSJack F Vogel {
8329ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq),
8339ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
834a621e3c8SJack F Vogel 
835a621e3c8SJack F Vogel }
836a621e3c8SJack F Vogel 
837a621e3c8SJack F Vogel /**
838a621e3c8SJack F Vogel  *  ixgbe_set_vmdq_san_mac - Associate VMDq index 127 with a receive address
839a621e3c8SJack F Vogel  *  @hw: pointer to hardware structure
840a621e3c8SJack F Vogel  *  @vmdq: VMDq default pool index
841a621e3c8SJack F Vogel  **/
842a621e3c8SJack F Vogel s32 ixgbe_set_vmdq_san_mac(struct ixgbe_hw *hw, u32 vmdq)
843a621e3c8SJack F Vogel {
844a621e3c8SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vmdq_san_mac,
845a621e3c8SJack F Vogel 			       (hw, vmdq), IXGBE_NOT_IMPLEMENTED);
8469ca4041bSJack F Vogel }
8479ca4041bSJack F Vogel 
8489ca4041bSJack F Vogel /**
8495b7f4cedSJack F Vogel  *  ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address
8505b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
8515b7f4cedSJack F Vogel  *  @rar: receive address register index to disassociate with VMDq index
8525b7f4cedSJack F Vogel  *  @vmdq: VMDq set or pool index
8535b7f4cedSJack F Vogel  **/
8545b7f4cedSJack F Vogel s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
8555b7f4cedSJack F Vogel {
8565b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq),
8575b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
8585b7f4cedSJack F Vogel }
8595b7f4cedSJack F Vogel 
8605b7f4cedSJack F Vogel /**
86113705f88SJack F Vogel  *  ixgbe_init_rx_addrs - Initializes receive address filters.
86213705f88SJack F Vogel  *  @hw: pointer to hardware structure
86313705f88SJack F Vogel  *
86413705f88SJack F Vogel  *  Places the MAC address in receive address register 0 and clears the rest
8659ca4041bSJack F Vogel  *  of the receive address registers. Clears the multicast table. Assumes
86613705f88SJack F Vogel  *  the receiver is in reset when the routine is called.
86713705f88SJack F Vogel  **/
86813705f88SJack F Vogel s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw)
86913705f88SJack F Vogel {
8709ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw),
87113705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
87213705f88SJack F Vogel }
87313705f88SJack F Vogel 
87413705f88SJack F Vogel /**
87513705f88SJack F Vogel  *  ixgbe_get_num_rx_addrs - Returns the number of RAR entries.
87613705f88SJack F Vogel  *  @hw: pointer to hardware structure
87713705f88SJack F Vogel  **/
87813705f88SJack F Vogel u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw)
87913705f88SJack F Vogel {
8809ca4041bSJack F Vogel 	return hw->mac.num_rar_entries;
8819ca4041bSJack F Vogel }
8829ca4041bSJack F Vogel 
8839ca4041bSJack F Vogel /**
8849ca4041bSJack F Vogel  *  ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses
8859ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
8869ca4041bSJack F Vogel  *  @addr_list: the list of new multicast addresses
8879ca4041bSJack F Vogel  *  @addr_count: number of addresses
8889ca4041bSJack F Vogel  *  @func: iterator function to walk the multicast address list
8899ca4041bSJack F Vogel  *
8909ca4041bSJack F Vogel  *  The given list replaces any existing list. Clears the secondary addrs from
8919ca4041bSJack F Vogel  *  receive address registers. Uses unused receive address registers for the
8929ca4041bSJack F Vogel  *  first secondary addresses, and falls back to promiscuous mode as needed.
8939ca4041bSJack F Vogel  **/
8949ca4041bSJack F Vogel s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list,
8959ca4041bSJack F Vogel 			      u32 addr_count, ixgbe_mc_addr_itr func)
8969ca4041bSJack F Vogel {
8979ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw,
8989ca4041bSJack F Vogel 			       addr_list, addr_count, func),
8999ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
90013705f88SJack F Vogel }
90113705f88SJack F Vogel 
90213705f88SJack F Vogel /**
90313705f88SJack F Vogel  *  ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses
90413705f88SJack F Vogel  *  @hw: pointer to hardware structure
90513705f88SJack F Vogel  *  @mc_addr_list: the list of new multicast addresses
90613705f88SJack F Vogel  *  @mc_addr_count: number of addresses
9079ca4041bSJack F Vogel  *  @func: iterator function to walk the multicast address list
90813705f88SJack F Vogel  *
90913705f88SJack F Vogel  *  The given list replaces any existing list. Clears the MC addrs from receive
9109ca4041bSJack F Vogel  *  address registers and the multicast table. Uses unused receive address
91113705f88SJack F Vogel  *  registers for the first multicast addresses, and hashes the rest into the
91213705f88SJack F Vogel  *  multicast table.
91313705f88SJack F Vogel  **/
91413705f88SJack F Vogel s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list,
91585d0a26eSJack F Vogel 			      u32 mc_addr_count, ixgbe_mc_addr_itr func,
91685d0a26eSJack F Vogel 			      bool clear)
91713705f88SJack F Vogel {
9189ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw,
91985d0a26eSJack F Vogel 			       mc_addr_list, mc_addr_count, func, clear),
92013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
92113705f88SJack F Vogel }
92213705f88SJack F Vogel 
92313705f88SJack F Vogel /**
92413705f88SJack F Vogel  *  ixgbe_enable_mc - Enable multicast address in RAR
92513705f88SJack F Vogel  *  @hw: pointer to hardware structure
92613705f88SJack F Vogel  *
92713705f88SJack F Vogel  *  Enables multicast address in RAR and the use of the multicast hash table.
92813705f88SJack F Vogel  **/
92913705f88SJack F Vogel s32 ixgbe_enable_mc(struct ixgbe_hw *hw)
93013705f88SJack F Vogel {
9319ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw),
93213705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
93313705f88SJack F Vogel }
93413705f88SJack F Vogel 
93513705f88SJack F Vogel /**
93613705f88SJack F Vogel  *  ixgbe_disable_mc - Disable multicast address in RAR
93713705f88SJack F Vogel  *  @hw: pointer to hardware structure
93813705f88SJack F Vogel  *
93913705f88SJack F Vogel  *  Disables multicast address in RAR and the use of the multicast hash table.
94013705f88SJack F Vogel  **/
94113705f88SJack F Vogel s32 ixgbe_disable_mc(struct ixgbe_hw *hw)
94213705f88SJack F Vogel {
9439ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw),
94413705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
94513705f88SJack F Vogel }
94613705f88SJack F Vogel 
94713705f88SJack F Vogel /**
94813705f88SJack F Vogel  *  ixgbe_clear_vfta - Clear VLAN filter table
94913705f88SJack F Vogel  *  @hw: pointer to hardware structure
95013705f88SJack F Vogel  *
95113705f88SJack F Vogel  *  Clears the VLAN filer table, and the VMDq index associated with the filter
95213705f88SJack F Vogel  **/
95313705f88SJack F Vogel s32 ixgbe_clear_vfta(struct ixgbe_hw *hw)
95413705f88SJack F Vogel {
9559ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw),
95613705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
95713705f88SJack F Vogel }
95813705f88SJack F Vogel 
95913705f88SJack F Vogel /**
96013705f88SJack F Vogel  *  ixgbe_set_vfta - Set VLAN filter table
96113705f88SJack F Vogel  *  @hw: pointer to hardware structure
96213705f88SJack F Vogel  *  @vlan: VLAN id to write to VLAN filter
96313705f88SJack F Vogel  *  @vind: VMDq output index that maps queue to VLAN id in VFTA
96413705f88SJack F Vogel  *  @vlan_on: boolean flag to turn on/off VLAN in VFTA
96513705f88SJack F Vogel  *
96613705f88SJack F Vogel  *  Turn on/off specified VLAN in the VLAN filter table.
96713705f88SJack F Vogel  **/
96813705f88SJack F Vogel s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on)
96913705f88SJack F Vogel {
9709ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind,
97113705f88SJack F Vogel 			       vlan_on), IXGBE_NOT_IMPLEMENTED);
97213705f88SJack F Vogel }
97313705f88SJack F Vogel 
97413705f88SJack F Vogel /**
97585d0a26eSJack F Vogel  *  ixgbe_set_vlvf - Set VLAN Pool Filter
97685d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
97785d0a26eSJack F Vogel  *  @vlan: VLAN id to write to VLAN filter
97885d0a26eSJack F Vogel  *  @vind: VMDq output index that maps queue to VLAN id in VFVFB
97985d0a26eSJack F Vogel  *  @vlan_on: boolean flag to turn on/off VLAN in VFVF
98085d0a26eSJack F Vogel  *  @vfta_changed: pointer to boolean flag which indicates whether VFTA
98185d0a26eSJack F Vogel  *                 should be changed
98285d0a26eSJack F Vogel  *
98385d0a26eSJack F Vogel  *  Turn on/off specified bit in VLVF table.
98485d0a26eSJack F Vogel  **/
98585d0a26eSJack F Vogel s32 ixgbe_set_vlvf(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on,
98685d0a26eSJack F Vogel 		    bool *vfta_changed)
98785d0a26eSJack F Vogel {
98885d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vlvf, (hw, vlan, vind,
98985d0a26eSJack F Vogel 			       vlan_on, vfta_changed), IXGBE_NOT_IMPLEMENTED);
99085d0a26eSJack F Vogel }
99185d0a26eSJack F Vogel 
99285d0a26eSJack F Vogel /**
9930ac6dfecSJack F Vogel  *  ixgbe_fc_enable - Enable flow control
99413705f88SJack F Vogel  *  @hw: pointer to hardware structure
99513705f88SJack F Vogel  *
99613705f88SJack F Vogel  *  Configures the flow control settings based on SW configuration.
99713705f88SJack F Vogel  **/
998a621e3c8SJack F Vogel s32 ixgbe_fc_enable(struct ixgbe_hw *hw)
99913705f88SJack F Vogel {
1000a621e3c8SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.fc_enable, (hw),
100113705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
100213705f88SJack F Vogel }
100313705f88SJack F Vogel 
10043ec35e52SJack F Vogel /**
100585d0a26eSJack F Vogel  * ixgbe_set_fw_drv_ver - Try to send the driver version number FW
100685d0a26eSJack F Vogel  * @hw: pointer to hardware structure
100785d0a26eSJack F Vogel  * @maj: driver major number to be sent to firmware
100885d0a26eSJack F Vogel  * @min: driver minor number to be sent to firmware
100985d0a26eSJack F Vogel  * @build: driver build number to be sent to firmware
101085d0a26eSJack F Vogel  * @ver: driver version number to be sent to firmware
101185d0a26eSJack F Vogel  **/
101285d0a26eSJack F Vogel s32 ixgbe_set_fw_drv_ver(struct ixgbe_hw *hw, u8 maj, u8 min, u8 build,
101385d0a26eSJack F Vogel 			 u8 ver)
101485d0a26eSJack F Vogel {
101585d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_fw_drv_ver, (hw, maj, min,
101685d0a26eSJack F Vogel 			       build, ver), IXGBE_NOT_IMPLEMENTED);
101785d0a26eSJack F Vogel }
101885d0a26eSJack F Vogel 
101985d0a26eSJack F Vogel 
1020fd75b91dSJack F Vogel 
1021fd75b91dSJack F Vogel 
102285d0a26eSJack F Vogel /**
10233ec35e52SJack F Vogel  *  ixgbe_read_analog_reg8 - Reads 8 bit analog register
10243ec35e52SJack F Vogel  *  @hw: pointer to hardware structure
10253ec35e52SJack F Vogel  *  @reg: analog register to read
10263ec35e52SJack F Vogel  *  @val: read value
10273ec35e52SJack F Vogel  *
10283ec35e52SJack F Vogel  *  Performs write operation to analog register specified.
10293ec35e52SJack F Vogel  **/
10303ec35e52SJack F Vogel s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val)
10313ec35e52SJack F Vogel {
10329ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg,
10339ca4041bSJack F Vogel 			       val), IXGBE_NOT_IMPLEMENTED);
10343ec35e52SJack F Vogel }
10353ec35e52SJack F Vogel 
10363ec35e52SJack F Vogel /**
10373ec35e52SJack F Vogel  *  ixgbe_write_analog_reg8 - Writes 8 bit analog register
10383ec35e52SJack F Vogel  *  @hw: pointer to hardware structure
10393ec35e52SJack F Vogel  *  @reg: analog register to write
10403ec35e52SJack F Vogel  *  @val: value to write
10413ec35e52SJack F Vogel  *
10423ec35e52SJack F Vogel  *  Performs write operation to Atlas analog register specified.
10433ec35e52SJack F Vogel  **/
10443ec35e52SJack F Vogel s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val)
10453ec35e52SJack F Vogel {
10469ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg,
10479ca4041bSJack F Vogel 			       val), IXGBE_NOT_IMPLEMENTED);
10483ec35e52SJack F Vogel }
10493ec35e52SJack F Vogel 
10505b7f4cedSJack F Vogel /**
10515b7f4cedSJack F Vogel  *  ixgbe_init_uta_tables - Initializes Unicast Table Arrays.
10525b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
10535b7f4cedSJack F Vogel  *
10545b7f4cedSJack F Vogel  *  Initializes the Unicast Table Arrays to zero on device load.  This
10555b7f4cedSJack F Vogel  *  is part of the Rx init addr execution path.
10565b7f4cedSJack F Vogel  **/
10575b7f4cedSJack F Vogel s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw)
10585b7f4cedSJack F Vogel {
10595b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw),
10605b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
10615b7f4cedSJack F Vogel }
10621b6e0dbaSJack F Vogel 
10631b6e0dbaSJack F Vogel /**
10640ac6dfecSJack F Vogel  *  ixgbe_read_i2c_byte - Reads 8 bit word over I2C at specified device address
10650ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
10660ac6dfecSJack F Vogel  *  @byte_offset: byte offset to read
10670ac6dfecSJack F Vogel  *  @data: value read
10680ac6dfecSJack F Vogel  *
10690ac6dfecSJack F Vogel  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
10700ac6dfecSJack F Vogel  **/
10710ac6dfecSJack F Vogel s32 ixgbe_read_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr,
10720ac6dfecSJack F Vogel 			u8 *data)
10730ac6dfecSJack F Vogel {
10740ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte, (hw, byte_offset,
10750ac6dfecSJack F Vogel 			       dev_addr, data), IXGBE_NOT_IMPLEMENTED);
10760ac6dfecSJack F Vogel }
10770ac6dfecSJack F Vogel 
10780ac6dfecSJack F Vogel /**
10790ac6dfecSJack F Vogel  *  ixgbe_write_i2c_byte - Writes 8 bit word over I2C
10800ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
10810ac6dfecSJack F Vogel  *  @byte_offset: byte offset to write
10820ac6dfecSJack F Vogel  *  @data: value to write
10830ac6dfecSJack F Vogel  *
10840ac6dfecSJack F Vogel  *  Performs byte write operation to SFP module's EEPROM over I2C interface
10850ac6dfecSJack F Vogel  *  at a specified device address.
10860ac6dfecSJack F Vogel  **/
10870ac6dfecSJack F Vogel s32 ixgbe_write_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr,
10880ac6dfecSJack F Vogel 			 u8 data)
10890ac6dfecSJack F Vogel {
10900ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte, (hw, byte_offset,
10910ac6dfecSJack F Vogel 			       dev_addr, data), IXGBE_NOT_IMPLEMENTED);
10920ac6dfecSJack F Vogel }
10930ac6dfecSJack F Vogel 
10940ac6dfecSJack F Vogel /**
10950ac6dfecSJack F Vogel  *  ixgbe_write_i2c_eeprom - Writes 8 bit EEPROM word over I2C interface
10960ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
10970ac6dfecSJack F Vogel  *  @byte_offset: EEPROM byte offset to write
10980ac6dfecSJack F Vogel  *  @eeprom_data: value to write
10990ac6dfecSJack F Vogel  *
11000ac6dfecSJack F Vogel  *  Performs byte write operation to SFP module's EEPROM over I2C interface.
11010ac6dfecSJack F Vogel  **/
11020ac6dfecSJack F Vogel s32 ixgbe_write_i2c_eeprom(struct ixgbe_hw *hw,
11030ac6dfecSJack F Vogel 			   u8 byte_offset, u8 eeprom_data)
11040ac6dfecSJack F Vogel {
11050ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_eeprom,
11060ac6dfecSJack F Vogel 			       (hw, byte_offset, eeprom_data),
11070ac6dfecSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
11080ac6dfecSJack F Vogel }
11090ac6dfecSJack F Vogel 
11100ac6dfecSJack F Vogel /**
11111b6e0dbaSJack F Vogel  *  ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface
11121b6e0dbaSJack F Vogel  *  @hw: pointer to hardware structure
11131b6e0dbaSJack F Vogel  *  @byte_offset: EEPROM byte offset to read
11141b6e0dbaSJack F Vogel  *  @eeprom_data: value read
11151b6e0dbaSJack F Vogel  *
11161b6e0dbaSJack F Vogel  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
11171b6e0dbaSJack F Vogel  **/
11181b6e0dbaSJack F Vogel s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data)
11191b6e0dbaSJack F Vogel {
11201b6e0dbaSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom,
11211b6e0dbaSJack F Vogel 			      (hw, byte_offset, eeprom_data),
11221b6e0dbaSJack F Vogel 			      IXGBE_NOT_IMPLEMENTED);
11231b6e0dbaSJack F Vogel }
11241b6e0dbaSJack F Vogel 
11251b6e0dbaSJack F Vogel /**
11261b6e0dbaSJack F Vogel  *  ixgbe_get_supported_physical_layer - Returns physical layer type
11271b6e0dbaSJack F Vogel  *  @hw: pointer to hardware structure
11281b6e0dbaSJack F Vogel  *
11291b6e0dbaSJack F Vogel  *  Determines physical layer capabilities of the current configuration.
11301b6e0dbaSJack F Vogel  **/
11311b6e0dbaSJack F Vogel u32 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw)
11321b6e0dbaSJack F Vogel {
11331b6e0dbaSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer,
11341b6e0dbaSJack F Vogel 			       (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN);
11351b6e0dbaSJack F Vogel }
11360ac6dfecSJack F Vogel 
11370ac6dfecSJack F Vogel /**
1138a621e3c8SJack F Vogel  *  ixgbe_enable_rx_dma - Enables Rx DMA unit, dependent on device specifics
11390ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
11400ac6dfecSJack F Vogel  *  @regval: bitfield to write to the Rx DMA register
11410ac6dfecSJack F Vogel  *
11420ac6dfecSJack F Vogel  *  Enables the Rx DMA unit of the device.
11430ac6dfecSJack F Vogel  **/
11440ac6dfecSJack F Vogel s32 ixgbe_enable_rx_dma(struct ixgbe_hw *hw, u32 regval)
11450ac6dfecSJack F Vogel {
11460ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_rx_dma,
11470ac6dfecSJack F Vogel 			       (hw, regval), IXGBE_NOT_IMPLEMENTED);
11480ac6dfecSJack F Vogel }
1149d8602bb9SJack F Vogel 
1150d8602bb9SJack F Vogel /**
115185d0a26eSJack F Vogel  *  ixgbe_disable_sec_rx_path - Stops the receive data path
115285d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
115385d0a26eSJack F Vogel  *
115485d0a26eSJack F Vogel  *  Stops the receive data path.
115585d0a26eSJack F Vogel  **/
115685d0a26eSJack F Vogel s32 ixgbe_disable_sec_rx_path(struct ixgbe_hw *hw)
115785d0a26eSJack F Vogel {
115885d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.disable_sec_rx_path,
115985d0a26eSJack F Vogel 				(hw), IXGBE_NOT_IMPLEMENTED);
116085d0a26eSJack F Vogel }
116185d0a26eSJack F Vogel 
116285d0a26eSJack F Vogel /**
116385d0a26eSJack F Vogel  *  ixgbe_enable_sec_rx_path - Enables the receive data path
116485d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
116585d0a26eSJack F Vogel  *
116685d0a26eSJack F Vogel  *  Enables the receive data path.
116785d0a26eSJack F Vogel  **/
116885d0a26eSJack F Vogel s32 ixgbe_enable_sec_rx_path(struct ixgbe_hw *hw)
116985d0a26eSJack F Vogel {
117085d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_sec_rx_path,
117185d0a26eSJack F Vogel 				(hw), IXGBE_NOT_IMPLEMENTED);
117285d0a26eSJack F Vogel }
117385d0a26eSJack F Vogel 
117485d0a26eSJack F Vogel /**
1175d8602bb9SJack F Vogel  *  ixgbe_acquire_swfw_semaphore - Acquire SWFW semaphore
1176d8602bb9SJack F Vogel  *  @hw: pointer to hardware structure
1177d8602bb9SJack F Vogel  *  @mask: Mask to specify which semaphore to acquire
1178d8602bb9SJack F Vogel  *
1179d8602bb9SJack F Vogel  *  Acquires the SWFW semaphore through SW_FW_SYNC register for the specified
1180d8602bb9SJack F Vogel  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
1181d8602bb9SJack F Vogel  **/
1182d8602bb9SJack F Vogel s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u16 mask)
1183d8602bb9SJack F Vogel {
1184d8602bb9SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.acquire_swfw_sync,
1185d8602bb9SJack F Vogel 			       (hw, mask), IXGBE_NOT_IMPLEMENTED);
1186d8602bb9SJack F Vogel }
1187d8602bb9SJack F Vogel 
1188d8602bb9SJack F Vogel /**
1189d8602bb9SJack F Vogel  *  ixgbe_release_swfw_semaphore - Release SWFW semaphore
1190d8602bb9SJack F Vogel  *  @hw: pointer to hardware structure
1191d8602bb9SJack F Vogel  *  @mask: Mask to specify which semaphore to release
1192d8602bb9SJack F Vogel  *
1193d8602bb9SJack F Vogel  *  Releases the SWFW semaphore through SW_FW_SYNC register for the specified
1194d8602bb9SJack F Vogel  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
1195d8602bb9SJack F Vogel  **/
1196d8602bb9SJack F Vogel void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u16 mask)
1197d8602bb9SJack F Vogel {
1198d8602bb9SJack F Vogel 	if (hw->mac.ops.release_swfw_sync)
1199d8602bb9SJack F Vogel 		hw->mac.ops.release_swfw_sync(hw, mask);
1200d8602bb9SJack F Vogel }
1201d8602bb9SJack F Vogel 
1202