xref: /freebsd/sys/dev/ixgbe/ixgbe_api.c (revision 85d0a26e)
19ca4041bSJack F Vogel /******************************************************************************
213705f88SJack F Vogel 
385d0a26eSJack F Vogel   Copyright (c) 2001-2012, 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 	if (hw->vendor_id == IXGBE_INTEL_VENDOR_ID) {
973ec35e52SJack F Vogel 		switch (hw->device_id) {
981b6e0dbaSJack F Vogel 		case IXGBE_DEV_ID_82598:
990ac6dfecSJack F Vogel 		case IXGBE_DEV_ID_82598_BX:
1003ec35e52SJack F Vogel 		case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
1013ec35e52SJack F Vogel 		case IXGBE_DEV_ID_82598AF_DUAL_PORT:
1029ca4041bSJack F Vogel 		case IXGBE_DEV_ID_82598AT:
1032969bf0eSJack F Vogel 		case IXGBE_DEV_ID_82598AT2:
1043ec35e52SJack F Vogel 		case IXGBE_DEV_ID_82598EB_CX4:
1059ca4041bSJack F Vogel 		case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
1061b6e0dbaSJack F Vogel 		case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
1071b6e0dbaSJack F Vogel 		case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
1089ca4041bSJack F Vogel 		case IXGBE_DEV_ID_82598EB_XF_LR:
1091b6e0dbaSJack F Vogel 		case IXGBE_DEV_ID_82598EB_SFP_LOM:
1103ec35e52SJack F Vogel 			hw->mac.type = ixgbe_mac_82598EB;
1113ec35e52SJack F Vogel 			break;
1120ac6dfecSJack F Vogel 		case IXGBE_DEV_ID_82599_KX4:
1132969bf0eSJack F Vogel 		case IXGBE_DEV_ID_82599_KX4_MEZZ:
114d8602bb9SJack F Vogel 		case IXGBE_DEV_ID_82599_XAUI_LOM:
1152969bf0eSJack F Vogel 		case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:
11685d0a26eSJack F Vogel 		case IXGBE_DEV_ID_82599_KR:
1170ac6dfecSJack F Vogel 		case IXGBE_DEV_ID_82599_SFP:
1181a4e3449SJack F Vogel 		case IXGBE_DEV_ID_82599_BACKPLANE_FCOE:
1191a4e3449SJack F Vogel 		case IXGBE_DEV_ID_82599_SFP_FCOE:
12085d0a26eSJack F Vogel 		case IXGBE_DEV_ID_82599_SFP_EM:
12185d0a26eSJack F Vogel 		case IXGBE_DEV_ID_82599EN_SFP:
1220ac6dfecSJack F Vogel 		case IXGBE_DEV_ID_82599_CX4:
123c0014855SJack F Vogel 		case IXGBE_DEV_ID_82599_T3_LOM:
1240ac6dfecSJack F Vogel 			hw->mac.type = ixgbe_mac_82599EB;
1250ac6dfecSJack F Vogel 			break;
1261a4e3449SJack F Vogel 		case IXGBE_DEV_ID_82599_VF:
1271a4e3449SJack F Vogel 			hw->mac.type = ixgbe_mac_82599_vf;
1281a4e3449SJack F Vogel 			break;
12985d0a26eSJack F Vogel 		case IXGBE_DEV_ID_X540_VF:
13085d0a26eSJack F Vogel 			hw->mac.type = ixgbe_mac_X540_vf;
13185d0a26eSJack F Vogel 			break;
13285d0a26eSJack F Vogel 		case IXGBE_DEV_ID_X540T:
13385d0a26eSJack F Vogel 			hw->mac.type = ixgbe_mac_X540;
13485d0a26eSJack F Vogel 			break;
1353ec35e52SJack F Vogel 		default:
1363ec35e52SJack F Vogel 			ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
1373ec35e52SJack F Vogel 			break;
1383ec35e52SJack F Vogel 		}
1393ec35e52SJack F Vogel 	} else {
1403ec35e52SJack F Vogel 		ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
1413ec35e52SJack F Vogel 	}
1423ec35e52SJack F Vogel 
1439ca4041bSJack F Vogel 	DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n",
1449ca4041bSJack F Vogel 		  hw->mac.type, ret_val);
1453ec35e52SJack F Vogel 	return ret_val;
1463ec35e52SJack F Vogel }
1473ec35e52SJack F Vogel 
1483ec35e52SJack F Vogel /**
14913705f88SJack F Vogel  *  ixgbe_init_hw - Initialize the hardware
15013705f88SJack F Vogel  *  @hw: pointer to hardware structure
15113705f88SJack F Vogel  *
15213705f88SJack F Vogel  *  Initialize the hardware by resetting and then starting the hardware
15313705f88SJack F Vogel  **/
15413705f88SJack F Vogel s32 ixgbe_init_hw(struct ixgbe_hw *hw)
15513705f88SJack F Vogel {
1569ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw),
15713705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
15813705f88SJack F Vogel }
15913705f88SJack F Vogel 
16013705f88SJack F Vogel /**
16113705f88SJack F Vogel  *  ixgbe_reset_hw - Performs a hardware reset
16213705f88SJack F Vogel  *  @hw: pointer to hardware structure
16313705f88SJack F Vogel  *
16413705f88SJack F Vogel  *  Resets the hardware by resetting the transmit and receive units, masks and
16513705f88SJack F Vogel  *  clears all interrupts, performs a PHY reset, and performs a MAC reset
16613705f88SJack F Vogel  **/
16713705f88SJack F Vogel s32 ixgbe_reset_hw(struct ixgbe_hw *hw)
16813705f88SJack F Vogel {
1699ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw),
17013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
17113705f88SJack F Vogel }
17213705f88SJack F Vogel 
17313705f88SJack F Vogel /**
1749ca4041bSJack F Vogel  *  ixgbe_start_hw - Prepares hardware for Rx/Tx
17513705f88SJack F Vogel  *  @hw: pointer to hardware structure
17613705f88SJack F Vogel  *
17713705f88SJack F Vogel  *  Starts the hardware by filling the bus info structure and media type,
17813705f88SJack F Vogel  *  clears all on chip counters, initializes receive address registers,
17913705f88SJack F Vogel  *  multicast table, VLAN filter table, calls routine to setup link and
18013705f88SJack F Vogel  *  flow control settings, and leaves transmit and receive units disabled
18113705f88SJack F Vogel  *  and uninitialized.
18213705f88SJack F Vogel  **/
18313705f88SJack F Vogel s32 ixgbe_start_hw(struct ixgbe_hw *hw)
18413705f88SJack F Vogel {
1859ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw),
18613705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
18713705f88SJack F Vogel }
18813705f88SJack F Vogel 
18913705f88SJack F Vogel /**
190c0014855SJack F Vogel  *  ixgbe_enable_relaxed_ordering - Enables tx relaxed ordering,
191c0014855SJack F Vogel  *  which is disabled by default in ixgbe_start_hw();
192c0014855SJack F Vogel  *
193c0014855SJack F Vogel  *  @hw: pointer to hardware structure
194c0014855SJack F Vogel  *
195c0014855SJack F Vogel  *   Enable relaxed ordering;
196c0014855SJack F Vogel  **/
197c0014855SJack F Vogel void ixgbe_enable_relaxed_ordering(struct ixgbe_hw *hw)
198c0014855SJack F Vogel {
199c0014855SJack F Vogel 	if (hw->mac.ops.enable_relaxed_ordering)
200c0014855SJack F Vogel 		hw->mac.ops.enable_relaxed_ordering(hw);
201c0014855SJack F Vogel }
202c0014855SJack F Vogel 
203c0014855SJack F Vogel /**
20413705f88SJack F Vogel  *  ixgbe_clear_hw_cntrs - Clear hardware counters
20513705f88SJack F Vogel  *  @hw: pointer to hardware structure
20613705f88SJack F Vogel  *
20713705f88SJack F Vogel  *  Clears all hardware statistics counters by reading them from the hardware
20813705f88SJack F Vogel  *  Statistics counters are clear on read.
20913705f88SJack F Vogel  **/
21013705f88SJack F Vogel s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw)
21113705f88SJack F Vogel {
2129ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw),
21313705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
21413705f88SJack F Vogel }
21513705f88SJack F Vogel 
21613705f88SJack F Vogel /**
21713705f88SJack F Vogel  *  ixgbe_get_media_type - Get media type
21813705f88SJack F Vogel  *  @hw: pointer to hardware structure
21913705f88SJack F Vogel  *
22013705f88SJack F Vogel  *  Returns the media type (fiber, copper, backplane)
22113705f88SJack F Vogel  **/
22213705f88SJack F Vogel enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw)
22313705f88SJack F Vogel {
2249ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw),
22513705f88SJack F Vogel 			       ixgbe_media_type_unknown);
22613705f88SJack F Vogel }
22713705f88SJack F Vogel 
22813705f88SJack F Vogel /**
22913705f88SJack F Vogel  *  ixgbe_get_mac_addr - Get MAC address
23013705f88SJack F Vogel  *  @hw: pointer to hardware structure
23113705f88SJack F Vogel  *  @mac_addr: Adapter MAC address
23213705f88SJack F Vogel  *
23313705f88SJack F Vogel  *  Reads the adapter's MAC address from the first Receive Address Register
2349ca4041bSJack F Vogel  *  (RAR0) A reset of the adapter must have been performed prior to calling
2359ca4041bSJack F Vogel  *  this function in order for the MAC address to have been loaded from the
2369ca4041bSJack F Vogel  *  EEPROM into RAR0
23713705f88SJack F Vogel  **/
23813705f88SJack F Vogel s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr)
23913705f88SJack F Vogel {
2409ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr,
24113705f88SJack F Vogel 			       (hw, mac_addr), IXGBE_NOT_IMPLEMENTED);
24213705f88SJack F Vogel }
24313705f88SJack F Vogel 
24413705f88SJack F Vogel /**
2450ac6dfecSJack F Vogel  *  ixgbe_get_san_mac_addr - Get SAN MAC address
2460ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
2470ac6dfecSJack F Vogel  *  @san_mac_addr: SAN MAC address
2480ac6dfecSJack F Vogel  *
2490ac6dfecSJack F Vogel  *  Reads the SAN MAC address from the EEPROM, if it's available.  This is
2500ac6dfecSJack F Vogel  *  per-port, so set_lan_id() must be called before reading the addresses.
2510ac6dfecSJack F Vogel  **/
2520ac6dfecSJack F Vogel s32 ixgbe_get_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr)
2530ac6dfecSJack F Vogel {
2540ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_san_mac_addr,
2550ac6dfecSJack F Vogel 			       (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED);
2560ac6dfecSJack F Vogel }
2570ac6dfecSJack F Vogel 
2580ac6dfecSJack F Vogel /**
2590ac6dfecSJack F Vogel  *  ixgbe_set_san_mac_addr - Write a SAN MAC address
2600ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
2610ac6dfecSJack F Vogel  *  @san_mac_addr: SAN MAC address
2620ac6dfecSJack F Vogel  *
2630ac6dfecSJack F Vogel  *  Writes A SAN MAC address to the EEPROM.
2640ac6dfecSJack F Vogel  **/
2650ac6dfecSJack F Vogel s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr)
2660ac6dfecSJack F Vogel {
2670ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_san_mac_addr,
2680ac6dfecSJack F Vogel 			       (hw, san_mac_addr), IXGBE_NOT_IMPLEMENTED);
2690ac6dfecSJack F Vogel }
2700ac6dfecSJack F Vogel 
2710ac6dfecSJack F Vogel /**
2720ac6dfecSJack F Vogel  *  ixgbe_get_device_caps - Get additional device capabilities
2730ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
2740ac6dfecSJack F Vogel  *  @device_caps: the EEPROM word for device capabilities
2750ac6dfecSJack F Vogel  *
2760ac6dfecSJack F Vogel  *  Reads the extra device capabilities from the EEPROM
2770ac6dfecSJack F Vogel  **/
2780ac6dfecSJack F Vogel s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps)
2790ac6dfecSJack F Vogel {
2800ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_device_caps,
2810ac6dfecSJack F Vogel 			       (hw, device_caps), IXGBE_NOT_IMPLEMENTED);
2820ac6dfecSJack F Vogel }
2830ac6dfecSJack F Vogel 
2840ac6dfecSJack F Vogel /**
2852969bf0eSJack F Vogel  *  ixgbe_get_wwn_prefix - Get alternative WWNN/WWPN prefix from the EEPROM
2862969bf0eSJack F Vogel  *  @hw: pointer to hardware structure
2872969bf0eSJack F Vogel  *  @wwnn_prefix: the alternative WWNN prefix
2882969bf0eSJack F Vogel  *  @wwpn_prefix: the alternative WWPN prefix
2892969bf0eSJack F Vogel  *
2902969bf0eSJack F Vogel  *  This function will read the EEPROM from the alternative SAN MAC address
2912969bf0eSJack F Vogel  *  block to check the support for the alternative WWNN/WWPN prefix support.
2922969bf0eSJack F Vogel  **/
2932969bf0eSJack F Vogel s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix,
2942969bf0eSJack F Vogel 			 u16 *wwpn_prefix)
2952969bf0eSJack F Vogel {
2962969bf0eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_wwn_prefix,
2972969bf0eSJack F Vogel 			       (hw, wwnn_prefix, wwpn_prefix),
2982969bf0eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
2992969bf0eSJack F Vogel }
3002969bf0eSJack F Vogel 
3012969bf0eSJack F Vogel /**
3021a4e3449SJack F Vogel  *  ixgbe_get_fcoe_boot_status -  Get FCOE boot status from EEPROM
3031a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
3041a4e3449SJack F Vogel  *  @bs: the fcoe boot status
3051a4e3449SJack F Vogel  *
3061a4e3449SJack F Vogel  *  This function will read the FCOE boot status from the iSCSI FCOE block
3071a4e3449SJack F Vogel  **/
3081a4e3449SJack F Vogel s32 ixgbe_get_fcoe_boot_status(struct ixgbe_hw *hw, u16 *bs)
3091a4e3449SJack F Vogel {
3101a4e3449SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_fcoe_boot_status,
3111a4e3449SJack F Vogel 			       (hw, bs),
3121a4e3449SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
3131a4e3449SJack F Vogel }
3141a4e3449SJack F Vogel 
3151a4e3449SJack F Vogel /**
31613705f88SJack F Vogel  *  ixgbe_get_bus_info - Set PCI bus info
31713705f88SJack F Vogel  *  @hw: pointer to hardware structure
31813705f88SJack F Vogel  *
31913705f88SJack F Vogel  *  Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure
32013705f88SJack F Vogel  **/
32113705f88SJack F Vogel s32 ixgbe_get_bus_info(struct ixgbe_hw *hw)
32213705f88SJack F Vogel {
3239ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw),
32413705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
32513705f88SJack F Vogel }
32613705f88SJack F Vogel 
32713705f88SJack F Vogel /**
3289ca4041bSJack F Vogel  *  ixgbe_get_num_of_tx_queues - Get Tx queues
32913705f88SJack F Vogel  *  @hw: pointer to hardware structure
33013705f88SJack F Vogel  *
33113705f88SJack F Vogel  *  Returns the number of transmit queues for the given adapter.
33213705f88SJack F Vogel  **/
33313705f88SJack F Vogel u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw)
33413705f88SJack F Vogel {
3359ca4041bSJack F Vogel 	return hw->mac.max_tx_queues;
33613705f88SJack F Vogel }
33713705f88SJack F Vogel 
33813705f88SJack F Vogel /**
3399ca4041bSJack F Vogel  *  ixgbe_get_num_of_rx_queues - Get Rx queues
34013705f88SJack F Vogel  *  @hw: pointer to hardware structure
34113705f88SJack F Vogel  *
34213705f88SJack F Vogel  *  Returns the number of receive queues for the given adapter.
34313705f88SJack F Vogel  **/
34413705f88SJack F Vogel u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw)
34513705f88SJack F Vogel {
3469ca4041bSJack F Vogel 	return hw->mac.max_rx_queues;
34713705f88SJack F Vogel }
34813705f88SJack F Vogel 
34913705f88SJack F Vogel /**
3509ca4041bSJack F Vogel  *  ixgbe_stop_adapter - Disable Rx/Tx units
35113705f88SJack F Vogel  *  @hw: pointer to hardware structure
35213705f88SJack F Vogel  *
35313705f88SJack F Vogel  *  Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts,
35413705f88SJack F Vogel  *  disables transmit and receive units. The adapter_stopped flag is used by
35513705f88SJack F Vogel  *  the shared code and drivers to determine if the adapter is in a stopped
35613705f88SJack F Vogel  *  state and should not touch the hardware.
35713705f88SJack F Vogel  **/
35813705f88SJack F Vogel s32 ixgbe_stop_adapter(struct ixgbe_hw *hw)
35913705f88SJack F Vogel {
3609ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw),
36113705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
36213705f88SJack F Vogel }
36313705f88SJack F Vogel 
36413705f88SJack F Vogel /**
3651a4e3449SJack F Vogel  *  ixgbe_read_pba_string - Reads part number string from EEPROM
3661a4e3449SJack F Vogel  *  @hw: pointer to hardware structure
3671a4e3449SJack F Vogel  *  @pba_num: stores the part number string from the EEPROM
3681a4e3449SJack F Vogel  *  @pba_num_size: part number string buffer length
3691a4e3449SJack F Vogel  *
3701a4e3449SJack F Vogel  *  Reads the part number string from the EEPROM.
3711a4e3449SJack F Vogel  **/
3721a4e3449SJack F Vogel s32 ixgbe_read_pba_string(struct ixgbe_hw *hw, u8 *pba_num, u32 pba_num_size)
3731a4e3449SJack F Vogel {
3741a4e3449SJack F Vogel 	return ixgbe_read_pba_string_generic(hw, pba_num, pba_num_size);
3751a4e3449SJack F Vogel }
3761a4e3449SJack F Vogel 
3771a4e3449SJack F Vogel /**
3789ca4041bSJack F Vogel  *  ixgbe_read_pba_num - Reads part number from EEPROM
3799ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
3809ca4041bSJack F Vogel  *  @pba_num: stores the part number from the EEPROM
3819ca4041bSJack F Vogel  *
3829ca4041bSJack F Vogel  *  Reads the part number from the EEPROM.
3839ca4041bSJack F Vogel  **/
3849ca4041bSJack F Vogel s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num)
3859ca4041bSJack F Vogel {
3869ca4041bSJack F Vogel 	return ixgbe_read_pba_num_generic(hw, pba_num);
3879ca4041bSJack F Vogel }
3889ca4041bSJack F Vogel 
3899ca4041bSJack F Vogel /**
39013705f88SJack F Vogel  *  ixgbe_identify_phy - Get PHY type
39113705f88SJack F Vogel  *  @hw: pointer to hardware structure
39213705f88SJack F Vogel  *
39313705f88SJack F Vogel  *  Determines the physical layer module found on the current adapter.
39413705f88SJack F Vogel  **/
39513705f88SJack F Vogel s32 ixgbe_identify_phy(struct ixgbe_hw *hw)
39613705f88SJack F Vogel {
39713705f88SJack F Vogel 	s32 status = IXGBE_SUCCESS;
39813705f88SJack F Vogel 
39913705f88SJack F Vogel 	if (hw->phy.type == ixgbe_phy_unknown) {
4001a4e3449SJack F Vogel 		status = ixgbe_call_func(hw, hw->phy.ops.identify, (hw),
40113705f88SJack F Vogel 					 IXGBE_NOT_IMPLEMENTED);
40213705f88SJack F Vogel 	}
40313705f88SJack F Vogel 
40413705f88SJack F Vogel 	return status;
40513705f88SJack F Vogel }
40613705f88SJack F Vogel 
40713705f88SJack F Vogel /**
40813705f88SJack F Vogel  *  ixgbe_reset_phy - Perform a PHY reset
40913705f88SJack F Vogel  *  @hw: pointer to hardware structure
41013705f88SJack F Vogel  **/
41113705f88SJack F Vogel s32 ixgbe_reset_phy(struct ixgbe_hw *hw)
41213705f88SJack F Vogel {
41313705f88SJack F Vogel 	s32 status = IXGBE_SUCCESS;
41413705f88SJack F Vogel 
41513705f88SJack F Vogel 	if (hw->phy.type == ixgbe_phy_unknown) {
4161b6e0dbaSJack F Vogel 		if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS)
41713705f88SJack F Vogel 			status = IXGBE_ERR_PHY;
41813705f88SJack F Vogel 	}
41913705f88SJack F Vogel 
42013705f88SJack F Vogel 	if (status == IXGBE_SUCCESS) {
4219ca4041bSJack F Vogel 		status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw),
42213705f88SJack F Vogel 					 IXGBE_NOT_IMPLEMENTED);
42313705f88SJack F Vogel 	}
42413705f88SJack F Vogel 	return status;
42513705f88SJack F Vogel }
42613705f88SJack F Vogel 
42713705f88SJack F Vogel /**
4289ca4041bSJack F Vogel  *  ixgbe_get_phy_firmware_version -
4299ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
4309ca4041bSJack F Vogel  *  @firmware_version: pointer to firmware version
4319ca4041bSJack F Vogel  **/
4329ca4041bSJack F Vogel s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version)
4339ca4041bSJack F Vogel {
4349ca4041bSJack F Vogel 	s32 status = IXGBE_SUCCESS;
4359ca4041bSJack F Vogel 
4369ca4041bSJack F Vogel 	status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version,
4379ca4041bSJack F Vogel 				 (hw, firmware_version),
4389ca4041bSJack F Vogel 				 IXGBE_NOT_IMPLEMENTED);
4399ca4041bSJack F Vogel 	return status;
4409ca4041bSJack F Vogel }
4419ca4041bSJack F Vogel 
4429ca4041bSJack F Vogel /**
44313705f88SJack F Vogel  *  ixgbe_read_phy_reg - Read PHY register
44413705f88SJack F Vogel  *  @hw: pointer to hardware structure
44513705f88SJack F Vogel  *  @reg_addr: 32 bit address of PHY register to read
44613705f88SJack F Vogel  *  @phy_data: Pointer to read data from PHY register
44713705f88SJack F Vogel  *
44813705f88SJack F Vogel  *  Reads a value from a specified PHY register
44913705f88SJack F Vogel  **/
45013705f88SJack F Vogel s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
45113705f88SJack F Vogel 		       u16 *phy_data)
45213705f88SJack F Vogel {
4530ac6dfecSJack F Vogel 	if (hw->phy.id == 0)
4540ac6dfecSJack F Vogel 		ixgbe_identify_phy(hw);
4550ac6dfecSJack F Vogel 
4569ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr,
4579ca4041bSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
45813705f88SJack F Vogel }
45913705f88SJack F Vogel 
46013705f88SJack F Vogel /**
46113705f88SJack F Vogel  *  ixgbe_write_phy_reg - Write PHY register
46213705f88SJack F Vogel  *  @hw: pointer to hardware structure
46313705f88SJack F Vogel  *  @reg_addr: 32 bit PHY register to write
46413705f88SJack F Vogel  *  @phy_data: Data to write to the PHY register
46513705f88SJack F Vogel  *
46613705f88SJack F Vogel  *  Writes a value to specified PHY register
46713705f88SJack F Vogel  **/
46813705f88SJack F Vogel s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
46913705f88SJack F Vogel 			u16 phy_data)
47013705f88SJack F Vogel {
4710ac6dfecSJack F Vogel 	if (hw->phy.id == 0)
4720ac6dfecSJack F Vogel 		ixgbe_identify_phy(hw);
4730ac6dfecSJack F Vogel 
4749ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr,
4759ca4041bSJack F Vogel 			       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
47613705f88SJack F Vogel }
47713705f88SJack F Vogel 
4789ca4041bSJack F Vogel /**
4799ca4041bSJack F Vogel  *  ixgbe_setup_phy_link - Restart PHY autoneg
4809ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
4819ca4041bSJack F Vogel  *
4829ca4041bSJack F Vogel  *  Restart autonegotiation and PHY and waits for completion.
4839ca4041bSJack F Vogel  **/
4849ca4041bSJack F Vogel s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw)
4859ca4041bSJack F Vogel {
4869ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw),
48713705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
48813705f88SJack F Vogel }
4899ca4041bSJack F Vogel 
4909ca4041bSJack F Vogel /**
4919ca4041bSJack F Vogel  *  ixgbe_check_phy_link - Determine link and speed status
4929ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
4939ca4041bSJack F Vogel  *
4949ca4041bSJack F Vogel  *  Reads a PHY register to determine if link is up and the current speed for
4959ca4041bSJack F Vogel  *  the PHY.
4969ca4041bSJack F Vogel  **/
4979ca4041bSJack F Vogel s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
4989ca4041bSJack F Vogel 			 bool *link_up)
4999ca4041bSJack F Vogel {
5009ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed,
5019ca4041bSJack F Vogel 			       link_up), IXGBE_NOT_IMPLEMENTED);
5029ca4041bSJack F Vogel }
5039ca4041bSJack F Vogel 
5049ca4041bSJack F Vogel /**
5059ca4041bSJack F Vogel  *  ixgbe_setup_phy_link_speed - Set auto advertise
5069ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
5079ca4041bSJack F Vogel  *  @speed: new link speed
5089ca4041bSJack F Vogel  *  @autoneg: TRUE if autonegotiation enabled
5099ca4041bSJack F Vogel  *
5109ca4041bSJack F Vogel  *  Sets the auto advertised capabilities
5119ca4041bSJack F Vogel  **/
5129ca4041bSJack F Vogel s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
5139ca4041bSJack F Vogel 			       bool autoneg,
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,
5179ca4041bSJack F Vogel 			       autoneg, 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  *  @autoneg: TRUE if autonegotiation enabled
57813705f88SJack F Vogel  *
5792969bf0eSJack F Vogel  *  Configures link settings.  Restarts the link.
5802969bf0eSJack F Vogel  *  Performs autonegotiation if needed.
58113705f88SJack F Vogel  **/
5822969bf0eSJack F Vogel s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed,
58313705f88SJack F Vogel 		     bool autoneg,
58413705f88SJack F Vogel 		     bool autoneg_wait_to_complete)
58513705f88SJack F Vogel {
5862969bf0eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw, speed,
58713705f88SJack F Vogel 			       autoneg, autoneg_wait_to_complete),
58813705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
58913705f88SJack F Vogel }
59013705f88SJack F Vogel 
59113705f88SJack F Vogel /**
5929ca4041bSJack F Vogel  *  ixgbe_get_link_capabilities - Returns link capabilities
59313705f88SJack F Vogel  *  @hw: pointer to hardware structure
59413705f88SJack F Vogel  *
5959ca4041bSJack F Vogel  *  Determines the link capabilities of the current configuration.
59613705f88SJack F Vogel  **/
5979ca4041bSJack F Vogel s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
59813705f88SJack F Vogel 				bool *autoneg)
59913705f88SJack F Vogel {
6009ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw,
6019ca4041bSJack F Vogel 			       speed, autoneg), IXGBE_NOT_IMPLEMENTED);
60213705f88SJack F Vogel }
60313705f88SJack F Vogel 
60413705f88SJack F Vogel /**
6059ca4041bSJack F Vogel  *  ixgbe_led_on - Turn on LEDs
60613705f88SJack F Vogel  *  @hw: pointer to hardware structure
60713705f88SJack F Vogel  *  @index: led number to turn on
60813705f88SJack F Vogel  *
60913705f88SJack F Vogel  *  Turns on the software controllable LEDs.
61013705f88SJack F Vogel  **/
61113705f88SJack F Vogel s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index)
61213705f88SJack F Vogel {
6139ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index),
61413705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
61513705f88SJack F Vogel }
61613705f88SJack F Vogel 
61713705f88SJack F Vogel /**
6189ca4041bSJack F Vogel  *  ixgbe_led_off - Turn off LEDs
61913705f88SJack F Vogel  *  @hw: pointer to hardware structure
62013705f88SJack F Vogel  *  @index: led number to turn off
62113705f88SJack F Vogel  *
62213705f88SJack F Vogel  *  Turns off the software controllable LEDs.
62313705f88SJack F Vogel  **/
62413705f88SJack F Vogel s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index)
62513705f88SJack F Vogel {
6269ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index),
62713705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
62813705f88SJack F Vogel }
62913705f88SJack F Vogel 
63013705f88SJack F Vogel /**
6319ca4041bSJack F Vogel  *  ixgbe_blink_led_start - Blink LEDs
63213705f88SJack F Vogel  *  @hw: pointer to hardware structure
63313705f88SJack F Vogel  *  @index: led number to blink
63413705f88SJack F Vogel  *
63513705f88SJack F Vogel  *  Blink LED based on index.
63613705f88SJack F Vogel  **/
63713705f88SJack F Vogel s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index)
63813705f88SJack F Vogel {
6399ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index),
64013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
64113705f88SJack F Vogel }
64213705f88SJack F Vogel 
64313705f88SJack F Vogel /**
6449ca4041bSJack F Vogel  *  ixgbe_blink_led_stop - Stop blinking LEDs
64513705f88SJack F Vogel  *  @hw: pointer to hardware structure
64613705f88SJack F Vogel  *
64713705f88SJack F Vogel  *  Stop blinking LED based on index.
64813705f88SJack F Vogel  **/
64913705f88SJack F Vogel s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index)
65013705f88SJack F Vogel {
6519ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index),
65213705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
65313705f88SJack F Vogel }
65413705f88SJack F Vogel 
65513705f88SJack F Vogel /**
6569ca4041bSJack F Vogel  *  ixgbe_init_eeprom_params - Initialize EEPROM parameters
65713705f88SJack F Vogel  *  @hw: pointer to hardware structure
65813705f88SJack F Vogel  *
65913705f88SJack F Vogel  *  Initializes the EEPROM parameters ixgbe_eeprom_info within the
66013705f88SJack F Vogel  *  ixgbe_hw struct in order to set up EEPROM access.
66113705f88SJack F Vogel  **/
66213705f88SJack F Vogel s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw)
66313705f88SJack F Vogel {
6649ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw),
66513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
66613705f88SJack F Vogel }
66713705f88SJack F Vogel 
66813705f88SJack F Vogel 
66913705f88SJack F Vogel /**
67013705f88SJack F Vogel  *  ixgbe_write_eeprom - Write word to EEPROM
67113705f88SJack F Vogel  *  @hw: pointer to hardware structure
67213705f88SJack F Vogel  *  @offset: offset within the EEPROM to be written to
67313705f88SJack F Vogel  *  @data: 16 bit word to be written to the EEPROM
67413705f88SJack F Vogel  *
67513705f88SJack F Vogel  *  Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not
67613705f88SJack F Vogel  *  called after this function, the EEPROM will most likely contain an
67713705f88SJack F Vogel  *  invalid checksum.
67813705f88SJack F Vogel  **/
67913705f88SJack F Vogel s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data)
68013705f88SJack F Vogel {
6819ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data),
68213705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
68313705f88SJack F Vogel }
68413705f88SJack F Vogel 
68513705f88SJack F Vogel /**
68685d0a26eSJack F Vogel  *  ixgbe_write_eeprom_buffer - Write word(s) to EEPROM
68785d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
68885d0a26eSJack F Vogel  *  @offset: offset within the EEPROM to be written to
68985d0a26eSJack F Vogel  *  @data: 16 bit word(s) to be written to the EEPROM
69085d0a26eSJack F Vogel  *  @words: number of words
69185d0a26eSJack F Vogel  *
69285d0a26eSJack F Vogel  *  Writes 16 bit word(s) to EEPROM. If ixgbe_eeprom_update_checksum is not
69385d0a26eSJack F Vogel  *  called after this function, the EEPROM will most likely contain an
69485d0a26eSJack F Vogel  *  invalid checksum.
69585d0a26eSJack F Vogel  **/
69685d0a26eSJack F Vogel s32 ixgbe_write_eeprom_buffer(struct ixgbe_hw *hw, u16 offset, u16 words,
69785d0a26eSJack F Vogel 			      u16 *data)
69885d0a26eSJack F Vogel {
69985d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.write_buffer,
70085d0a26eSJack F Vogel 			       (hw, offset, words, data),
70185d0a26eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
70285d0a26eSJack F Vogel }
70385d0a26eSJack F Vogel 
70485d0a26eSJack F Vogel /**
70513705f88SJack F Vogel  *  ixgbe_read_eeprom - Read word from EEPROM
70613705f88SJack F Vogel  *  @hw: pointer to hardware structure
70713705f88SJack F Vogel  *  @offset: offset within the EEPROM to be read
70813705f88SJack F Vogel  *  @data: read 16 bit value from EEPROM
70913705f88SJack F Vogel  *
71013705f88SJack F Vogel  *  Reads 16 bit value from EEPROM
71113705f88SJack F Vogel  **/
71213705f88SJack F Vogel s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data)
71313705f88SJack F Vogel {
7149ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data),
71513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
71613705f88SJack F Vogel }
71713705f88SJack F Vogel 
71813705f88SJack F Vogel /**
71985d0a26eSJack F Vogel  *  ixgbe_read_eeprom_buffer - Read word(s) from EEPROM
72085d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
72185d0a26eSJack F Vogel  *  @offset: offset within the EEPROM to be read
72285d0a26eSJack F Vogel  *  @data: read 16 bit word(s) from EEPROM
72385d0a26eSJack F Vogel  *  @words: number of words
72485d0a26eSJack F Vogel  *
72585d0a26eSJack F Vogel  *  Reads 16 bit word(s) from EEPROM
72685d0a26eSJack F Vogel  **/
72785d0a26eSJack F Vogel s32 ixgbe_read_eeprom_buffer(struct ixgbe_hw *hw, u16 offset,
72885d0a26eSJack F Vogel 			     u16 words, u16 *data)
72985d0a26eSJack F Vogel {
73085d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.read_buffer,
73185d0a26eSJack F Vogel 			       (hw, offset, words, data),
73285d0a26eSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
73385d0a26eSJack F Vogel }
73485d0a26eSJack F Vogel 
73585d0a26eSJack F Vogel /**
73613705f88SJack F Vogel  *  ixgbe_validate_eeprom_checksum - Validate EEPROM checksum
73713705f88SJack F Vogel  *  @hw: pointer to hardware structure
73813705f88SJack F Vogel  *  @checksum_val: calculated checksum
73913705f88SJack F Vogel  *
74013705f88SJack F Vogel  *  Performs checksum calculation and validates the EEPROM checksum
74113705f88SJack F Vogel  **/
74213705f88SJack F Vogel s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val)
74313705f88SJack F Vogel {
7449ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum,
74513705f88SJack F Vogel 			       (hw, checksum_val), IXGBE_NOT_IMPLEMENTED);
74613705f88SJack F Vogel }
74713705f88SJack F Vogel 
74813705f88SJack F Vogel /**
74913705f88SJack F Vogel  *  ixgbe_eeprom_update_checksum - Updates the EEPROM checksum
75013705f88SJack F Vogel  *  @hw: pointer to hardware structure
75113705f88SJack F Vogel  **/
75213705f88SJack F Vogel s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw)
75313705f88SJack F Vogel {
7549ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw),
75513705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
75613705f88SJack F Vogel }
75713705f88SJack F Vogel 
75813705f88SJack F Vogel /**
7590ac6dfecSJack F Vogel  *  ixgbe_insert_mac_addr - Find a RAR for this mac address
7600ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
7610ac6dfecSJack F Vogel  *  @addr: Address to put into receive address register
7620ac6dfecSJack F Vogel  *  @vmdq: VMDq pool to assign
7630ac6dfecSJack F Vogel  *
7640ac6dfecSJack F Vogel  *  Puts an ethernet address into a receive address register, or
7650ac6dfecSJack F Vogel  *  finds the rar that it is aleady in; adds to the pool list
7660ac6dfecSJack F Vogel  **/
7670ac6dfecSJack F Vogel s32 ixgbe_insert_mac_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
7680ac6dfecSJack F Vogel {
7690ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.insert_mac_addr,
7700ac6dfecSJack F Vogel 			       (hw, addr, vmdq),
7710ac6dfecSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
7720ac6dfecSJack F Vogel }
7730ac6dfecSJack F Vogel 
7740ac6dfecSJack F Vogel /**
7759ca4041bSJack F Vogel  *  ixgbe_set_rar - Set Rx address register
77613705f88SJack F Vogel  *  @hw: pointer to hardware structure
77713705f88SJack F Vogel  *  @index: Receive address register to write
7789ca4041bSJack F Vogel  *  @addr: Address to put into receive address register
7799ca4041bSJack F Vogel  *  @vmdq: VMDq "set"
78013705f88SJack F Vogel  *  @enable_addr: set flag that address is active
78113705f88SJack F Vogel  *
78213705f88SJack F Vogel  *  Puts an ethernet address into a receive address register.
78313705f88SJack F Vogel  **/
7849ca4041bSJack F Vogel s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
78513705f88SJack F Vogel 		  u32 enable_addr)
78613705f88SJack F Vogel {
7879ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq,
78813705f88SJack F Vogel 			       enable_addr), IXGBE_NOT_IMPLEMENTED);
78913705f88SJack F Vogel }
79013705f88SJack F Vogel 
79113705f88SJack F Vogel /**
7925b7f4cedSJack F Vogel  *  ixgbe_clear_rar - Clear Rx address register
7935b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
7945b7f4cedSJack F Vogel  *  @index: Receive address register to write
7955b7f4cedSJack F Vogel  *
7965b7f4cedSJack F Vogel  *  Puts an ethernet address into a receive address register.
7975b7f4cedSJack F Vogel  **/
7985b7f4cedSJack F Vogel s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index)
7995b7f4cedSJack F Vogel {
8005b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index),
8015b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
8025b7f4cedSJack F Vogel }
8035b7f4cedSJack F Vogel 
8045b7f4cedSJack F Vogel /**
8059ca4041bSJack F Vogel  *  ixgbe_set_vmdq - Associate a VMDq index with a receive address
8069ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
8079ca4041bSJack F Vogel  *  @rar: receive address register index to associate with VMDq index
8089ca4041bSJack F Vogel  *  @vmdq: VMDq set or pool index
8099ca4041bSJack F Vogel  **/
8109ca4041bSJack F Vogel s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
8119ca4041bSJack F Vogel {
8129ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq),
8139ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
8149ca4041bSJack F Vogel }
8159ca4041bSJack F Vogel 
8169ca4041bSJack F Vogel /**
8175b7f4cedSJack F Vogel  *  ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address
8185b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
8195b7f4cedSJack F Vogel  *  @rar: receive address register index to disassociate with VMDq index
8205b7f4cedSJack F Vogel  *  @vmdq: VMDq set or pool index
8215b7f4cedSJack F Vogel  **/
8225b7f4cedSJack F Vogel s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
8235b7f4cedSJack F Vogel {
8245b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq),
8255b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
8265b7f4cedSJack F Vogel }
8275b7f4cedSJack F Vogel 
8285b7f4cedSJack F Vogel /**
82913705f88SJack F Vogel  *  ixgbe_init_rx_addrs - Initializes receive address filters.
83013705f88SJack F Vogel  *  @hw: pointer to hardware structure
83113705f88SJack F Vogel  *
83213705f88SJack F Vogel  *  Places the MAC address in receive address register 0 and clears the rest
8339ca4041bSJack F Vogel  *  of the receive address registers. Clears the multicast table. Assumes
83413705f88SJack F Vogel  *  the receiver is in reset when the routine is called.
83513705f88SJack F Vogel  **/
83613705f88SJack F Vogel s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw)
83713705f88SJack F Vogel {
8389ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw),
83913705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
84013705f88SJack F Vogel }
84113705f88SJack F Vogel 
84213705f88SJack F Vogel /**
84313705f88SJack F Vogel  *  ixgbe_get_num_rx_addrs - Returns the number of RAR entries.
84413705f88SJack F Vogel  *  @hw: pointer to hardware structure
84513705f88SJack F Vogel  **/
84613705f88SJack F Vogel u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw)
84713705f88SJack F Vogel {
8489ca4041bSJack F Vogel 	return hw->mac.num_rar_entries;
8499ca4041bSJack F Vogel }
8509ca4041bSJack F Vogel 
8519ca4041bSJack F Vogel /**
8529ca4041bSJack F Vogel  *  ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses
8539ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
8549ca4041bSJack F Vogel  *  @addr_list: the list of new multicast addresses
8559ca4041bSJack F Vogel  *  @addr_count: number of addresses
8569ca4041bSJack F Vogel  *  @func: iterator function to walk the multicast address list
8579ca4041bSJack F Vogel  *
8589ca4041bSJack F Vogel  *  The given list replaces any existing list. Clears the secondary addrs from
8599ca4041bSJack F Vogel  *  receive address registers. Uses unused receive address registers for the
8609ca4041bSJack F Vogel  *  first secondary addresses, and falls back to promiscuous mode as needed.
8619ca4041bSJack F Vogel  **/
8629ca4041bSJack F Vogel s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list,
8639ca4041bSJack F Vogel 			      u32 addr_count, ixgbe_mc_addr_itr func)
8649ca4041bSJack F Vogel {
8659ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw,
8669ca4041bSJack F Vogel 			       addr_list, addr_count, func),
8679ca4041bSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
86813705f88SJack F Vogel }
86913705f88SJack F Vogel 
87013705f88SJack F Vogel /**
87113705f88SJack F Vogel  *  ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses
87213705f88SJack F Vogel  *  @hw: pointer to hardware structure
87313705f88SJack F Vogel  *  @mc_addr_list: the list of new multicast addresses
87413705f88SJack F Vogel  *  @mc_addr_count: number of addresses
8759ca4041bSJack F Vogel  *  @func: iterator function to walk the multicast address list
87613705f88SJack F Vogel  *
87713705f88SJack F Vogel  *  The given list replaces any existing list. Clears the MC addrs from receive
8789ca4041bSJack F Vogel  *  address registers and the multicast table. Uses unused receive address
87913705f88SJack F Vogel  *  registers for the first multicast addresses, and hashes the rest into the
88013705f88SJack F Vogel  *  multicast table.
88113705f88SJack F Vogel  **/
88213705f88SJack F Vogel s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list,
88385d0a26eSJack F Vogel 			      u32 mc_addr_count, ixgbe_mc_addr_itr func,
88485d0a26eSJack F Vogel 			      bool clear)
88513705f88SJack F Vogel {
8869ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw,
88785d0a26eSJack F Vogel 			       mc_addr_list, mc_addr_count, func, clear),
88813705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
88913705f88SJack F Vogel }
89013705f88SJack F Vogel 
89113705f88SJack F Vogel /**
89213705f88SJack F Vogel  *  ixgbe_enable_mc - Enable multicast address in RAR
89313705f88SJack F Vogel  *  @hw: pointer to hardware structure
89413705f88SJack F Vogel  *
89513705f88SJack F Vogel  *  Enables multicast address in RAR and the use of the multicast hash table.
89613705f88SJack F Vogel  **/
89713705f88SJack F Vogel s32 ixgbe_enable_mc(struct ixgbe_hw *hw)
89813705f88SJack F Vogel {
8999ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw),
90013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
90113705f88SJack F Vogel }
90213705f88SJack F Vogel 
90313705f88SJack F Vogel /**
90413705f88SJack F Vogel  *  ixgbe_disable_mc - Disable multicast address in RAR
90513705f88SJack F Vogel  *  @hw: pointer to hardware structure
90613705f88SJack F Vogel  *
90713705f88SJack F Vogel  *  Disables multicast address in RAR and the use of the multicast hash table.
90813705f88SJack F Vogel  **/
90913705f88SJack F Vogel s32 ixgbe_disable_mc(struct ixgbe_hw *hw)
91013705f88SJack F Vogel {
9119ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw),
91213705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
91313705f88SJack F Vogel }
91413705f88SJack F Vogel 
91513705f88SJack F Vogel /**
91613705f88SJack F Vogel  *  ixgbe_clear_vfta - Clear VLAN filter table
91713705f88SJack F Vogel  *  @hw: pointer to hardware structure
91813705f88SJack F Vogel  *
91913705f88SJack F Vogel  *  Clears the VLAN filer table, and the VMDq index associated with the filter
92013705f88SJack F Vogel  **/
92113705f88SJack F Vogel s32 ixgbe_clear_vfta(struct ixgbe_hw *hw)
92213705f88SJack F Vogel {
9239ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw),
92413705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
92513705f88SJack F Vogel }
92613705f88SJack F Vogel 
92713705f88SJack F Vogel /**
92813705f88SJack F Vogel  *  ixgbe_set_vfta - Set VLAN filter table
92913705f88SJack F Vogel  *  @hw: pointer to hardware structure
93013705f88SJack F Vogel  *  @vlan: VLAN id to write to VLAN filter
93113705f88SJack F Vogel  *  @vind: VMDq output index that maps queue to VLAN id in VFTA
93213705f88SJack F Vogel  *  @vlan_on: boolean flag to turn on/off VLAN in VFTA
93313705f88SJack F Vogel  *
93413705f88SJack F Vogel  *  Turn on/off specified VLAN in the VLAN filter table.
93513705f88SJack F Vogel  **/
93613705f88SJack F Vogel s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on)
93713705f88SJack F Vogel {
9389ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind,
93913705f88SJack F Vogel 			       vlan_on), IXGBE_NOT_IMPLEMENTED);
94013705f88SJack F Vogel }
94113705f88SJack F Vogel 
94213705f88SJack F Vogel /**
94385d0a26eSJack F Vogel  *  ixgbe_set_vlvf - Set VLAN Pool Filter
94485d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
94585d0a26eSJack F Vogel  *  @vlan: VLAN id to write to VLAN filter
94685d0a26eSJack F Vogel  *  @vind: VMDq output index that maps queue to VLAN id in VFVFB
94785d0a26eSJack F Vogel  *  @vlan_on: boolean flag to turn on/off VLAN in VFVF
94885d0a26eSJack F Vogel  *  @vfta_changed: pointer to boolean flag which indicates whether VFTA
94985d0a26eSJack F Vogel  *                 should be changed
95085d0a26eSJack F Vogel  *
95185d0a26eSJack F Vogel  *  Turn on/off specified bit in VLVF table.
95285d0a26eSJack F Vogel  **/
95385d0a26eSJack F Vogel s32 ixgbe_set_vlvf(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on,
95485d0a26eSJack F Vogel 		    bool *vfta_changed)
95585d0a26eSJack F Vogel {
95685d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vlvf, (hw, vlan, vind,
95785d0a26eSJack F Vogel 			       vlan_on, vfta_changed), IXGBE_NOT_IMPLEMENTED);
95885d0a26eSJack F Vogel }
95985d0a26eSJack F Vogel 
96085d0a26eSJack F Vogel /**
9610ac6dfecSJack F Vogel  *  ixgbe_fc_enable - Enable flow control
96213705f88SJack F Vogel  *  @hw: pointer to hardware structure
96313705f88SJack F Vogel  *  @packetbuf_num: packet buffer number (0-7)
96413705f88SJack F Vogel  *
96513705f88SJack F Vogel  *  Configures the flow control settings based on SW configuration.
96613705f88SJack F Vogel  **/
9670ac6dfecSJack F Vogel s32 ixgbe_fc_enable(struct ixgbe_hw *hw, s32 packetbuf_num)
96813705f88SJack F Vogel {
9690ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.fc_enable, (hw, packetbuf_num),
97013705f88SJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
97113705f88SJack F Vogel }
97213705f88SJack F Vogel 
9733ec35e52SJack F Vogel /**
97485d0a26eSJack F Vogel  * ixgbe_set_fw_drv_ver - Try to send the driver version number FW
97585d0a26eSJack F Vogel  * @hw: pointer to hardware structure
97685d0a26eSJack F Vogel  * @maj: driver major number to be sent to firmware
97785d0a26eSJack F Vogel  * @min: driver minor number to be sent to firmware
97885d0a26eSJack F Vogel  * @build: driver build number to be sent to firmware
97985d0a26eSJack F Vogel  * @ver: driver version number to be sent to firmware
98085d0a26eSJack F Vogel  **/
98185d0a26eSJack F Vogel s32 ixgbe_set_fw_drv_ver(struct ixgbe_hw *hw, u8 maj, u8 min, u8 build,
98285d0a26eSJack F Vogel 			 u8 ver)
98385d0a26eSJack F Vogel {
98485d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_fw_drv_ver, (hw, maj, min,
98585d0a26eSJack F Vogel 			       build, ver), IXGBE_NOT_IMPLEMENTED);
98685d0a26eSJack F Vogel }
98785d0a26eSJack F Vogel 
98885d0a26eSJack F Vogel 
98985d0a26eSJack F Vogel /**
9903ec35e52SJack F Vogel  *  ixgbe_read_analog_reg8 - Reads 8 bit analog register
9913ec35e52SJack F Vogel  *  @hw: pointer to hardware structure
9923ec35e52SJack F Vogel  *  @reg: analog register to read
9933ec35e52SJack F Vogel  *  @val: read value
9943ec35e52SJack F Vogel  *
9953ec35e52SJack F Vogel  *  Performs write operation to analog register specified.
9963ec35e52SJack F Vogel  **/
9973ec35e52SJack F Vogel s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val)
9983ec35e52SJack F Vogel {
9999ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg,
10009ca4041bSJack F Vogel 			       val), IXGBE_NOT_IMPLEMENTED);
10013ec35e52SJack F Vogel }
10023ec35e52SJack F Vogel 
10033ec35e52SJack F Vogel /**
10043ec35e52SJack F Vogel  *  ixgbe_write_analog_reg8 - Writes 8 bit analog register
10053ec35e52SJack F Vogel  *  @hw: pointer to hardware structure
10063ec35e52SJack F Vogel  *  @reg: analog register to write
10073ec35e52SJack F Vogel  *  @val: value to write
10083ec35e52SJack F Vogel  *
10093ec35e52SJack F Vogel  *  Performs write operation to Atlas analog register specified.
10103ec35e52SJack F Vogel  **/
10113ec35e52SJack F Vogel s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val)
10123ec35e52SJack F Vogel {
10139ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg,
10149ca4041bSJack F Vogel 			       val), IXGBE_NOT_IMPLEMENTED);
10153ec35e52SJack F Vogel }
10163ec35e52SJack F Vogel 
10175b7f4cedSJack F Vogel /**
10185b7f4cedSJack F Vogel  *  ixgbe_init_uta_tables - Initializes Unicast Table Arrays.
10195b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
10205b7f4cedSJack F Vogel  *
10215b7f4cedSJack F Vogel  *  Initializes the Unicast Table Arrays to zero on device load.  This
10225b7f4cedSJack F Vogel  *  is part of the Rx init addr execution path.
10235b7f4cedSJack F Vogel  **/
10245b7f4cedSJack F Vogel s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw)
10255b7f4cedSJack F Vogel {
10265b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw),
10275b7f4cedSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
10285b7f4cedSJack F Vogel }
10291b6e0dbaSJack F Vogel 
10301b6e0dbaSJack F Vogel /**
10310ac6dfecSJack F Vogel  *  ixgbe_read_i2c_byte - Reads 8 bit word over I2C at specified device address
10320ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
10330ac6dfecSJack F Vogel  *  @byte_offset: byte offset to read
10340ac6dfecSJack F Vogel  *  @data: value read
10350ac6dfecSJack F Vogel  *
10360ac6dfecSJack F Vogel  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
10370ac6dfecSJack F Vogel  **/
10380ac6dfecSJack F Vogel s32 ixgbe_read_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr,
10390ac6dfecSJack F Vogel 			u8 *data)
10400ac6dfecSJack F Vogel {
10410ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_byte, (hw, byte_offset,
10420ac6dfecSJack F Vogel 			       dev_addr, data), IXGBE_NOT_IMPLEMENTED);
10430ac6dfecSJack F Vogel }
10440ac6dfecSJack F Vogel 
10450ac6dfecSJack F Vogel /**
10460ac6dfecSJack F Vogel  *  ixgbe_write_i2c_byte - Writes 8 bit word over I2C
10470ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
10480ac6dfecSJack F Vogel  *  @byte_offset: byte offset to write
10490ac6dfecSJack F Vogel  *  @data: value to write
10500ac6dfecSJack F Vogel  *
10510ac6dfecSJack F Vogel  *  Performs byte write operation to SFP module's EEPROM over I2C interface
10520ac6dfecSJack F Vogel  *  at a specified device address.
10530ac6dfecSJack F Vogel  **/
10540ac6dfecSJack F Vogel s32 ixgbe_write_i2c_byte(struct ixgbe_hw *hw, u8 byte_offset, u8 dev_addr,
10550ac6dfecSJack F Vogel 			 u8 data)
10560ac6dfecSJack F Vogel {
10570ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_byte, (hw, byte_offset,
10580ac6dfecSJack F Vogel 			       dev_addr, data), IXGBE_NOT_IMPLEMENTED);
10590ac6dfecSJack F Vogel }
10600ac6dfecSJack F Vogel 
10610ac6dfecSJack F Vogel /**
10620ac6dfecSJack F Vogel  *  ixgbe_write_i2c_eeprom - Writes 8 bit EEPROM word over I2C interface
10630ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
10640ac6dfecSJack F Vogel  *  @byte_offset: EEPROM byte offset to write
10650ac6dfecSJack F Vogel  *  @eeprom_data: value to write
10660ac6dfecSJack F Vogel  *
10670ac6dfecSJack F Vogel  *  Performs byte write operation to SFP module's EEPROM over I2C interface.
10680ac6dfecSJack F Vogel  **/
10690ac6dfecSJack F Vogel s32 ixgbe_write_i2c_eeprom(struct ixgbe_hw *hw,
10700ac6dfecSJack F Vogel 			   u8 byte_offset, u8 eeprom_data)
10710ac6dfecSJack F Vogel {
10720ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_i2c_eeprom,
10730ac6dfecSJack F Vogel 			       (hw, byte_offset, eeprom_data),
10740ac6dfecSJack F Vogel 			       IXGBE_NOT_IMPLEMENTED);
10750ac6dfecSJack F Vogel }
10760ac6dfecSJack F Vogel 
10770ac6dfecSJack F Vogel /**
10781b6e0dbaSJack F Vogel  *  ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface
10791b6e0dbaSJack F Vogel  *  @hw: pointer to hardware structure
10801b6e0dbaSJack F Vogel  *  @byte_offset: EEPROM byte offset to read
10811b6e0dbaSJack F Vogel  *  @eeprom_data: value read
10821b6e0dbaSJack F Vogel  *
10831b6e0dbaSJack F Vogel  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
10841b6e0dbaSJack F Vogel  **/
10851b6e0dbaSJack F Vogel s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data)
10861b6e0dbaSJack F Vogel {
10871b6e0dbaSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom,
10881b6e0dbaSJack F Vogel 			      (hw, byte_offset, eeprom_data),
10891b6e0dbaSJack F Vogel 			      IXGBE_NOT_IMPLEMENTED);
10901b6e0dbaSJack F Vogel }
10911b6e0dbaSJack F Vogel 
10921b6e0dbaSJack F Vogel /**
10931b6e0dbaSJack F Vogel  *  ixgbe_get_supported_physical_layer - Returns physical layer type
10941b6e0dbaSJack F Vogel  *  @hw: pointer to hardware structure
10951b6e0dbaSJack F Vogel  *
10961b6e0dbaSJack F Vogel  *  Determines physical layer capabilities of the current configuration.
10971b6e0dbaSJack F Vogel  **/
10981b6e0dbaSJack F Vogel u32 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw)
10991b6e0dbaSJack F Vogel {
11001b6e0dbaSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer,
11011b6e0dbaSJack F Vogel 			       (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN);
11021b6e0dbaSJack F Vogel }
11030ac6dfecSJack F Vogel 
11040ac6dfecSJack F Vogel /**
11050ac6dfecSJack F Vogel  *  ixgbe_enable_rx_dma - Enables Rx DMA unit, dependant on device specifics
11060ac6dfecSJack F Vogel  *  @hw: pointer to hardware structure
11070ac6dfecSJack F Vogel  *  @regval: bitfield to write to the Rx DMA register
11080ac6dfecSJack F Vogel  *
11090ac6dfecSJack F Vogel  *  Enables the Rx DMA unit of the device.
11100ac6dfecSJack F Vogel  **/
11110ac6dfecSJack F Vogel s32 ixgbe_enable_rx_dma(struct ixgbe_hw *hw, u32 regval)
11120ac6dfecSJack F Vogel {
11130ac6dfecSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_rx_dma,
11140ac6dfecSJack F Vogel 			       (hw, regval), IXGBE_NOT_IMPLEMENTED);
11150ac6dfecSJack F Vogel }
1116d8602bb9SJack F Vogel 
1117d8602bb9SJack F Vogel /**
111885d0a26eSJack F Vogel  *  ixgbe_disable_sec_rx_path - Stops the receive data path
111985d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
112085d0a26eSJack F Vogel  *
112185d0a26eSJack F Vogel  *  Stops the receive data path.
112285d0a26eSJack F Vogel  **/
112385d0a26eSJack F Vogel s32 ixgbe_disable_sec_rx_path(struct ixgbe_hw *hw)
112485d0a26eSJack F Vogel {
112585d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.disable_sec_rx_path,
112685d0a26eSJack F Vogel 				(hw), IXGBE_NOT_IMPLEMENTED);
112785d0a26eSJack F Vogel }
112885d0a26eSJack F Vogel 
112985d0a26eSJack F Vogel /**
113085d0a26eSJack F Vogel  *  ixgbe_enable_sec_rx_path - Enables the receive data path
113185d0a26eSJack F Vogel  *  @hw: pointer to hardware structure
113285d0a26eSJack F Vogel  *
113385d0a26eSJack F Vogel  *  Enables the receive data path.
113485d0a26eSJack F Vogel  **/
113585d0a26eSJack F Vogel s32 ixgbe_enable_sec_rx_path(struct ixgbe_hw *hw)
113685d0a26eSJack F Vogel {
113785d0a26eSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_sec_rx_path,
113885d0a26eSJack F Vogel 				(hw), IXGBE_NOT_IMPLEMENTED);
113985d0a26eSJack F Vogel }
114085d0a26eSJack F Vogel 
114185d0a26eSJack F Vogel /**
1142d8602bb9SJack F Vogel  *  ixgbe_acquire_swfw_semaphore - Acquire SWFW semaphore
1143d8602bb9SJack F Vogel  *  @hw: pointer to hardware structure
1144d8602bb9SJack F Vogel  *  @mask: Mask to specify which semaphore to acquire
1145d8602bb9SJack F Vogel  *
1146d8602bb9SJack F Vogel  *  Acquires the SWFW semaphore through SW_FW_SYNC register for the specified
1147d8602bb9SJack F Vogel  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
1148d8602bb9SJack F Vogel  **/
1149d8602bb9SJack F Vogel s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u16 mask)
1150d8602bb9SJack F Vogel {
1151d8602bb9SJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.acquire_swfw_sync,
1152d8602bb9SJack F Vogel 			       (hw, mask), IXGBE_NOT_IMPLEMENTED);
1153d8602bb9SJack F Vogel }
1154d8602bb9SJack F Vogel 
1155d8602bb9SJack F Vogel /**
1156d8602bb9SJack F Vogel  *  ixgbe_release_swfw_semaphore - Release SWFW semaphore
1157d8602bb9SJack F Vogel  *  @hw: pointer to hardware structure
1158d8602bb9SJack F Vogel  *  @mask: Mask to specify which semaphore to release
1159d8602bb9SJack F Vogel  *
1160d8602bb9SJack F Vogel  *  Releases the SWFW semaphore through SW_FW_SYNC register for the specified
1161d8602bb9SJack F Vogel  *  function (CSR, PHY0, PHY1, EEPROM, Flash)
1162d8602bb9SJack F Vogel  **/
1163d8602bb9SJack F Vogel void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u16 mask)
1164d8602bb9SJack F Vogel {
1165d8602bb9SJack F Vogel 	if (hw->mac.ops.release_swfw_sync)
1166d8602bb9SJack F Vogel 		hw->mac.ops.release_swfw_sync(hw, mask);
1167d8602bb9SJack F Vogel }
1168d8602bb9SJack F Vogel 
1169