xref: /freebsd/sys/dev/ixgbe/ixgbe_api.c (revision 0ecc2ff0)
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 /**
3913705f88SJack F Vogel  *  ixgbe_init_shared_code - Initialize the shared code
4013705f88SJack F Vogel  *  @hw: pointer to hardware structure
4113705f88SJack F Vogel  *
4213705f88SJack F Vogel  *  This will assign function pointers and assign the MAC type and PHY code.
4313705f88SJack F Vogel  *  Does not touch the hardware. This function must be called prior to any
4413705f88SJack F Vogel  *  other function in the shared code. The ixgbe_hw structure should be
4513705f88SJack F Vogel  *  memset to 0 prior to calling this function.  The following fields in
4613705f88SJack F Vogel  *  hw structure should be filled in prior to calling this function:
4713705f88SJack F Vogel  *  hw_addr, back, device_id, vendor_id, subsystem_device_id,
4813705f88SJack F Vogel  *  subsystem_vendor_id, and revision_id
4913705f88SJack F Vogel  **/
5013705f88SJack F Vogel s32 ixgbe_init_shared_code(struct ixgbe_hw *hw)
5113705f88SJack F Vogel {
523ec35e52SJack F Vogel 	s32 status;
5313705f88SJack F Vogel 
542969bf0eSJack F Vogel 	DEBUGFUNC("ixgbe_init_shared_code");
552969bf0eSJack F Vogel 
5613705f88SJack F Vogel 	/*
573ec35e52SJack F Vogel 	 * Set the mac type
583ec35e52SJack F Vogel 	 */
593ec35e52SJack F Vogel 	ixgbe_set_mac_type(hw);
603ec35e52SJack F Vogel 
613ec35e52SJack F Vogel 	switch (hw->mac.type) {
623ec35e52SJack F Vogel 	case ixgbe_mac_82598EB:
639ca4041bSJack F Vogel 		status = ixgbe_init_ops_82598(hw);
6413705f88SJack F Vogel 		break;
650ac6dfecSJack F Vogel 	case ixgbe_mac_82599EB:
660ac6dfecSJack F Vogel 		status = ixgbe_init_ops_82599(hw);
670ac6dfecSJack F Vogel 		break;
681a4e3449SJack F Vogel 	case ixgbe_mac_82599_vf:
6985d0a26eSJack F Vogel 	case ixgbe_mac_X540_vf:
701a4e3449SJack F Vogel 		status = ixgbe_init_ops_vf(hw);
711a4e3449SJack F Vogel 		break;
7285d0a26eSJack F Vogel 	case ixgbe_mac_X540:
7385d0a26eSJack F Vogel 		status = ixgbe_init_ops_X540(hw);
7485d0a26eSJack F Vogel 		break;
7513705f88SJack F Vogel 	default:
7613705f88SJack F Vogel 		status = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
7713705f88SJack F Vogel 		break;
7813705f88SJack F Vogel 	}
7913705f88SJack F Vogel 
8013705f88SJack F Vogel 	return status;
8113705f88SJack F Vogel }
8213705f88SJack F Vogel 
8313705f88SJack F Vogel /**
843ec35e52SJack F Vogel  *  ixgbe_set_mac_type - Sets MAC type
853ec35e52SJack F Vogel  *  @hw: pointer to the HW structure
863ec35e52SJack F Vogel  *
873ec35e52SJack F Vogel  *  This function sets the mac type of the adapter based on the
883ec35e52SJack F Vogel  *  vendor ID and device ID stored in the hw structure.
893ec35e52SJack F Vogel  **/
903ec35e52SJack F Vogel s32 ixgbe_set_mac_type(struct ixgbe_hw *hw)
913ec35e52SJack F Vogel {
923ec35e52SJack F Vogel 	s32 ret_val = IXGBE_SUCCESS;
933ec35e52SJack F Vogel 
949ca4041bSJack F Vogel 	DEBUGFUNC("ixgbe_set_mac_type\n");
953ec35e52SJack F Vogel 
963ec35e52SJack F Vogel 	switch (hw->device_id) {
971b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598:
980ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82598_BX:
993ec35e52SJack F Vogel 	case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
1003ec35e52SJack F Vogel 	case IXGBE_DEV_ID_82598AF_DUAL_PORT:
1019ca4041bSJack F Vogel 	case IXGBE_DEV_ID_82598AT:
1022969bf0eSJack F Vogel 	case IXGBE_DEV_ID_82598AT2:
1033ec35e52SJack F Vogel 	case IXGBE_DEV_ID_82598EB_CX4:
1049ca4041bSJack F Vogel 	case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
1051b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
1061b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
1079ca4041bSJack F Vogel 	case IXGBE_DEV_ID_82598EB_XF_LR:
1081b6e0dbaSJack F Vogel 	case IXGBE_DEV_ID_82598EB_SFP_LOM:
1093ec35e52SJack F Vogel 		hw->mac.type = ixgbe_mac_82598EB;
1103ec35e52SJack F Vogel 		break;
1110ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82599_KX4:
1122969bf0eSJack F Vogel 	case IXGBE_DEV_ID_82599_KX4_MEZZ:
113d8602bb9SJack F Vogel 	case IXGBE_DEV_ID_82599_XAUI_LOM:
1142969bf0eSJack F Vogel 	case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:
11585d0a26eSJack F Vogel 	case IXGBE_DEV_ID_82599_KR:
1160ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82599_SFP:
1171a4e3449SJack F Vogel 	case IXGBE_DEV_ID_82599_BACKPLANE_FCOE:
1181a4e3449SJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_FCOE:
11985d0a26eSJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_EM:
120a621e3c8SJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_SF2:
1210ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_82599_SFP_SF_QP:
12285d0a26eSJack F Vogel 	case IXGBE_DEV_ID_82599EN_SFP:
1230ac6dfecSJack F Vogel 	case IXGBE_DEV_ID_82599_CX4:
1240ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_82599_BYPASS:
125c0014855SJack F Vogel 	case IXGBE_DEV_ID_82599_T3_LOM:
1260ac6dfecSJack F Vogel 		hw->mac.type = ixgbe_mac_82599EB;
1270ac6dfecSJack F Vogel 		break;
1281a4e3449SJack F Vogel 	case IXGBE_DEV_ID_82599_VF:
1290ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_82599_VF_HV:
1301a4e3449SJack F Vogel 		hw->mac.type = ixgbe_mac_82599_vf;
1311a4e3449SJack F Vogel 		break;
13285d0a26eSJack F Vogel 	case IXGBE_DEV_ID_X540_VF:
1330ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_X540_VF_HV:
13485d0a26eSJack F Vogel 		hw->mac.type = ixgbe_mac_X540_vf;
13585d0a26eSJack F Vogel 		break;
13685d0a26eSJack F Vogel 	case IXGBE_DEV_ID_X540T:
1370ecc2ff0SJack F Vogel 	case IXGBE_DEV_ID_X540_BYPASS:
13885d0a26eSJack F Vogel 		hw->mac.type = ixgbe_mac_X540;
13985d0a26eSJack F Vogel 		break;
1403ec35e52SJack F Vogel 	default:
1413ec35e52SJack F Vogel 		ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
1423ec35e52SJack F Vogel 		break;
1433ec35e52SJack F Vogel 	}
1443ec35e52SJack F Vogel 
1459ca4041bSJack F Vogel 	DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n",
1469ca4041bSJack F Vogel 		  hw->mac.type, ret_val);
1473ec35e52SJack F Vogel 	return ret_val;
1483ec35e52SJack F Vogel }
1493ec35e52SJack F Vogel 
1503ec35e52SJack F Vogel /**
15113705f88SJack F Vogel  *  ixgbe_init_hw - Initialize the hardware
15213705f88SJack F Vogel  *  @hw: pointer to hardware structure
15313705f88SJack F Vogel  *
15413705f88SJack F Vogel  *  Initialize the hardware by resetting and then starting the hardware
15513705f88SJack F Vogel  **/
15613705f88SJack F Vogel s32 ixgbe_init_hw(struct ixgbe_hw *hw)
15713705f88SJack F Vogel {
1589ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw),
15913705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
16013705f88SJack F Vogel }
16113705f88SJack F Vogel 
16213705f88SJack F Vogel /**
16313705f88SJack F Vogel  *  ixgbe_reset_hw - Performs a hardware reset
16413705f88SJack F Vogel  *  @hw: pointer to hardware structure
16513705f88SJack F Vogel  *
16613705f88SJack F Vogel  *  Resets the hardware by resetting the transmit and receive units, masks and
16713705f88SJack F Vogel  *  clears all interrupts, performs a PHY reset, and performs a MAC reset
16813705f88SJack F Vogel  **/
16913705f88SJack F Vogel s32 ixgbe_reset_hw(struct ixgbe_hw *hw)
17013705f88SJack F Vogel {
1719ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw),
17213705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
17313705f88SJack F Vogel }
17413705f88SJack F Vogel 
17513705f88SJack F Vogel /**
1769ca4041bSJack F Vogel  *  ixgbe_start_hw - Prepares hardware for Rx/Tx
17713705f88SJack F Vogel  *  @hw: pointer to hardware structure
17813705f88SJack F Vogel  *
17913705f88SJack F Vogel  *  Starts the hardware by filling the bus info structure and media type,
18013705f88SJack F Vogel  *  clears all on chip counters, initializes receive address registers,
18113705f88SJack F Vogel  *  multicast table, VLAN filter table, calls routine to setup link and
18213705f88SJack F Vogel  *  flow control settings, and leaves transmit and receive units disabled
18313705f88SJack F Vogel  *  and uninitialized.
18413705f88SJack F Vogel  **/
18513705f88SJack F Vogel s32 ixgbe_start_hw(struct ixgbe_hw *hw)
18613705f88SJack F Vogel {
1879ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw),
18813705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
18913705f88SJack F Vogel }
19013705f88SJack F Vogel 
19113705f88SJack F Vogel /**
192c0014855SJack F Vogel  *  ixgbe_enable_relaxed_ordering - Enables tx relaxed ordering,
193c0014855SJack F Vogel  *  which is disabled by default in ixgbe_start_hw();
194c0014855SJack F Vogel  *
195c0014855SJack F Vogel  *  @hw: pointer to hardware structure
196c0014855SJack F Vogel  *
197c0014855SJack F Vogel  *   Enable relaxed ordering;
198c0014855SJack F Vogel  **/
199c0014855SJack F Vogel void ixgbe_enable_relaxed_ordering(struct ixgbe_hw *hw)
200c0014855SJack F Vogel {
201c0014855SJack F Vogel 	if (hw->mac.ops.enable_relaxed_ordering)
202c0014855SJack F Vogel 		hw->mac.ops.enable_relaxed_ordering(hw);
203c0014855SJack F Vogel }
204c0014855SJack F Vogel 
205c0014855SJack F Vogel /**
20613705f88SJack F Vogel  *  ixgbe_clear_hw_cntrs - Clear hardware counters
20713705f88SJack F Vogel  *  @hw: pointer to hardware structure
20813705f88SJack F Vogel  *
20913705f88SJack F Vogel  *  Clears all hardware statistics counters by reading them from the hardware
21013705f88SJack F Vogel  *  Statistics counters are clear on read.
21113705f88SJack F Vogel  **/
21213705f88SJack F Vogel s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw)
21313705f88SJack F Vogel {
2149ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw),
21513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
21613705f88SJack F Vogel }
21713705f88SJack F Vogel 
21813705f88SJack F Vogel /**
21913705f88SJack F Vogel  *  ixgbe_get_media_type - Get media type
22013705f88SJack F Vogel  *  @hw: pointer to hardware structure
22113705f88SJack F Vogel  *
22213705f88SJack F Vogel  *  Returns the media type (fiber, copper, backplane)
22313705f88SJack F Vogel  **/
22413705f88SJack F Vogel enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw)
22513705f88SJack F Vogel {
2269ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw),
22713705f88SJack F Vogel 			       ixgbe_media_type_unknown);
22813705f88SJack F Vogel }
22913705f88SJack F Vogel 
23013705f88SJack F Vogel /**
23113705f88SJack F Vogel  *  ixgbe_get_mac_addr - Get MAC address
23213705f88SJack F Vogel  *  @hw: pointer to hardware structure
23313705f88SJack F Vogel  *  @mac_addr: Adapter MAC address
23413705f88SJack F Vogel  *
23513705f88SJack F Vogel  *  Reads the adapter's MAC address from the first Receive Address Register
2369ca4041bSJack F Vogel  *  (RAR0) A reset of the adapter must have been performed prior to calling
2379ca4041bSJack F Vogel  *  this function in order for the MAC address to have been loaded from the
2389ca4041bSJack F Vogel  *  EEPROM into RAR0
23913705f88SJack F Vogel  **/
24013705f88SJack F Vogel s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr)
24113705f88SJack F Vogel {
2429ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr,
24313705f88SJack F Vogel 			       (hw, mac_addr), IXGBE_NOT_IMPLEMENTED);
24413705f88SJack F Vogel }
24513705f88SJack F Vogel 
24613705f88SJack F Vogel /**
2470ac6dfecSJack F Vogel  *  ixgbe_get_san_mac_addr - Get SAN MAC address
2480ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
2490ac6dfecSJack F Vogel  *  @san_mac_addr: SAN MAC address
2500ac6dfecSJack F Vogel  *
2510ac6dfecSJack F Vogel  *  Reads the SAN MAC address from the EEPROM, if it's available.  This is
2520ac6dfecSJack F Vogel  *  per-port, so set_lan_id() must be called before reading the addresses.
2530ac6dfecSJack F Vogel  **/
2540ac6dfecSJack F Vogel s32 ixgbe_get_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr)
2550ac6dfecSJack F Vogel {
2560ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_san_mac_addr,
2570ac6dfecSJack F Vogel 			       (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED);
2580ac6dfecSJack F Vogel }
2590ac6dfecSJack F Vogel 
2600ac6dfecSJack F Vogel /**
2610ac6dfecSJack F Vogel  *  ixgbe_set_san_mac_addr - Write a SAN MAC address
2620ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
2630ac6dfecSJack F Vogel  *  @san_mac_addr: SAN MAC address
2640ac6dfecSJack F Vogel  *
2650ac6dfecSJack F Vogel  *  Writes A SAN MAC address to the EEPROM.
2660ac6dfecSJack F Vogel  **/
2670ac6dfecSJack F Vogel s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr)
2680ac6dfecSJack F Vogel {
2690ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_san_mac_addr,
2700ac6dfecSJack F Vogel 			       (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED);
2710ac6dfecSJack F Vogel }
2720ac6dfecSJack F Vogel 
2730ac6dfecSJack F Vogel /**
2740ac6dfecSJack F Vogel  *  ixgbe_get_device_caps - Get additional device capabilities
2750ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
2760ac6dfecSJack F Vogel  *  @device_caps: the EEPROM word for device capabilities
2770ac6dfecSJack F Vogel  *
2780ac6dfecSJack F Vogel  *  Reads the extra device capabilities from the EEPROM
2790ac6dfecSJack F Vogel  **/
2800ac6dfecSJack F Vogel s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps)
2810ac6dfecSJack F Vogel {
2820ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_device_caps,
2830ac6dfecSJack F Vogel 			       (hw, device_caps), IXGBE_NOT_IMPLEMENTED);
2840ac6dfecSJack F Vogel }
2850ac6dfecSJack F Vogel 
2860ac6dfecSJack F Vogel /**
2872969bf0eSJack F Vogel  *  ixgbe_get_wwn_prefix - Get alternative WWNN/WWPN prefix from the EEPROM
2882969bf0eSJack F Vogel  *  @hw: pointer to hardware structure
2892969bf0eSJack F Vogel  *  @wwnn_prefix: the alternative WWNN prefix
2902969bf0eSJack F Vogel  *  @wwpn_prefix: the alternative WWPN prefix
2912969bf0eSJack F Vogel  *
2922969bf0eSJack F Vogel  *  This function will read the EEPROM from the alternative SAN MAC address
2932969bf0eSJack F Vogel  *  block to check the support for the alternative WWNN/WWPN prefix support.
2942969bf0eSJack F Vogel  **/
2952969bf0eSJack F Vogel s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix,
2962969bf0eSJack F Vogel 			 u16 *wwpn_prefix)
2972969bf0eSJack F Vogel {
2982969bf0eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_wwn_prefix,
2992969bf0eSJack F Vogel 			       (hw, wwnn_prefix, wwpn_prefix),
3002969bf0eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
3012969bf0eSJack F Vogel }
3022969bf0eSJack F Vogel 
3032969bf0eSJack F Vogel /**
3041a4e3449SJack F Vogel  *  ixgbe_get_fcoe_boot_status -  Get FCOE boot status from EEPROM
3051a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
3061a4e3449SJack F Vogel  *  @bs: the fcoe boot status
3071a4e3449SJack F Vogel  *
3081a4e3449SJack F Vogel  *  This function will read the FCOE boot status from the iSCSI FCOE block
3091a4e3449SJack F Vogel  **/
3101a4e3449SJack F Vogel s32 ixgbe_get_fcoe_boot_status(struct ixgbe_hw *hw, u16 *bs)
3111a4e3449SJack F Vogel {
3121a4e3449SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_fcoe_boot_status,
3131a4e3449SJack F Vogel 			       (hw, bs),
3141a4e3449SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
3151a4e3449SJack F Vogel }
3161a4e3449SJack F Vogel 
3171a4e3449SJack F Vogel /**
31813705f88SJack F Vogel  *  ixgbe_get_bus_info - Set PCI bus info
31913705f88SJack F Vogel  *  @hw: pointer to hardware structure
32013705f88SJack F Vogel  *
32113705f88SJack F Vogel  *  Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure
32213705f88SJack F Vogel  **/
32313705f88SJack F Vogel s32 ixgbe_get_bus_info(struct ixgbe_hw *hw)
32413705f88SJack F Vogel {
3259ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw),
32613705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
32713705f88SJack F Vogel }
32813705f88SJack F Vogel 
32913705f88SJack F Vogel /**
3309ca4041bSJack F Vogel  *  ixgbe_get_num_of_tx_queues - Get Tx queues
33113705f88SJack F Vogel  *  @hw: pointer to hardware structure
33213705f88SJack F Vogel  *
33313705f88SJack F Vogel  *  Returns the number of transmit queues for the given adapter.
33413705f88SJack F Vogel  **/
33513705f88SJack F Vogel u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw)
33613705f88SJack F Vogel {
3379ca4041bSJack F Vogel 	return hw->mac.max_tx_queues;
33813705f88SJack F Vogel }
33913705f88SJack F Vogel 
34013705f88SJack F Vogel /**
3419ca4041bSJack F Vogel  *  ixgbe_get_num_of_rx_queues - Get Rx queues
34213705f88SJack F Vogel  *  @hw: pointer to hardware structure
34313705f88SJack F Vogel  *
34413705f88SJack F Vogel  *  Returns the number of receive queues for the given adapter.
34513705f88SJack F Vogel  **/
34613705f88SJack F Vogel u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw)
34713705f88SJack F Vogel {
3489ca4041bSJack F Vogel 	return hw->mac.max_rx_queues;
34913705f88SJack F Vogel }
35013705f88SJack F Vogel 
35113705f88SJack F Vogel /**
3529ca4041bSJack F Vogel  *  ixgbe_stop_adapter - Disable Rx/Tx units
35313705f88SJack F Vogel  *  @hw: pointer to hardware structure
35413705f88SJack F Vogel  *
35513705f88SJack F Vogel  *  Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts,
35613705f88SJack F Vogel  *  disables transmit and receive units. The adapter_stopped flag is used by
35713705f88SJack F Vogel  *  the shared code and drivers to determine if the adapter is in a stopped
35813705f88SJack F Vogel  *  state and should not touch the hardware.
35913705f88SJack F Vogel  **/
36013705f88SJack F Vogel s32 ixgbe_stop_adapter(struct ixgbe_hw *hw)
36113705f88SJack F Vogel {
3629ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw),
36313705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
36413705f88SJack F Vogel }
36513705f88SJack F Vogel 
36613705f88SJack F Vogel /**
3671a4e3449SJack F Vogel  *  ixgbe_read_pba_string - Reads part number string from EEPROM
3681a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
3691a4e3449SJack F Vogel  *  @pba_num: stores the part number string from the EEPROM
3701a4e3449SJack F Vogel  *  @pba_num_size: part number string buffer length
3711a4e3449SJack F Vogel  *
3721a4e3449SJack F Vogel  *  Reads the part number string from the EEPROM.
3731a4e3449SJack F Vogel  **/
3741a4e3449SJack F Vogel s32 ixgbe_read_pba_string(struct ixgbe_hw *hw, u8 *pba_num, u32 pba_num_size)
3751a4e3449SJack F Vogel {
3761a4e3449SJack F Vogel 	return ixgbe_read_pba_string_generic(hw, pba_num, pba_num_size);
3771a4e3449SJack F Vogel }
3781a4e3449SJack F Vogel 
3791a4e3449SJack F Vogel /**
3809ca4041bSJack F Vogel  *  ixgbe_read_pba_num - Reads part number from EEPROM
3819ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
3829ca4041bSJack F Vogel  *  @pba_num: stores the part number from the EEPROM
3839ca4041bSJack F Vogel  *
3849ca4041bSJack F Vogel  *  Reads the part number from the EEPROM.
3859ca4041bSJack F Vogel  **/
3869ca4041bSJack F Vogel s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num)
3879ca4041bSJack F Vogel {
3889ca4041bSJack F Vogel 	return ixgbe_read_pba_num_generic(hw, pba_num);
3899ca4041bSJack F Vogel }
3909ca4041bSJack F Vogel 
3919ca4041bSJack F Vogel /**
39213705f88SJack F Vogel  *  ixgbe_identify_phy - Get PHY type
39313705f88SJack F Vogel  *  @hw: pointer to hardware structure
39413705f88SJack F Vogel  *
39513705f88SJack F Vogel  *  Determines the physical layer module found on the current adapter.
39613705f88SJack F Vogel  **/
39713705f88SJack F Vogel s32 ixgbe_identify_phy(struct ixgbe_hw *hw)
39813705f88SJack F Vogel {
39913705f88SJack F Vogel 	s32 status = IXGBE_SUCCESS;
40013705f88SJack F Vogel 
40113705f88SJack F Vogel 	if (hw->phy.type == ixgbe_phy_unknown) {
4021a4e3449SJack F Vogel 		status = ixgbe_call_func(hw, hw->phy.ops.identify, (hw),
40313705f88SJack F Vogel 					 IXGBE_NOT_IMPLEMENTED);
40413705f88SJack F Vogel 	}
40513705f88SJack F Vogel 
40613705f88SJack F Vogel 	return status;
40713705f88SJack F Vogel }
40813705f88SJack F Vogel 
40913705f88SJack F Vogel /**
41013705f88SJack F Vogel  *  ixgbe_reset_phy - Perform a PHY reset
41113705f88SJack F Vogel  *  @hw: pointer to hardware structure
41213705f88SJack F Vogel  **/
41313705f88SJack F Vogel s32 ixgbe_reset_phy(struct ixgbe_hw *hw)
41413705f88SJack F Vogel {
41513705f88SJack F Vogel 	s32 status = IXGBE_SUCCESS;
41613705f88SJack F Vogel 
41713705f88SJack F Vogel 	if (hw->phy.type == ixgbe_phy_unknown) {
4181b6e0dbaSJack F Vogel 		if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS)
41913705f88SJack F Vogel 			status = IXGBE_ERR_PHY;
42013705f88SJack F Vogel 	}
42113705f88SJack F Vogel 
42213705f88SJack F Vogel 	if (status == IXGBE_SUCCESS) {
4239ca4041bSJack F Vogel 		status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw),
42413705f88SJack F Vogel 					 IXGBE_NOT_IMPLEMENTED);
42513705f88SJack F Vogel 	}
42613705f88SJack F Vogel 	return status;
42713705f88SJack F Vogel }
42813705f88SJack F Vogel 
42913705f88SJack F Vogel /**
4309ca4041bSJack F Vogel  *  ixgbe_get_phy_firmware_version -
4319ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
4329ca4041bSJack F Vogel  *  @firmware_version: pointer to firmware version
4339ca4041bSJack F Vogel  **/
4349ca4041bSJack F Vogel s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version)
4359ca4041bSJack F Vogel {
4369ca4041bSJack F Vogel 	s32 status = IXGBE_SUCCESS;
4379ca4041bSJack F Vogel 
4389ca4041bSJack F Vogel 	status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version,
4399ca4041bSJack F Vogel 				 (hw, firmware_version),
4409ca4041bSJack F Vogel 				 IXGBE_NOT_IMPLEMENTED);
4419ca4041bSJack F Vogel 	return status;
4429ca4041bSJack F Vogel }
4439ca4041bSJack F Vogel 
4449ca4041bSJack F Vogel /**
44513705f88SJack F Vogel  *  ixgbe_read_phy_reg - Read PHY register
44613705f88SJack F Vogel  *  @hw: pointer to hardware structure
44713705f88SJack F Vogel  *  @reg_addr: 32 bit address of PHY register to read
44813705f88SJack F Vogel  *  @phy_data: Pointer to read data from PHY register
44913705f88SJack F Vogel  *
45013705f88SJack F Vogel  *  Reads a value from a specified PHY register
45113705f88SJack F Vogel  **/
45213705f88SJack F Vogel s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
45313705f88SJack F Vogel 		       u16 *phy_data)
45413705f88SJack F Vogel {
4550ac6dfecSJack F Vogel 	if (hw->phy.id == 0)
4560ac6dfecSJack F Vogel 		ixgbe_identify_phy(hw);
4570ac6dfecSJack F Vogel 
4589ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr,
4599ca4041bSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
46013705f88SJack F Vogel }
46113705f88SJack F Vogel 
46213705f88SJack F Vogel /**
46313705f88SJack F Vogel  *  ixgbe_write_phy_reg - Write PHY register
46413705f88SJack F Vogel  *  @hw: pointer to hardware structure
46513705f88SJack F Vogel  *  @reg_addr: 32 bit PHY register to write
46613705f88SJack F Vogel  *  @phy_data: Data to write to the PHY register
46713705f88SJack F Vogel  *
46813705f88SJack F Vogel  *  Writes a value to specified PHY register
46913705f88SJack F Vogel  **/
47013705f88SJack F Vogel s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
47113705f88SJack F Vogel 			u16 phy_data)
47213705f88SJack F Vogel {
4730ac6dfecSJack F Vogel 	if (hw->phy.id == 0)
4740ac6dfecSJack F Vogel 		ixgbe_identify_phy(hw);
4750ac6dfecSJack F Vogel 
4769ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr,
4779ca4041bSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
47813705f88SJack F Vogel }
47913705f88SJack F Vogel 
4809ca4041bSJack F Vogel /**
4819ca4041bSJack F Vogel  *  ixgbe_setup_phy_link - Restart PHY autoneg
4829ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
4839ca4041bSJack F Vogel  *
4849ca4041bSJack F Vogel  *  Restart autonegotiation and PHY and waits for completion.
4859ca4041bSJack F Vogel  **/
4869ca4041bSJack F Vogel s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw)
4879ca4041bSJack F Vogel {
4889ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw),
48913705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
49013705f88SJack F Vogel }
4919ca4041bSJack F Vogel 
4929ca4041bSJack F Vogel /**
4939ca4041bSJack F Vogel  *  ixgbe_check_phy_link - Determine link and speed status
4949ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
4959ca4041bSJack F Vogel  *
4969ca4041bSJack F Vogel  *  Reads a PHY register to determine if link is up and the current speed for
4979ca4041bSJack F Vogel  *  the PHY.
4989ca4041bSJack F Vogel  **/
4999ca4041bSJack F Vogel s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
5009ca4041bSJack F Vogel 			 bool *link_up)
5019ca4041bSJack F Vogel {
5029ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed,
5039ca4041bSJack F Vogel 			       link_up), IXGBE_NOT_IMPLEMENTED);
5049ca4041bSJack F Vogel }
5059ca4041bSJack F Vogel 
5069ca4041bSJack F Vogel /**
5079ca4041bSJack F Vogel  *  ixgbe_setup_phy_link_speed - Set auto advertise
5089ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
5099ca4041bSJack F Vogel  *  @speed: new link speed
5109ca4041bSJack F Vogel  *
5119ca4041bSJack F Vogel  *  Sets the auto advertised capabilities
5129ca4041bSJack F Vogel  **/
5139ca4041bSJack F Vogel s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
5149ca4041bSJack F Vogel 			       bool autoneg_wait_to_complete)
5159ca4041bSJack F Vogel {
5169ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.setup_link_speed, (hw, speed,
5170ecc2ff0SJack F Vogel 			       autoneg_wait_to_complete),
5189ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
51913705f88SJack F Vogel }
52013705f88SJack F Vogel 
52113705f88SJack F Vogel /**
52213705f88SJack F Vogel  *  ixgbe_check_link - Get link and speed status
52313705f88SJack F Vogel  *  @hw: pointer to hardware structure
52413705f88SJack F Vogel  *
52513705f88SJack F Vogel  *  Reads the links register to determine if link is up and the current speed
52613705f88SJack F Vogel  **/
52713705f88SJack F Vogel s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
5289ca4041bSJack F Vogel 		     bool *link_up, bool link_up_wait_to_complete)
52913705f88SJack F Vogel {
5309ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.check_link, (hw, speed,
5319ca4041bSJack F Vogel 			       link_up, link_up_wait_to_complete),
53213705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
53313705f88SJack F Vogel }
53413705f88SJack F Vogel 
53513705f88SJack F Vogel /**
5361a4e3449SJack F Vogel  *  ixgbe_disable_tx_laser - Disable Tx laser
5371a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
5381a4e3449SJack F Vogel  *
5391a4e3449SJack F Vogel  *  If the driver needs to disable the laser on SFI optics.
5401a4e3449SJack F Vogel  **/
5411a4e3449SJack F Vogel void ixgbe_disable_tx_laser(struct ixgbe_hw *hw)
5421a4e3449SJack F Vogel {
5431a4e3449SJack F Vogel 	if (hw->mac.ops.disable_tx_laser)
5441a4e3449SJack F Vogel 		hw->mac.ops.disable_tx_laser(hw);
5451a4e3449SJack F Vogel }
5461a4e3449SJack F Vogel 
5471a4e3449SJack F Vogel /**
5481a4e3449SJack F Vogel  *  ixgbe_enable_tx_laser - Enable Tx laser
5491a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
5501a4e3449SJack F Vogel  *
5511a4e3449SJack F Vogel  *  If the driver needs to enable the laser on SFI optics.
5521a4e3449SJack F Vogel  **/
5531a4e3449SJack F Vogel void ixgbe_enable_tx_laser(struct ixgbe_hw *hw)
5541a4e3449SJack F Vogel {
5551a4e3449SJack F Vogel 	if (hw->mac.ops.enable_tx_laser)
5561a4e3449SJack F Vogel 		hw->mac.ops.enable_tx_laser(hw);
5571a4e3449SJack F Vogel }
5581a4e3449SJack F Vogel 
5591a4e3449SJack F Vogel /**
5601a4e3449SJack F Vogel  *  ixgbe_flap_tx_laser - flap Tx laser to start autotry process
5611a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
5621a4e3449SJack F Vogel  *
5631a4e3449SJack F Vogel  *  When the driver changes the link speeds that it can support then
5641a4e3449SJack F Vogel  *  flap the tx laser to alert the link partner to start autotry
5651a4e3449SJack F Vogel  *  process on its end.
5661a4e3449SJack F Vogel  **/
5671a4e3449SJack F Vogel void ixgbe_flap_tx_laser(struct ixgbe_hw *hw)
5681a4e3449SJack F Vogel {
5691a4e3449SJack F Vogel 	if (hw->mac.ops.flap_tx_laser)
5701a4e3449SJack F Vogel 		hw->mac.ops.flap_tx_laser(hw);
5711a4e3449SJack F Vogel }
5721a4e3449SJack F Vogel 
5731a4e3449SJack F Vogel /**
5742969bf0eSJack F Vogel  *  ixgbe_setup_link - Set link speed
57513705f88SJack F Vogel  *  @hw: pointer to hardware structure
57613705f88SJack F Vogel  *  @speed: new link speed
57713705f88SJack F Vogel  *
5782969bf0eSJack F Vogel  *  Configures link settings.  Restarts the link.
5792969bf0eSJack F Vogel  *  Performs autonegotiation if needed.
58013705f88SJack F Vogel  **/
5812969bf0eSJack F Vogel s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed,
58213705f88SJack F Vogel 		     bool autoneg_wait_to_complete)
58313705f88SJack F Vogel {
5842969bf0eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw, speed,
5850ecc2ff0SJack F Vogel 			       autoneg_wait_to_complete),
58613705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
58713705f88SJack F Vogel }
58813705f88SJack F Vogel 
58913705f88SJack F Vogel /**
5909ca4041bSJack F Vogel  *  ixgbe_get_link_capabilities - Returns link capabilities
59113705f88SJack F Vogel  *  @hw: pointer to hardware structure
59213705f88SJack F Vogel  *
5939ca4041bSJack F Vogel  *  Determines the link capabilities of the current configuration.
59413705f88SJack F Vogel  **/
5959ca4041bSJack F Vogel s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
59613705f88SJack F Vogel 				bool *autoneg)
59713705f88SJack F Vogel {
5989ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw,
5999ca4041bSJack F Vogel 			       speed, autoneg), IXGBE_NOT_IMPLEMENTED);
60013705f88SJack F Vogel }
60113705f88SJack F Vogel 
60213705f88SJack F Vogel /**
6039ca4041bSJack F Vogel  *  ixgbe_led_on - Turn on LEDs
60413705f88SJack F Vogel  *  @hw: pointer to hardware structure
60513705f88SJack F Vogel  *  @index: led number to turn on
60613705f88SJack F Vogel  *
60713705f88SJack F Vogel  *  Turns on the software controllable LEDs.
60813705f88SJack F Vogel  **/
60913705f88SJack F Vogel s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index)
61013705f88SJack F Vogel {
6119ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index),
61213705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
61313705f88SJack F Vogel }
61413705f88SJack F Vogel 
61513705f88SJack F Vogel /**
6169ca4041bSJack F Vogel  *  ixgbe_led_off - Turn off LEDs
61713705f88SJack F Vogel  *  @hw: pointer to hardware structure
61813705f88SJack F Vogel  *  @index: led number to turn off
61913705f88SJack F Vogel  *
62013705f88SJack F Vogel  *  Turns off the software controllable LEDs.
62113705f88SJack F Vogel  **/
62213705f88SJack F Vogel s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index)
62313705f88SJack F Vogel {
6249ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index),
62513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
62613705f88SJack F Vogel }
62713705f88SJack F Vogel 
62813705f88SJack F Vogel /**
6299ca4041bSJack F Vogel  *  ixgbe_blink_led_start - Blink LEDs
63013705f88SJack F Vogel  *  @hw: pointer to hardware structure
63113705f88SJack F Vogel  *  @index: led number to blink
63213705f88SJack F Vogel  *
63313705f88SJack F Vogel  *  Blink LED based on index.
63413705f88SJack F Vogel  **/
63513705f88SJack F Vogel s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index)
63613705f88SJack F Vogel {
6379ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index),
63813705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
63913705f88SJack F Vogel }
64013705f88SJack F Vogel 
64113705f88SJack F Vogel /**
6429ca4041bSJack F Vogel  *  ixgbe_blink_led_stop - Stop blinking LEDs
64313705f88SJack F Vogel  *  @hw: pointer to hardware structure
64413705f88SJack F Vogel  *
64513705f88SJack F Vogel  *  Stop blinking LED based on index.
64613705f88SJack F Vogel  **/
64713705f88SJack F Vogel s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index)
64813705f88SJack F Vogel {
6499ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index),
65013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
65113705f88SJack F Vogel }
65213705f88SJack F Vogel 
65313705f88SJack F Vogel /**
6549ca4041bSJack F Vogel  *  ixgbe_init_eeprom_params - Initialize EEPROM parameters
65513705f88SJack F Vogel  *  @hw: pointer to hardware structure
65613705f88SJack F Vogel  *
65713705f88SJack F Vogel  *  Initializes the EEPROM parameters ixgbe_eeprom_info within the
65813705f88SJack F Vogel  *  ixgbe_hw struct in order to set up EEPROM access.
65913705f88SJack F Vogel  **/
66013705f88SJack F Vogel s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw)
66113705f88SJack F Vogel {
6629ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw),
66313705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
66413705f88SJack F Vogel }
66513705f88SJack F Vogel 
66613705f88SJack F Vogel 
66713705f88SJack F Vogel /**
66813705f88SJack F Vogel  *  ixgbe_write_eeprom - Write word to EEPROM
66913705f88SJack F Vogel  *  @hw: pointer to hardware structure
67013705f88SJack F Vogel  *  @offset: offset within the EEPROM to be written to
67113705f88SJack F Vogel  *  @data: 16 bit word to be written to the EEPROM
67213705f88SJack F Vogel  *
67313705f88SJack F Vogel  *  Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not
67413705f88SJack F Vogel  *  called after this function, the EEPROM will most likely contain an
67513705f88SJack F Vogel  *  invalid checksum.
67613705f88SJack F Vogel  **/
67713705f88SJack F Vogel s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data)
67813705f88SJack F Vogel {
6799ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data),
68013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
68113705f88SJack F Vogel }
68213705f88SJack F Vogel 
68313705f88SJack F Vogel /**
68485d0a26eSJack F Vogel  *  ixgbe_write_eeprom_buffer - Write word(s) to EEPROM
68585d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
68685d0a26eSJack F Vogel  *  @offset: offset within the EEPROM to be written to
68785d0a26eSJack F Vogel  *  @data: 16 bit word(s) to be written to the EEPROM
68885d0a26eSJack F Vogel  *  @words: number of words
68985d0a26eSJack F Vogel  *
69085d0a26eSJack F Vogel  *  Writes 16 bit word(s) to EEPROM. If ixgbe_eeprom_update_checksum is not
69185d0a26eSJack F Vogel  *  called after this function, the EEPROM will most likely contain an
69285d0a26eSJack F Vogel  *  invalid checksum.
69385d0a26eSJack F Vogel  **/
69485d0a26eSJack F Vogel s32 ixgbe_write_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, u16 words,
69585d0a26eSJack F Vogel 			      u16 *data)
69685d0a26eSJack F Vogel {
69785d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.write_buffer,
69885d0a26eSJack F Vogel 			       (hw, offset, words, data),
69985d0a26eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
70085d0a26eSJack F Vogel }
70185d0a26eSJack F Vogel 
70285d0a26eSJack F Vogel /**
70313705f88SJack F Vogel  *  ixgbe_read_eeprom - Read word from EEPROM
70413705f88SJack F Vogel  *  @hw: pointer to hardware structure
70513705f88SJack F Vogel  *  @offset: offset within the EEPROM to be read
70613705f88SJack F Vogel  *  @data: read 16 bit value from EEPROM
70713705f88SJack F Vogel  *
70813705f88SJack F Vogel  *  Reads 16 bit value from EEPROM
70913705f88SJack F Vogel  **/
71013705f88SJack F Vogel s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data)
71113705f88SJack F Vogel {
7129ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data),
71313705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
71413705f88SJack F Vogel }
71513705f88SJack F Vogel 
71613705f88SJack F Vogel /**
71785d0a26eSJack F Vogel  *  ixgbe_read_eeprom_buffer - Read word(s) from EEPROM
71885d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
71985d0a26eSJack F Vogel  *  @offset: offset within the EEPROM to be read
72085d0a26eSJack F Vogel  *  @data: read 16 bit word(s) from EEPROM
72185d0a26eSJack F Vogel  *  @words: number of words
72285d0a26eSJack F Vogel  *
72385d0a26eSJack F Vogel  *  Reads 16 bit word(s) from EEPROM
72485d0a26eSJack F Vogel  **/
72585d0a26eSJack F Vogel s32 ixgbe_read_eeprom_buffer(struct ixgbe_hw *hw, u16 offset,
72685d0a26eSJack F Vogel 			     u16 words, u16 *data)
72785d0a26eSJack F Vogel {
72885d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.read_buffer,
72985d0a26eSJack F Vogel 			       (hw, offset, words, data),
73085d0a26eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
73185d0a26eSJack F Vogel }
73285d0a26eSJack F Vogel 
73385d0a26eSJack F Vogel /**
73413705f88SJack F Vogel  *  ixgbe_validate_eeprom_checksum - Validate EEPROM checksum
73513705f88SJack F Vogel  *  @hw: pointer to hardware structure
73613705f88SJack F Vogel  *  @checksum_val: calculated checksum
73713705f88SJack F Vogel  *
73813705f88SJack F Vogel  *  Performs checksum calculation and validates the EEPROM checksum
73913705f88SJack F Vogel  **/
74013705f88SJack F Vogel s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val)
74113705f88SJack F Vogel {
7429ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum,
74313705f88SJack F Vogel 			       (hw, checksum_val), IXGBE_NOT_IMPLEMENTED);
74413705f88SJack F Vogel }
74513705f88SJack F Vogel 
74613705f88SJack F Vogel /**
74713705f88SJack F Vogel  *  ixgbe_eeprom_update_checksum - Updates the EEPROM checksum
74813705f88SJack F Vogel  *  @hw: pointer to hardware structure
74913705f88SJack F Vogel  **/
75013705f88SJack F Vogel s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw)
75113705f88SJack F Vogel {
7529ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw),
75313705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
75413705f88SJack F Vogel }
75513705f88SJack F Vogel 
75613705f88SJack F Vogel /**
7570ac6dfecSJack F Vogel  *  ixgbe_insert_mac_addr - Find a RAR for this mac address
7580ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
7590ac6dfecSJack F Vogel  *  @addr: Address to put into receive address register
7600ac6dfecSJack F Vogel  *  @vmdq: VMDq pool to assign
7610ac6dfecSJack F Vogel  *
7620ac6dfecSJack F Vogel  *  Puts an ethernet address into a receive address register, or
7630ac6dfecSJack F Vogel  *  finds the rar that it is aleady in; adds to the pool list
7640ac6dfecSJack F Vogel  **/
7650ac6dfecSJack F Vogel s32 ixgbe_insert_mac_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
7660ac6dfecSJack F Vogel {
7670ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.insert_mac_addr,
7680ac6dfecSJack F Vogel 			       (hw, addr, vmdq),
7690ac6dfecSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
7700ac6dfecSJack F Vogel }
7710ac6dfecSJack F Vogel 
7720ac6dfecSJack F Vogel /**
7739ca4041bSJack F Vogel  *  ixgbe_set_rar - Set Rx address register
77413705f88SJack F Vogel  *  @hw: pointer to hardware structure
77513705f88SJack F Vogel  *  @index: Receive address register to write
7769ca4041bSJack F Vogel  *  @addr: Address to put into receive address register
7779ca4041bSJack F Vogel  *  @vmdq: VMDq "set"
77813705f88SJack F Vogel  *  @enable_addr: set flag that address is active
77913705f88SJack F Vogel  *
78013705f88SJack F Vogel  *  Puts an ethernet address into a receive address register.
78113705f88SJack F Vogel  **/
7829ca4041bSJack F Vogel s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
78313705f88SJack F Vogel 		  u32 enable_addr)
78413705f88SJack F Vogel {
7859ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq,
78613705f88SJack F Vogel 			       enable_addr), IXGBE_NOT_IMPLEMENTED);
78713705f88SJack F Vogel }
78813705f88SJack F Vogel 
78913705f88SJack F Vogel /**
7905b7f4cedSJack F Vogel  *  ixgbe_clear_rar - Clear Rx address register
7915b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
7925b7f4cedSJack F Vogel  *  @index: Receive address register to write
7935b7f4cedSJack F Vogel  *
7945b7f4cedSJack F Vogel  *  Puts an ethernet address into a receive address register.
7955b7f4cedSJack F Vogel  **/
7965b7f4cedSJack F Vogel s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index)
7975b7f4cedSJack F Vogel {
7985b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index),
7995b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
8005b7f4cedSJack F Vogel }
8015b7f4cedSJack F Vogel 
8025b7f4cedSJack F Vogel /**
8039ca4041bSJack F Vogel  *  ixgbe_set_vmdq - Associate a VMDq index with a receive address
8049ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
8059ca4041bSJack F Vogel  *  @rar: receive address register index to associate with VMDq index
8069ca4041bSJack F Vogel  *  @vmdq: VMDq set or pool index
8079ca4041bSJack F Vogel  **/
8089ca4041bSJack F Vogel s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
8099ca4041bSJack F Vogel {
8109ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq),
8119ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
812a621e3c8SJack F Vogel 
813a621e3c8SJack F Vogel }
814a621e3c8SJack F Vogel 
815a621e3c8SJack F Vogel /**
816a621e3c8SJack F Vogel  *  ixgbe_set_vmdq_san_mac - Associate VMDq index 127 with a receive address
817a621e3c8SJack F Vogel  *  @hw: pointer to hardware structure
818a621e3c8SJack F Vogel  *  @vmdq: VMDq default pool index
819a621e3c8SJack F Vogel  **/
820a621e3c8SJack F Vogel s32 ixgbe_set_vmdq_san_mac(struct ixgbe_hw *hw, u32 vmdq)
821a621e3c8SJack F Vogel {
822a621e3c8SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vmdq_san_mac,
823a621e3c8SJack F Vogel 			       (hw, vmdq), IXGBE_NOT_IMPLEMENTED);
8249ca4041bSJack F Vogel }
8259ca4041bSJack F Vogel 
8269ca4041bSJack F Vogel /**
8275b7f4cedSJack F Vogel  *  ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address
8285b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
8295b7f4cedSJack F Vogel  *  @rar: receive address register index to disassociate with VMDq index
8305b7f4cedSJack F Vogel  *  @vmdq: VMDq set or pool index
8315b7f4cedSJack F Vogel  **/
8325b7f4cedSJack F Vogel s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
8335b7f4cedSJack F Vogel {
8345b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq),
8355b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
8365b7f4cedSJack F Vogel }
8375b7f4cedSJack F Vogel 
8385b7f4cedSJack F Vogel /**
83913705f88SJack F Vogel  *  ixgbe_init_rx_addrs - Initializes receive address filters.
84013705f88SJack F Vogel  *  @hw: pointer to hardware structure
84113705f88SJack F Vogel  *
84213705f88SJack F Vogel  *  Places the MAC address in receive address register 0 and clears the rest
8439ca4041bSJack F Vogel  *  of the receive address registers. Clears the multicast table. Assumes
84413705f88SJack F Vogel  *  the receiver is in reset when the routine is called.
84513705f88SJack F Vogel  **/
84613705f88SJack F Vogel s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw)
84713705f88SJack F Vogel {
8489ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw),
84913705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
85013705f88SJack F Vogel }
85113705f88SJack F Vogel 
85213705f88SJack F Vogel /**
85313705f88SJack F Vogel  *  ixgbe_get_num_rx_addrs - Returns the number of RAR entries.
85413705f88SJack F Vogel  *  @hw: pointer to hardware structure
85513705f88SJack F Vogel  **/
85613705f88SJack F Vogel u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw)
85713705f88SJack F Vogel {
8589ca4041bSJack F Vogel 	return hw->mac.num_rar_entries;
8599ca4041bSJack F Vogel }
8609ca4041bSJack F Vogel 
8619ca4041bSJack F Vogel /**
8629ca4041bSJack F Vogel  *  ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses
8639ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
8649ca4041bSJack F Vogel  *  @addr_list: the list of new multicast addresses
8659ca4041bSJack F Vogel  *  @addr_count: number of addresses
8669ca4041bSJack F Vogel  *  @func: iterator function to walk the multicast address list
8679ca4041bSJack F Vogel  *
8689ca4041bSJack F Vogel  *  The given list replaces any existing list. Clears the secondary addrs from
8699ca4041bSJack F Vogel  *  receive address registers. Uses unused receive address registers for the
8709ca4041bSJack F Vogel  *  first secondary addresses, and falls back to promiscuous mode as needed.
8719ca4041bSJack F Vogel  **/
8729ca4041bSJack F Vogel s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list,
8739ca4041bSJack F Vogel 			      u32 addr_count, ixgbe_mc_addr_itr func)
8749ca4041bSJack F Vogel {
8759ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw,
8769ca4041bSJack F Vogel 			       addr_list, addr_count, func),
8779ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
87813705f88SJack F Vogel }
87913705f88SJack F Vogel 
88013705f88SJack F Vogel /**
88113705f88SJack F Vogel  *  ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses
88213705f88SJack F Vogel  *  @hw: pointer to hardware structure
88313705f88SJack F Vogel  *  @mc_addr_list: the list of new multicast addresses
88413705f88SJack F Vogel  *  @mc_addr_count: number of addresses
8859ca4041bSJack F Vogel  *  @func: iterator function to walk the multicast address list
88613705f88SJack F Vogel  *
88713705f88SJack F Vogel  *  The given list replaces any existing list. Clears the MC addrs from receive
8889ca4041bSJack F Vogel  *  address registers and the multicast table. Uses unused receive address
88913705f88SJack F Vogel  *  registers for the first multicast addresses, and hashes the rest into the
89013705f88SJack F Vogel  *  multicast table.
89113705f88SJack F Vogel  **/
89213705f88SJack F Vogel s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list,
89385d0a26eSJack F Vogel 			      u32 mc_addr_count, ixgbe_mc_addr_itr func,
89485d0a26eSJack F Vogel 			      bool clear)
89513705f88SJack F Vogel {
8969ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw,
89785d0a26eSJack F Vogel 			       mc_addr_list, mc_addr_count, func, clear),
89813705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
89913705f88SJack F Vogel }
90013705f88SJack F Vogel 
90113705f88SJack F Vogel /**
90213705f88SJack F Vogel  *  ixgbe_enable_mc - Enable multicast address in RAR
90313705f88SJack F Vogel  *  @hw: pointer to hardware structure
90413705f88SJack F Vogel  *
90513705f88SJack F Vogel  *  Enables multicast address in RAR and the use of the multicast hash table.
90613705f88SJack F Vogel  **/
90713705f88SJack F Vogel s32 ixgbe_enable_mc(struct ixgbe_hw *hw)
90813705f88SJack F Vogel {
9099ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw),
91013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
91113705f88SJack F Vogel }
91213705f88SJack F Vogel 
91313705f88SJack F Vogel /**
91413705f88SJack F Vogel  *  ixgbe_disable_mc - Disable multicast address in RAR
91513705f88SJack F Vogel  *  @hw: pointer to hardware structure
91613705f88SJack F Vogel  *
91713705f88SJack F Vogel  *  Disables multicast address in RAR and the use of the multicast hash table.
91813705f88SJack F Vogel  **/
91913705f88SJack F Vogel s32 ixgbe_disable_mc(struct ixgbe_hw *hw)
92013705f88SJack F Vogel {
9219ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw),
92213705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
92313705f88SJack F Vogel }
92413705f88SJack F Vogel 
92513705f88SJack F Vogel /**
92613705f88SJack F Vogel  *  ixgbe_clear_vfta - Clear VLAN filter table
92713705f88SJack F Vogel  *  @hw: pointer to hardware structure
92813705f88SJack F Vogel  *
92913705f88SJack F Vogel  *  Clears the VLAN filer table, and the VMDq index associated with the filter
93013705f88SJack F Vogel  **/
93113705f88SJack F Vogel s32 ixgbe_clear_vfta(struct ixgbe_hw *hw)
93213705f88SJack F Vogel {
9339ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw),
93413705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
93513705f88SJack F Vogel }
93613705f88SJack F Vogel 
93713705f88SJack F Vogel /**
93813705f88SJack F Vogel  *  ixgbe_set_vfta - Set VLAN filter table
93913705f88SJack F Vogel  *  @hw: pointer to hardware structure
94013705f88SJack F Vogel  *  @vlan: VLAN id to write to VLAN filter
94113705f88SJack F Vogel  *  @vind: VMDq output index that maps queue to VLAN id in VFTA
94213705f88SJack F Vogel  *  @vlan_on: boolean flag to turn on/off VLAN in VFTA
94313705f88SJack F Vogel  *
94413705f88SJack F Vogel  *  Turn on/off specified VLAN in the VLAN filter table.
94513705f88SJack F Vogel  **/
94613705f88SJack F Vogel s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on)
94713705f88SJack F Vogel {
9489ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind,
94913705f88SJack F Vogel 			       vlan_on), IXGBE_NOT_IMPLEMENTED);
95013705f88SJack F Vogel }
95113705f88SJack F Vogel 
95213705f88SJack F Vogel /**
95385d0a26eSJack F Vogel  *  ixgbe_set_vlvf - Set VLAN Pool Filter
95485d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
95585d0a26eSJack F Vogel  *  @vlan: VLAN id to write to VLAN filter
95685d0a26eSJack F Vogel  *  @vind: VMDq output index that maps queue to VLAN id in VFVFB
95785d0a26eSJack F Vogel  *  @vlan_on: boolean flag to turn on/off VLAN in VFVF
95885d0a26eSJack F Vogel  *  @vfta_changed: pointer to boolean flag which indicates whether VFTA
95985d0a26eSJack F Vogel  *                 should be changed
96085d0a26eSJack F Vogel  *
96185d0a26eSJack F Vogel  *  Turn on/off specified bit in VLVF table.
96285d0a26eSJack F Vogel  **/
96385d0a26eSJack F Vogel s32 ixgbe_set_vlvf(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on,
96485d0a26eSJack F Vogel 		    bool *vfta_changed)
96585d0a26eSJack F Vogel {
96685d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vlvf, (hw, vlan, vind,
96785d0a26eSJack F Vogel 			       vlan_on, vfta_changed), IXGBE_NOT_IMPLEMENTED);
96885d0a26eSJack F Vogel }
96985d0a26eSJack F Vogel 
97085d0a26eSJack F Vogel /**
9710ac6dfecSJack F Vogel  *  ixgbe_fc_enable - Enable flow control
97213705f88SJack F Vogel  *  @hw: pointer to hardware structure
97313705f88SJack F Vogel  *
97413705f88SJack F Vogel  *  Configures the flow control settings based on SW configuration.
97513705f88SJack F Vogel  **/
976a621e3c8SJack F Vogel s32 ixgbe_fc_enable(struct ixgbe_hw *hw)
97713705f88SJack F Vogel {
978a621e3c8SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.fc_enable, (hw),
97913705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
98013705f88SJack F Vogel }
98113705f88SJack F Vogel 
9823ec35e52SJack F Vogel /**
98385d0a26eSJack F Vogel  * ixgbe_set_fw_drv_ver - Try to send the driver version number FW
98485d0a26eSJack F Vogel  * @hw: pointer to hardware structure
98585d0a26eSJack F Vogel  * @maj: driver major number to be sent to firmware
98685d0a26eSJack F Vogel  * @min: driver minor number to be sent to firmware
98785d0a26eSJack F Vogel  * @build: driver build number to be sent to firmware
98885d0a26eSJack F Vogel  * @ver: driver version number to be sent to firmware
98985d0a26eSJack F Vogel  **/
99085d0a26eSJack F Vogel s32 ixgbe_set_fw_drv_ver(struct ixgbe_hw *hw, u8 maj, u8 min, u8 build,
99185d0a26eSJack F Vogel 			 u8 ver)
99285d0a26eSJack F Vogel {
99385d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_fw_drv_ver, (hw, maj, min,
99485d0a26eSJack F Vogel 			       build, ver), IXGBE_NOT_IMPLEMENTED);
99585d0a26eSJack F Vogel }
99685d0a26eSJack F Vogel 
99785d0a26eSJack F Vogel 
99885d0a26eSJack F Vogel /**
9993ec35e52SJack F Vogel  *  ixgbe_read_analog_reg8 - Reads 8 bit analog register
10003ec35e52SJack F Vogel  *  @hw: pointer to hardware structure
10013ec35e52SJack F Vogel  *  @reg: analog register to read
10023ec35e52SJack F Vogel  *  @val: read value
10033ec35e52SJack F Vogel  *
10043ec35e52SJack F Vogel  *  Performs write operation to analog register specified.
10053ec35e52SJack F Vogel  **/
10063ec35e52SJack F Vogel s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val)
10073ec35e52SJack F Vogel {
10089ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg,
10099ca4041bSJack F Vogel 			       val), IXGBE_NOT_IMPLEMENTED);
10103ec35e52SJack F Vogel }
10113ec35e52SJack F Vogel 
10123ec35e52SJack F Vogel /**
10133ec35e52SJack F Vogel  *  ixgbe_write_analog_reg8 - Writes 8 bit analog register
10143ec35e52SJack F Vogel  *  @hw: pointer to hardware structure
10153ec35e52SJack F Vogel  *  @reg: analog register to write
10163ec35e52SJack F Vogel  *  @val: value to write
10173ec35e52SJack F Vogel  *
10183ec35e52SJack F Vogel  *  Performs write operation to Atlas analog register specified.
10193ec35e52SJack F Vogel  **/
10203ec35e52SJack F Vogel s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val)
10213ec35e52SJack F Vogel {
10229ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg,
10239ca4041bSJack F Vogel 			       val), IXGBE_NOT_IMPLEMENTED);
10243ec35e52SJack F Vogel }
10253ec35e52SJack F Vogel 
10265b7f4cedSJack F Vogel /**
10275b7f4cedSJack F Vogel  *  ixgbe_init_uta_tables - Initializes Unicast Table Arrays.
10285b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
10295b7f4cedSJack F Vogel  *
10305b7f4cedSJack F Vogel  *  Initializes the Unicast Table Arrays to zero on device load.  This
10315b7f4cedSJack F Vogel  *  is part of the Rx init addr execution path.
10325b7f4cedSJack F Vogel  **/
10335b7f4cedSJack F Vogel s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw)
10345b7f4cedSJack F Vogel {
10355b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw),
10365b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
10375b7f4cedSJack F Vogel }
10381b6e0dbaSJack F Vogel 
10391b6e0dbaSJack F Vogel /**
10400ac6dfecSJack F Vogel  *  ixgbe_read_i2c_byte - Reads 8 bit word over I2C at specified device address
10410ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
10420ac6dfecSJack F Vogel  *  @byte_offset: byte offset to read
10430ac6dfecSJack F Vogel  *  @data: value read
10440ac6dfecSJack F Vogel  *
10450ac6dfecSJack F Vogel  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
10460ac6dfecSJack F Vogel  **/
10470ac6dfecSJack F Vogel s32 ixgbe_read_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr,
10480ac6dfecSJack F Vogel 			u8 *data)
10490ac6dfecSJack F Vogel {
10500ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte, (hw, byte_offset,
10510ac6dfecSJack F Vogel 			       dev_addr, data), IXGBE_NOT_IMPLEMENTED);
10520ac6dfecSJack F Vogel }
10530ac6dfecSJack F Vogel 
10540ac6dfecSJack F Vogel /**
10550ac6dfecSJack F Vogel  *  ixgbe_write_i2c_byte - Writes 8 bit word over I2C
10560ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
10570ac6dfecSJack F Vogel  *  @byte_offset: byte offset to write
10580ac6dfecSJack F Vogel  *  @data: value to write
10590ac6dfecSJack F Vogel  *
10600ac6dfecSJack F Vogel  *  Performs byte write operation to SFP module's EEPROM over I2C interface
10610ac6dfecSJack F Vogel  *  at a specified device address.
10620ac6dfecSJack F Vogel  **/
10630ac6dfecSJack F Vogel s32 ixgbe_write_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr,
10640ac6dfecSJack F Vogel 			 u8 data)
10650ac6dfecSJack F Vogel {
10660ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte, (hw, byte_offset,
10670ac6dfecSJack F Vogel 			       dev_addr, data), IXGBE_NOT_IMPLEMENTED);
10680ac6dfecSJack F Vogel }
10690ac6dfecSJack F Vogel 
10700ac6dfecSJack F Vogel /**
10710ac6dfecSJack F Vogel  *  ixgbe_write_i2c_eeprom - Writes 8 bit EEPROM word over I2C interface
10720ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
10730ac6dfecSJack F Vogel  *  @byte_offset: EEPROM byte offset to write
10740ac6dfecSJack F Vogel  *  @eeprom_data: value to write
10750ac6dfecSJack F Vogel  *
10760ac6dfecSJack F Vogel  *  Performs byte write operation to SFP module's EEPROM over I2C interface.
10770ac6dfecSJack F Vogel  **/
10780ac6dfecSJack F Vogel s32 ixgbe_write_i2c_eeprom(struct ixgbe_hw *hw,
10790ac6dfecSJack F Vogel 			   u8 byte_offset, u8 eeprom_data)
10800ac6dfecSJack F Vogel {
10810ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_eeprom,
10820ac6dfecSJack F Vogel 			       (hw, byte_offset, eeprom_data),
10830ac6dfecSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
10840ac6dfecSJack F Vogel }
10850ac6dfecSJack F Vogel 
10860ac6dfecSJack F Vogel /**
10871b6e0dbaSJack F Vogel  *  ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface
10881b6e0dbaSJack F Vogel  *  @hw: pointer to hardware structure
10891b6e0dbaSJack F Vogel  *  @byte_offset: EEPROM byte offset to read
10901b6e0dbaSJack F Vogel  *  @eeprom_data: value read
10911b6e0dbaSJack F Vogel  *
10921b6e0dbaSJack F Vogel  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
10931b6e0dbaSJack F Vogel  **/
10941b6e0dbaSJack F Vogel s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data)
10951b6e0dbaSJack F Vogel {
10961b6e0dbaSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom,
10971b6e0dbaSJack F Vogel 			      (hw, byte_offset, eeprom_data),
10981b6e0dbaSJack F Vogel 			      IXGBE_NOT_IMPLEMENTED);
10991b6e0dbaSJack F Vogel }
11001b6e0dbaSJack F Vogel 
11011b6e0dbaSJack F Vogel /**
11021b6e0dbaSJack F Vogel  *  ixgbe_get_supported_physical_layer - Returns physical layer type
11031b6e0dbaSJack F Vogel  *  @hw: pointer to hardware structure
11041b6e0dbaSJack F Vogel  *
11051b6e0dbaSJack F Vogel  *  Determines physical layer capabilities of the current configuration.
11061b6e0dbaSJack F Vogel  **/
11071b6e0dbaSJack F Vogel u32 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw)
11081b6e0dbaSJack F Vogel {
11091b6e0dbaSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer,
11101b6e0dbaSJack F Vogel 			       (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN);
11111b6e0dbaSJack F Vogel }
11120ac6dfecSJack F Vogel 
11130ac6dfecSJack F Vogel /**
1114a621e3c8SJack F Vogel  *  ixgbe_enable_rx_dma - Enables Rx DMA unit, dependent on device specifics
11150ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
11160ac6dfecSJack F Vogel  *  @regval: bitfield to write to the Rx DMA register
11170ac6dfecSJack F Vogel  *
11180ac6dfecSJack F Vogel  *  Enables the Rx DMA unit of the device.
11190ac6dfecSJack F Vogel  **/
11200ac6dfecSJack F Vogel s32 ixgbe_enable_rx_dma(struct ixgbe_hw *hw, u32 regval)
11210ac6dfecSJack F Vogel {
11220ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_rx_dma,
11230ac6dfecSJack F Vogel 			       (hw, regval), IXGBE_NOT_IMPLEMENTED);
11240ac6dfecSJack F Vogel }
1125d8602bb9SJack F Vogel 
1126d8602bb9SJack F Vogel /**
112785d0a26eSJack F Vogel  *  ixgbe_disable_sec_rx_path - Stops the receive data path
112885d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
112985d0a26eSJack F Vogel  *
113085d0a26eSJack F Vogel  *  Stops the receive data path.
113185d0a26eSJack F Vogel  **/
113285d0a26eSJack F Vogel s32 ixgbe_disable_sec_rx_path(struct ixgbe_hw *hw)
113385d0a26eSJack F Vogel {
113485d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.disable_sec_rx_path,
113585d0a26eSJack F Vogel 				(hw), IXGBE_NOT_IMPLEMENTED);
113685d0a26eSJack F Vogel }
113785d0a26eSJack F Vogel 
113885d0a26eSJack F Vogel /**
113985d0a26eSJack F Vogel  *  ixgbe_enable_sec_rx_path - Enables the receive data path
114085d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
114185d0a26eSJack F Vogel  *
114285d0a26eSJack F Vogel  *  Enables the receive data path.
114385d0a26eSJack F Vogel  **/
114485d0a26eSJack F Vogel s32 ixgbe_enable_sec_rx_path(struct ixgbe_hw *hw)
114585d0a26eSJack F Vogel {
114685d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_sec_rx_path,
114785d0a26eSJack F Vogel 				(hw), IXGBE_NOT_IMPLEMENTED);
114885d0a26eSJack F Vogel }
114985d0a26eSJack F Vogel 
115085d0a26eSJack F Vogel /**
1151d8602bb9SJack F Vogel  *  ixgbe_acquire_swfw_semaphore - Acquire SWFW semaphore
1152d8602bb9SJack F Vogel  *  @hw: pointer to hardware structure
1153d8602bb9SJack F Vogel  *  @mask: Mask to specify which semaphore to acquire
1154d8602bb9SJack F Vogel  *
1155d8602bb9SJack F Vogel  *  Acquires the SWFW semaphore through SW_FW_SYNC register for the specified
1156d8602bb9SJack F Vogel  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
1157d8602bb9SJack F Vogel  **/
1158d8602bb9SJack F Vogel s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u16 mask)
1159d8602bb9SJack F Vogel {
1160d8602bb9SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.acquire_swfw_sync,
1161d8602bb9SJack F Vogel 			       (hw, mask), IXGBE_NOT_IMPLEMENTED);
1162d8602bb9SJack F Vogel }
1163d8602bb9SJack F Vogel 
1164d8602bb9SJack F Vogel /**
1165d8602bb9SJack F Vogel  *  ixgbe_release_swfw_semaphore - Release SWFW semaphore
1166d8602bb9SJack F Vogel  *  @hw: pointer to hardware structure
1167d8602bb9SJack F Vogel  *  @mask: Mask to specify which semaphore to release
1168d8602bb9SJack F Vogel  *
1169d8602bb9SJack F Vogel  *  Releases the SWFW semaphore through SW_FW_SYNC register for the specified
1170d8602bb9SJack F Vogel  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
1171d8602bb9SJack F Vogel  **/
1172d8602bb9SJack F Vogel void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u16 mask)
1173d8602bb9SJack F Vogel {
1174d8602bb9SJack F Vogel 	if (hw->mac.ops.release_swfw_sync)
1175d8602bb9SJack F Vogel 		hw->mac.ops.release_swfw_sync(hw, mask);
1176d8602bb9SJack F Vogel }
1177d8602bb9SJack F Vogel 
1178