xref: /freebsd/sys/dev/ixgbe/ixgbe_api.c (revision 1b6e0dba)
19ca4041bSJack F Vogel /******************************************************************************
213705f88SJack F Vogel 
39ca4041bSJack F Vogel   Copyright (c) 2001-2008, 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 
389ca4041bSJack F Vogel extern s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw);
3913705f88SJack F Vogel 
4013705f88SJack F Vogel /**
4113705f88SJack F Vogel  *  ixgbe_init_shared_code - Initialize the shared code
4213705f88SJack F Vogel  *  @hw: pointer to hardware structure
4313705f88SJack F Vogel  *
4413705f88SJack F Vogel  *  This will assign function pointers and assign the MAC type and PHY code.
4513705f88SJack F Vogel  *  Does not touch the hardware. This function must be called prior to any
4613705f88SJack F Vogel  *  other function in the shared code. The ixgbe_hw structure should be
4713705f88SJack F Vogel  *  memset to 0 prior to calling this function.  The following fields in
4813705f88SJack F Vogel  *  hw structure should be filled in prior to calling this function:
4913705f88SJack F Vogel  *  hw_addr, back, device_id, vendor_id, subsystem_device_id,
5013705f88SJack F Vogel  *  subsystem_vendor_id, and revision_id
5113705f88SJack F Vogel  **/
5213705f88SJack F Vogel s32 ixgbe_init_shared_code(struct ixgbe_hw *hw)
5313705f88SJack F Vogel {
543ec35e52SJack F Vogel 	s32 status;
5513705f88SJack 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;
6513705f88SJack F Vogel 	default:
6613705f88SJack F Vogel 		status = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
6713705f88SJack F Vogel 		break;
6813705f88SJack F Vogel 	}
6913705f88SJack F Vogel 
7013705f88SJack F Vogel 	return status;
7113705f88SJack F Vogel }
7213705f88SJack F Vogel 
7313705f88SJack F Vogel /**
743ec35e52SJack F Vogel  *  ixgbe_set_mac_type - Sets MAC type
753ec35e52SJack F Vogel  *  @hw: pointer to the HW structure
763ec35e52SJack F Vogel  *
773ec35e52SJack F Vogel  *  This function sets the mac type of the adapter based on the
783ec35e52SJack F Vogel  *  vendor ID and device ID stored in the hw structure.
793ec35e52SJack F Vogel  **/
803ec35e52SJack F Vogel s32 ixgbe_set_mac_type(struct ixgbe_hw *hw)
813ec35e52SJack F Vogel {
823ec35e52SJack F Vogel 	s32 ret_val = IXGBE_SUCCESS;
833ec35e52SJack F Vogel 
849ca4041bSJack F Vogel 	DEBUGFUNC("ixgbe_set_mac_type\n");
853ec35e52SJack F Vogel 
863ec35e52SJack F Vogel 	if (hw->vendor_id == IXGBE_INTEL_VENDOR_ID) {
873ec35e52SJack F Vogel 		switch (hw->device_id) {
881b6e0dbaSJack F Vogel 		case IXGBE_DEV_ID_82598:
893ec35e52SJack F Vogel 		case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
903ec35e52SJack F Vogel 		case IXGBE_DEV_ID_82598AF_DUAL_PORT:
919ca4041bSJack F Vogel 		case IXGBE_DEV_ID_82598AT:
923ec35e52SJack F Vogel 		case IXGBE_DEV_ID_82598EB_CX4:
939ca4041bSJack F Vogel 		case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
941b6e0dbaSJack F Vogel 		case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
951b6e0dbaSJack F Vogel 		case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
969ca4041bSJack F Vogel 		case IXGBE_DEV_ID_82598EB_XF_LR:
971b6e0dbaSJack F Vogel 		case IXGBE_DEV_ID_82598EB_SFP_LOM:
983ec35e52SJack F Vogel 			hw->mac.type = ixgbe_mac_82598EB;
993ec35e52SJack F Vogel 			break;
1003ec35e52SJack F Vogel 		default:
1013ec35e52SJack F Vogel 			ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
1023ec35e52SJack F Vogel 			break;
1033ec35e52SJack F Vogel 		}
1043ec35e52SJack F Vogel 	} else {
1053ec35e52SJack F Vogel 		ret_val = IXGBE_ERR_DEVICE_NOT_SUPPORTED;
1063ec35e52SJack F Vogel 	}
1073ec35e52SJack F Vogel 
1089ca4041bSJack F Vogel 	DEBUGOUT2("ixgbe_set_mac_type found mac: %d, returns: %d\n",
1099ca4041bSJack F Vogel 	          hw->mac.type, ret_val);
1103ec35e52SJack F Vogel 	return ret_val;
1113ec35e52SJack F Vogel }
1123ec35e52SJack F Vogel 
1133ec35e52SJack F Vogel /**
11413705f88SJack F Vogel  *  ixgbe_init_hw - Initialize the hardware
11513705f88SJack F Vogel  *  @hw: pointer to hardware structure
11613705f88SJack F Vogel  *
11713705f88SJack F Vogel  *  Initialize the hardware by resetting and then starting the hardware
11813705f88SJack F Vogel  **/
11913705f88SJack F Vogel s32 ixgbe_init_hw(struct ixgbe_hw *hw)
12013705f88SJack F Vogel {
1219ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_hw, (hw),
12213705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
12313705f88SJack F Vogel }
12413705f88SJack F Vogel 
12513705f88SJack F Vogel /**
12613705f88SJack F Vogel  *  ixgbe_reset_hw - Performs a hardware reset
12713705f88SJack F Vogel  *  @hw: pointer to hardware structure
12813705f88SJack F Vogel  *
12913705f88SJack F Vogel  *  Resets the hardware by resetting the transmit and receive units, masks and
13013705f88SJack F Vogel  *  clears all interrupts, performs a PHY reset, and performs a MAC reset
13113705f88SJack F Vogel  **/
13213705f88SJack F Vogel s32 ixgbe_reset_hw(struct ixgbe_hw *hw)
13313705f88SJack F Vogel {
1349ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.reset_hw, (hw),
13513705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
13613705f88SJack F Vogel }
13713705f88SJack F Vogel 
13813705f88SJack F Vogel /**
1399ca4041bSJack F Vogel  *  ixgbe_start_hw - Prepares hardware for Rx/Tx
14013705f88SJack F Vogel  *  @hw: pointer to hardware structure
14113705f88SJack F Vogel  *
14213705f88SJack F Vogel  *  Starts the hardware by filling the bus info structure and media type,
14313705f88SJack F Vogel  *  clears all on chip counters, initializes receive address registers,
14413705f88SJack F Vogel  *  multicast table, VLAN filter table, calls routine to setup link and
14513705f88SJack F Vogel  *  flow control settings, and leaves transmit and receive units disabled
14613705f88SJack F Vogel  *  and uninitialized.
14713705f88SJack F Vogel  **/
14813705f88SJack F Vogel s32 ixgbe_start_hw(struct ixgbe_hw *hw)
14913705f88SJack F Vogel {
1509ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.start_hw, (hw),
15113705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
15213705f88SJack F Vogel }
15313705f88SJack F Vogel 
15413705f88SJack F Vogel /**
15513705f88SJack F Vogel  *  ixgbe_clear_hw_cntrs - Clear hardware counters
15613705f88SJack F Vogel  *  @hw: pointer to hardware structure
15713705f88SJack F Vogel  *
15813705f88SJack F Vogel  *  Clears all hardware statistics counters by reading them from the hardware
15913705f88SJack F Vogel  *  Statistics counters are clear on read.
16013705f88SJack F Vogel  **/
16113705f88SJack F Vogel s32 ixgbe_clear_hw_cntrs(struct ixgbe_hw *hw)
16213705f88SJack F Vogel {
1639ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_hw_cntrs, (hw),
16413705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
16513705f88SJack F Vogel }
16613705f88SJack F Vogel 
16713705f88SJack F Vogel /**
16813705f88SJack F Vogel  *  ixgbe_get_media_type - Get media type
16913705f88SJack F Vogel  *  @hw: pointer to hardware structure
17013705f88SJack F Vogel  *
17113705f88SJack F Vogel  *  Returns the media type (fiber, copper, backplane)
17213705f88SJack F Vogel  **/
17313705f88SJack F Vogel enum ixgbe_media_type ixgbe_get_media_type(struct ixgbe_hw *hw)
17413705f88SJack F Vogel {
1759ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_media_type, (hw),
17613705f88SJack F Vogel 	                       ixgbe_media_type_unknown);
17713705f88SJack F Vogel }
17813705f88SJack F Vogel 
17913705f88SJack F Vogel /**
18013705f88SJack F Vogel  *  ixgbe_get_mac_addr - Get MAC address
18113705f88SJack F Vogel  *  @hw: pointer to hardware structure
18213705f88SJack F Vogel  *  @mac_addr: Adapter MAC address
18313705f88SJack F Vogel  *
18413705f88SJack F Vogel  *  Reads the adapter's MAC address from the first Receive Address Register
1859ca4041bSJack F Vogel  *  (RAR0) A reset of the adapter must have been performed prior to calling
1869ca4041bSJack F Vogel  *  this function in order for the MAC address to have been loaded from the
1879ca4041bSJack F Vogel  *  EEPROM into RAR0
18813705f88SJack F Vogel  **/
18913705f88SJack F Vogel s32 ixgbe_get_mac_addr(struct ixgbe_hw *hw, u8 *mac_addr)
19013705f88SJack F Vogel {
1919ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_mac_addr,
19213705f88SJack F Vogel 	                       (hw, mac_addr), IXGBE_NOT_IMPLEMENTED);
19313705f88SJack F Vogel }
19413705f88SJack F Vogel 
19513705f88SJack F Vogel /**
19613705f88SJack F Vogel  *  ixgbe_get_bus_info - Set PCI bus info
19713705f88SJack F Vogel  *  @hw: pointer to hardware structure
19813705f88SJack F Vogel  *
19913705f88SJack F Vogel  *  Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure
20013705f88SJack F Vogel  **/
20113705f88SJack F Vogel s32 ixgbe_get_bus_info(struct ixgbe_hw *hw)
20213705f88SJack F Vogel {
2039ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_bus_info, (hw),
20413705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
20513705f88SJack F Vogel }
20613705f88SJack F Vogel 
20713705f88SJack F Vogel /**
2089ca4041bSJack F Vogel  *  ixgbe_get_num_of_tx_queues - Get Tx queues
20913705f88SJack F Vogel  *  @hw: pointer to hardware structure
21013705f88SJack F Vogel  *
21113705f88SJack F Vogel  *  Returns the number of transmit queues for the given adapter.
21213705f88SJack F Vogel  **/
21313705f88SJack F Vogel u32 ixgbe_get_num_of_tx_queues(struct ixgbe_hw *hw)
21413705f88SJack F Vogel {
2159ca4041bSJack F Vogel 	return hw->mac.max_tx_queues;
21613705f88SJack F Vogel }
21713705f88SJack F Vogel 
21813705f88SJack F Vogel /**
2199ca4041bSJack F Vogel  *  ixgbe_get_num_of_rx_queues - Get Rx queues
22013705f88SJack F Vogel  *  @hw: pointer to hardware structure
22113705f88SJack F Vogel  *
22213705f88SJack F Vogel  *  Returns the number of receive queues for the given adapter.
22313705f88SJack F Vogel  **/
22413705f88SJack F Vogel u32 ixgbe_get_num_of_rx_queues(struct ixgbe_hw *hw)
22513705f88SJack F Vogel {
2269ca4041bSJack F Vogel 	return hw->mac.max_rx_queues;
22713705f88SJack F Vogel }
22813705f88SJack F Vogel 
22913705f88SJack F Vogel /**
2309ca4041bSJack F Vogel  *  ixgbe_stop_adapter - Disable Rx/Tx units
23113705f88SJack F Vogel  *  @hw: pointer to hardware structure
23213705f88SJack F Vogel  *
23313705f88SJack F Vogel  *  Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts,
23413705f88SJack F Vogel  *  disables transmit and receive units. The adapter_stopped flag is used by
23513705f88SJack F Vogel  *  the shared code and drivers to determine if the adapter is in a stopped
23613705f88SJack F Vogel  *  state and should not touch the hardware.
23713705f88SJack F Vogel  **/
23813705f88SJack F Vogel s32 ixgbe_stop_adapter(struct ixgbe_hw *hw)
23913705f88SJack F Vogel {
2409ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.stop_adapter, (hw),
24113705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
24213705f88SJack F Vogel }
24313705f88SJack F Vogel 
24413705f88SJack F Vogel /**
2459ca4041bSJack F Vogel  *  ixgbe_read_pba_num - Reads part number from EEPROM
2469ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
2479ca4041bSJack F Vogel  *  @pba_num: stores the part number from the EEPROM
2489ca4041bSJack F Vogel  *
2499ca4041bSJack F Vogel  *  Reads the part number from the EEPROM.
2509ca4041bSJack F Vogel  **/
2519ca4041bSJack F Vogel s32 ixgbe_read_pba_num(struct ixgbe_hw *hw, u32 *pba_num)
2529ca4041bSJack F Vogel {
2539ca4041bSJack F Vogel 	return ixgbe_read_pba_num_generic(hw, pba_num);
2549ca4041bSJack F Vogel }
2559ca4041bSJack F Vogel 
2569ca4041bSJack F Vogel /**
25713705f88SJack F Vogel  *  ixgbe_identify_phy - Get PHY type
25813705f88SJack F Vogel  *  @hw: pointer to hardware structure
25913705f88SJack F Vogel  *
26013705f88SJack F Vogel  *  Determines the physical layer module found on the current adapter.
26113705f88SJack F Vogel  **/
26213705f88SJack F Vogel s32 ixgbe_identify_phy(struct ixgbe_hw *hw)
26313705f88SJack F Vogel {
26413705f88SJack F Vogel 	s32 status = IXGBE_SUCCESS;
26513705f88SJack F Vogel 
26613705f88SJack F Vogel 	if (hw->phy.type == ixgbe_phy_unknown) {
26713705f88SJack F Vogel 		status = ixgbe_call_func(hw,
2689ca4041bSJack F Vogel 		                         hw->phy.ops.identify,
26913705f88SJack F Vogel 		                         (hw),
27013705f88SJack F Vogel 		                         IXGBE_NOT_IMPLEMENTED);
27113705f88SJack F Vogel 	}
27213705f88SJack F Vogel 
27313705f88SJack F Vogel 	return status;
27413705f88SJack F Vogel }
27513705f88SJack F Vogel 
27613705f88SJack F Vogel /**
27713705f88SJack F Vogel  *  ixgbe_reset_phy - Perform a PHY reset
27813705f88SJack F Vogel  *  @hw: pointer to hardware structure
27913705f88SJack F Vogel  **/
28013705f88SJack F Vogel s32 ixgbe_reset_phy(struct ixgbe_hw *hw)
28113705f88SJack F Vogel {
28213705f88SJack F Vogel 	s32 status = IXGBE_SUCCESS;
28313705f88SJack F Vogel 
28413705f88SJack F Vogel 	if (hw->phy.type == ixgbe_phy_unknown) {
2851b6e0dbaSJack F Vogel 		if (ixgbe_identify_phy(hw) != IXGBE_SUCCESS)
28613705f88SJack F Vogel 			status = IXGBE_ERR_PHY;
28713705f88SJack F Vogel 	}
28813705f88SJack F Vogel 
28913705f88SJack F Vogel 	if (status == IXGBE_SUCCESS) {
2909ca4041bSJack F Vogel 		status = ixgbe_call_func(hw, hw->phy.ops.reset, (hw),
29113705f88SJack F Vogel 		                         IXGBE_NOT_IMPLEMENTED);
29213705f88SJack F Vogel 	}
29313705f88SJack F Vogel 	return status;
29413705f88SJack F Vogel }
29513705f88SJack F Vogel 
29613705f88SJack F Vogel /**
2979ca4041bSJack F Vogel  *  ixgbe_get_phy_firmware_version -
2989ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
2999ca4041bSJack F Vogel  *  @firmware_version: pointer to firmware version
3009ca4041bSJack F Vogel  **/
3019ca4041bSJack F Vogel s32 ixgbe_get_phy_firmware_version(struct ixgbe_hw *hw, u16 *firmware_version)
3029ca4041bSJack F Vogel {
3039ca4041bSJack F Vogel 	s32 status = IXGBE_SUCCESS;
3049ca4041bSJack F Vogel 
3059ca4041bSJack F Vogel 	status = ixgbe_call_func(hw, hw->phy.ops.get_firmware_version,
3069ca4041bSJack F Vogel 	                         (hw, firmware_version),
3079ca4041bSJack F Vogel 	                         IXGBE_NOT_IMPLEMENTED);
3089ca4041bSJack F Vogel 	return status;
3099ca4041bSJack F Vogel }
3109ca4041bSJack F Vogel 
3119ca4041bSJack F Vogel /**
31213705f88SJack F Vogel  *  ixgbe_read_phy_reg - Read PHY register
31313705f88SJack F Vogel  *  @hw: pointer to hardware structure
31413705f88SJack F Vogel  *  @reg_addr: 32 bit address of PHY register to read
31513705f88SJack F Vogel  *  @phy_data: Pointer to read data from PHY register
31613705f88SJack F Vogel  *
31713705f88SJack F Vogel  *  Reads a value from a specified PHY register
31813705f88SJack F Vogel  **/
31913705f88SJack F Vogel s32 ixgbe_read_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
32013705f88SJack F Vogel                        u16 *phy_data)
32113705f88SJack F Vogel {
3229ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_reg, (hw, reg_addr,
3239ca4041bSJack F Vogel 	                       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
32413705f88SJack F Vogel }
32513705f88SJack F Vogel 
32613705f88SJack F Vogel /**
32713705f88SJack F Vogel  *  ixgbe_write_phy_reg - Write PHY register
32813705f88SJack F Vogel  *  @hw: pointer to hardware structure
32913705f88SJack F Vogel  *  @reg_addr: 32 bit PHY register to write
33013705f88SJack F Vogel  *  @phy_data: Data to write to the PHY register
33113705f88SJack F Vogel  *
33213705f88SJack F Vogel  *  Writes a value to specified PHY register
33313705f88SJack F Vogel  **/
33413705f88SJack F Vogel s32 ixgbe_write_phy_reg(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type,
33513705f88SJack F Vogel                         u16 phy_data)
33613705f88SJack F Vogel {
3379ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.write_reg, (hw, reg_addr,
3389ca4041bSJack F Vogel 	                       device_type, phy_data), IXGBE_NOT_IMPLEMENTED);
33913705f88SJack F Vogel }
34013705f88SJack F Vogel 
3419ca4041bSJack F Vogel /**
3429ca4041bSJack F Vogel  *  ixgbe_setup_phy_link - Restart PHY autoneg
3439ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
3449ca4041bSJack F Vogel  *
3459ca4041bSJack F Vogel  *  Restart autonegotiation and PHY and waits for completion.
3469ca4041bSJack F Vogel  **/
3479ca4041bSJack F Vogel s32 ixgbe_setup_phy_link(struct ixgbe_hw *hw)
3489ca4041bSJack F Vogel {
3499ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.setup_link, (hw),
35013705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
35113705f88SJack F Vogel }
3529ca4041bSJack F Vogel 
3539ca4041bSJack F Vogel /**
3549ca4041bSJack F Vogel  *  ixgbe_check_phy_link - Determine link and speed status
3559ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
3569ca4041bSJack F Vogel  *
3579ca4041bSJack F Vogel  *  Reads a PHY register to determine if link is up and the current speed for
3589ca4041bSJack F Vogel  *  the PHY.
3599ca4041bSJack F Vogel  **/
3609ca4041bSJack F Vogel s32 ixgbe_check_phy_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
3619ca4041bSJack F Vogel                          bool *link_up)
3629ca4041bSJack F Vogel {
3639ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.check_link, (hw, speed,
3649ca4041bSJack F Vogel 	                       link_up), IXGBE_NOT_IMPLEMENTED);
3659ca4041bSJack F Vogel }
3669ca4041bSJack F Vogel 
3679ca4041bSJack F Vogel /**
3689ca4041bSJack F Vogel  *  ixgbe_setup_phy_link_speed - Set auto advertise
3699ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
3709ca4041bSJack F Vogel  *  @speed: new link speed
3719ca4041bSJack F Vogel  *  @autoneg: TRUE if autonegotiation enabled
3729ca4041bSJack F Vogel  *
3739ca4041bSJack F Vogel  *  Sets the auto advertised capabilities
3749ca4041bSJack F Vogel  **/
3759ca4041bSJack F Vogel s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
3769ca4041bSJack F Vogel                                bool autoneg,
3779ca4041bSJack F Vogel                                bool autoneg_wait_to_complete)
3789ca4041bSJack F Vogel {
3799ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.setup_link_speed, (hw, speed,
3809ca4041bSJack F Vogel 	                       autoneg, autoneg_wait_to_complete),
3819ca4041bSJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
38213705f88SJack F Vogel }
38313705f88SJack F Vogel 
38413705f88SJack F Vogel /**
38513705f88SJack F Vogel  *  ixgbe_setup_link - Configure link settings
38613705f88SJack F Vogel  *  @hw: pointer to hardware structure
38713705f88SJack F Vogel  *
38813705f88SJack F Vogel  *  Configures link settings based on values in the ixgbe_hw struct.
38913705f88SJack F Vogel  *  Restarts the link.  Performs autonegotiation if needed.
39013705f88SJack F Vogel  **/
39113705f88SJack F Vogel s32 ixgbe_setup_link(struct ixgbe_hw *hw)
39213705f88SJack F Vogel {
3939ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw),
39413705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
39513705f88SJack F Vogel }
39613705f88SJack F Vogel 
39713705f88SJack F Vogel /**
39813705f88SJack F Vogel  *  ixgbe_check_link - Get link and speed status
39913705f88SJack F Vogel  *  @hw: pointer to hardware structure
40013705f88SJack F Vogel  *
40113705f88SJack F Vogel  *  Reads the links register to determine if link is up and the current speed
40213705f88SJack F Vogel  **/
40313705f88SJack F Vogel s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
4049ca4041bSJack F Vogel                      bool *link_up, bool link_up_wait_to_complete)
40513705f88SJack F Vogel {
4069ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.check_link, (hw, speed,
4079ca4041bSJack F Vogel 	                       link_up, link_up_wait_to_complete),
40813705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
40913705f88SJack F Vogel }
41013705f88SJack F Vogel 
41113705f88SJack F Vogel /**
41213705f88SJack F Vogel  *  ixgbe_setup_link_speed - Set link speed
41313705f88SJack F Vogel  *  @hw: pointer to hardware structure
41413705f88SJack F Vogel  *  @speed: new link speed
41513705f88SJack F Vogel  *  @autoneg: TRUE if autonegotiation enabled
41613705f88SJack F Vogel  *
41713705f88SJack F Vogel  *  Set the link speed and restarts the link.
41813705f88SJack F Vogel  **/
41913705f88SJack F Vogel s32 ixgbe_setup_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
42013705f88SJack F Vogel                            bool autoneg,
42113705f88SJack F Vogel                            bool autoneg_wait_to_complete)
42213705f88SJack F Vogel {
4239ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_link_speed, (hw, speed,
42413705f88SJack F Vogel 	                       autoneg, autoneg_wait_to_complete),
42513705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
42613705f88SJack F Vogel }
42713705f88SJack F Vogel 
42813705f88SJack F Vogel /**
4299ca4041bSJack F Vogel  *  ixgbe_get_link_capabilities - Returns link capabilities
43013705f88SJack F Vogel  *  @hw: pointer to hardware structure
43113705f88SJack F Vogel  *
4329ca4041bSJack F Vogel  *  Determines the link capabilities of the current configuration.
43313705f88SJack F Vogel  **/
4349ca4041bSJack F Vogel s32 ixgbe_get_link_capabilities(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
43513705f88SJack F Vogel                                 bool *autoneg)
43613705f88SJack F Vogel {
4379ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_link_capabilities, (hw,
4389ca4041bSJack F Vogel 	                       speed, autoneg), IXGBE_NOT_IMPLEMENTED);
43913705f88SJack F Vogel }
44013705f88SJack F Vogel 
44113705f88SJack F Vogel /**
4429ca4041bSJack F Vogel  *  ixgbe_led_on - Turn on LEDs
44313705f88SJack F Vogel  *  @hw: pointer to hardware structure
44413705f88SJack F Vogel  *  @index: led number to turn on
44513705f88SJack F Vogel  *
44613705f88SJack F Vogel  *  Turns on the software controllable LEDs.
44713705f88SJack F Vogel  **/
44813705f88SJack F Vogel s32 ixgbe_led_on(struct ixgbe_hw *hw, u32 index)
44913705f88SJack F Vogel {
4509ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.led_on, (hw, index),
45113705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
45213705f88SJack F Vogel }
45313705f88SJack F Vogel 
45413705f88SJack F Vogel /**
4559ca4041bSJack F Vogel  *  ixgbe_led_off - Turn off LEDs
45613705f88SJack F Vogel  *  @hw: pointer to hardware structure
45713705f88SJack F Vogel  *  @index: led number to turn off
45813705f88SJack F Vogel  *
45913705f88SJack F Vogel  *  Turns off the software controllable LEDs.
46013705f88SJack F Vogel  **/
46113705f88SJack F Vogel s32 ixgbe_led_off(struct ixgbe_hw *hw, u32 index)
46213705f88SJack F Vogel {
4639ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.led_off, (hw, index),
46413705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
46513705f88SJack F Vogel }
46613705f88SJack F Vogel 
46713705f88SJack F Vogel /**
4689ca4041bSJack F Vogel  *  ixgbe_blink_led_start - Blink LEDs
46913705f88SJack F Vogel  *  @hw: pointer to hardware structure
47013705f88SJack F Vogel  *  @index: led number to blink
47113705f88SJack F Vogel  *
47213705f88SJack F Vogel  *  Blink LED based on index.
47313705f88SJack F Vogel  **/
47413705f88SJack F Vogel s32 ixgbe_blink_led_start(struct ixgbe_hw *hw, u32 index)
47513705f88SJack F Vogel {
4769ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_start, (hw, index),
47713705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
47813705f88SJack F Vogel }
47913705f88SJack F Vogel 
48013705f88SJack F Vogel /**
4819ca4041bSJack F Vogel  *  ixgbe_blink_led_stop - Stop blinking LEDs
48213705f88SJack F Vogel  *  @hw: pointer to hardware structure
48313705f88SJack F Vogel  *
48413705f88SJack F Vogel  *  Stop blinking LED based on index.
48513705f88SJack F Vogel  **/
48613705f88SJack F Vogel s32 ixgbe_blink_led_stop(struct ixgbe_hw *hw, u32 index)
48713705f88SJack F Vogel {
4889ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.blink_led_stop, (hw, index),
48913705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
49013705f88SJack F Vogel }
49113705f88SJack F Vogel 
49213705f88SJack F Vogel /**
4939ca4041bSJack F Vogel  *  ixgbe_init_eeprom_params - Initialize EEPROM parameters
49413705f88SJack F Vogel  *  @hw: pointer to hardware structure
49513705f88SJack F Vogel  *
49613705f88SJack F Vogel  *  Initializes the EEPROM parameters ixgbe_eeprom_info within the
49713705f88SJack F Vogel  *  ixgbe_hw struct in order to set up EEPROM access.
49813705f88SJack F Vogel  **/
49913705f88SJack F Vogel s32 ixgbe_init_eeprom_params(struct ixgbe_hw *hw)
50013705f88SJack F Vogel {
5019ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.init_params, (hw),
50213705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
50313705f88SJack F Vogel }
50413705f88SJack F Vogel 
50513705f88SJack F Vogel 
50613705f88SJack F Vogel /**
50713705f88SJack F Vogel  *  ixgbe_write_eeprom - Write word to EEPROM
50813705f88SJack F Vogel  *  @hw: pointer to hardware structure
50913705f88SJack F Vogel  *  @offset: offset within the EEPROM to be written to
51013705f88SJack F Vogel  *  @data: 16 bit word to be written to the EEPROM
51113705f88SJack F Vogel  *
51213705f88SJack F Vogel  *  Writes 16 bit value to EEPROM. If ixgbe_eeprom_update_checksum is not
51313705f88SJack F Vogel  *  called after this function, the EEPROM will most likely contain an
51413705f88SJack F Vogel  *  invalid checksum.
51513705f88SJack F Vogel  **/
51613705f88SJack F Vogel s32 ixgbe_write_eeprom(struct ixgbe_hw *hw, u16 offset, u16 data)
51713705f88SJack F Vogel {
5189ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.write, (hw, offset, data),
51913705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
52013705f88SJack F Vogel }
52113705f88SJack F Vogel 
52213705f88SJack F Vogel /**
52313705f88SJack F Vogel  *  ixgbe_read_eeprom - Read word from EEPROM
52413705f88SJack F Vogel  *  @hw: pointer to hardware structure
52513705f88SJack F Vogel  *  @offset: offset within the EEPROM to be read
52613705f88SJack F Vogel  *  @data: read 16 bit value from EEPROM
52713705f88SJack F Vogel  *
52813705f88SJack F Vogel  *  Reads 16 bit value from EEPROM
52913705f88SJack F Vogel  **/
53013705f88SJack F Vogel s32 ixgbe_read_eeprom(struct ixgbe_hw *hw, u16 offset, u16 *data)
53113705f88SJack F Vogel {
5329ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.read, (hw, offset, data),
53313705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
53413705f88SJack F Vogel }
53513705f88SJack F Vogel 
53613705f88SJack F Vogel /**
53713705f88SJack F Vogel  *  ixgbe_validate_eeprom_checksum - Validate EEPROM checksum
53813705f88SJack F Vogel  *  @hw: pointer to hardware structure
53913705f88SJack F Vogel  *  @checksum_val: calculated checksum
54013705f88SJack F Vogel  *
54113705f88SJack F Vogel  *  Performs checksum calculation and validates the EEPROM checksum
54213705f88SJack F Vogel  **/
54313705f88SJack F Vogel s32 ixgbe_validate_eeprom_checksum(struct ixgbe_hw *hw, u16 *checksum_val)
54413705f88SJack F Vogel {
5459ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.validate_checksum,
54613705f88SJack F Vogel 	                       (hw, checksum_val), IXGBE_NOT_IMPLEMENTED);
54713705f88SJack F Vogel }
54813705f88SJack F Vogel 
54913705f88SJack F Vogel /**
55013705f88SJack F Vogel  *  ixgbe_eeprom_update_checksum - Updates the EEPROM checksum
55113705f88SJack F Vogel  *  @hw: pointer to hardware structure
55213705f88SJack F Vogel  **/
55313705f88SJack F Vogel s32 ixgbe_update_eeprom_checksum(struct ixgbe_hw *hw)
55413705f88SJack F Vogel {
5559ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->eeprom.ops.update_checksum, (hw),
55613705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
55713705f88SJack F Vogel }
55813705f88SJack F Vogel 
55913705f88SJack F Vogel /**
5609ca4041bSJack F Vogel  *  ixgbe_set_rar - Set Rx address register
56113705f88SJack F Vogel  *  @hw: pointer to hardware structure
56213705f88SJack F Vogel  *  @index: Receive address register to write
5639ca4041bSJack F Vogel  *  @addr: Address to put into receive address register
5649ca4041bSJack F Vogel  *  @vmdq: VMDq "set"
56513705f88SJack F Vogel  *  @enable_addr: set flag that address is active
56613705f88SJack F Vogel  *
56713705f88SJack F Vogel  *  Puts an ethernet address into a receive address register.
56813705f88SJack F Vogel  **/
5699ca4041bSJack F Vogel s32 ixgbe_set_rar(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
57013705f88SJack F Vogel                   u32 enable_addr)
57113705f88SJack F Vogel {
5729ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_rar, (hw, index, addr, vmdq,
57313705f88SJack F Vogel 	                       enable_addr), IXGBE_NOT_IMPLEMENTED);
57413705f88SJack F Vogel }
57513705f88SJack F Vogel 
57613705f88SJack F Vogel /**
5775b7f4cedSJack F Vogel  *  ixgbe_clear_rar - Clear Rx address register
5785b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
5795b7f4cedSJack F Vogel  *  @index: Receive address register to write
5805b7f4cedSJack F Vogel  *
5815b7f4cedSJack F Vogel  *  Puts an ethernet address into a receive address register.
5825b7f4cedSJack F Vogel  **/
5835b7f4cedSJack F Vogel s32 ixgbe_clear_rar(struct ixgbe_hw *hw, u32 index)
5845b7f4cedSJack F Vogel {
5855b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_rar, (hw, index),
5865b7f4cedSJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
5875b7f4cedSJack F Vogel }
5885b7f4cedSJack F Vogel 
5895b7f4cedSJack F Vogel /**
5909ca4041bSJack F Vogel  *  ixgbe_set_vmdq - Associate a VMDq index with a receive address
5919ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
5929ca4041bSJack F Vogel  *  @rar: receive address register index to associate with VMDq index
5939ca4041bSJack F Vogel  *  @vmdq: VMDq set or pool index
5949ca4041bSJack F Vogel  **/
5959ca4041bSJack F Vogel s32 ixgbe_set_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
5969ca4041bSJack F Vogel {
5979ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vmdq, (hw, rar, vmdq),
5989ca4041bSJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
5999ca4041bSJack F Vogel }
6009ca4041bSJack F Vogel 
6019ca4041bSJack F Vogel /**
6025b7f4cedSJack F Vogel  *  ixgbe_clear_vmdq - Disassociate a VMDq index from a receive address
6035b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
6045b7f4cedSJack F Vogel  *  @rar: receive address register index to disassociate with VMDq index
6055b7f4cedSJack F Vogel  *  @vmdq: VMDq set or pool index
6065b7f4cedSJack F Vogel  **/
6075b7f4cedSJack F Vogel s32 ixgbe_clear_vmdq(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
6085b7f4cedSJack F Vogel {
6095b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_vmdq, (hw, rar, vmdq),
6105b7f4cedSJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
6115b7f4cedSJack F Vogel }
6125b7f4cedSJack F Vogel 
6135b7f4cedSJack F Vogel /**
61413705f88SJack F Vogel  *  ixgbe_init_rx_addrs - Initializes receive address filters.
61513705f88SJack F Vogel  *  @hw: pointer to hardware structure
61613705f88SJack F Vogel  *
61713705f88SJack F Vogel  *  Places the MAC address in receive address register 0 and clears the rest
6189ca4041bSJack F Vogel  *  of the receive address registers. Clears the multicast table. Assumes
61913705f88SJack F Vogel  *  the receiver is in reset when the routine is called.
62013705f88SJack F Vogel  **/
62113705f88SJack F Vogel s32 ixgbe_init_rx_addrs(struct ixgbe_hw *hw)
62213705f88SJack F Vogel {
6239ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_rx_addrs, (hw),
62413705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
62513705f88SJack F Vogel }
62613705f88SJack F Vogel 
62713705f88SJack F Vogel /**
62813705f88SJack F Vogel  *  ixgbe_get_num_rx_addrs - Returns the number of RAR entries.
62913705f88SJack F Vogel  *  @hw: pointer to hardware structure
63013705f88SJack F Vogel  **/
63113705f88SJack F Vogel u32 ixgbe_get_num_rx_addrs(struct ixgbe_hw *hw)
63213705f88SJack F Vogel {
6339ca4041bSJack F Vogel 	return hw->mac.num_rar_entries;
6349ca4041bSJack F Vogel }
6359ca4041bSJack F Vogel 
6369ca4041bSJack F Vogel /**
6379ca4041bSJack F Vogel  *  ixgbe_update_uc_addr_list - Updates the MAC's list of secondary addresses
6389ca4041bSJack F Vogel  *  @hw: pointer to hardware structure
6399ca4041bSJack F Vogel  *  @addr_list: the list of new multicast addresses
6409ca4041bSJack F Vogel  *  @addr_count: number of addresses
6419ca4041bSJack F Vogel  *  @func: iterator function to walk the multicast address list
6429ca4041bSJack F Vogel  *
6439ca4041bSJack F Vogel  *  The given list replaces any existing list. Clears the secondary addrs from
6449ca4041bSJack F Vogel  *  receive address registers. Uses unused receive address registers for the
6459ca4041bSJack F Vogel  *  first secondary addresses, and falls back to promiscuous mode as needed.
6469ca4041bSJack F Vogel  **/
6479ca4041bSJack F Vogel s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list,
6489ca4041bSJack F Vogel                               u32 addr_count, ixgbe_mc_addr_itr func)
6499ca4041bSJack F Vogel {
6509ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.update_uc_addr_list, (hw,
6519ca4041bSJack F Vogel 	                       addr_list, addr_count, func),
6529ca4041bSJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
65313705f88SJack F Vogel }
65413705f88SJack F Vogel 
65513705f88SJack F Vogel /**
65613705f88SJack F Vogel  *  ixgbe_update_mc_addr_list - Updates the MAC's list of multicast addresses
65713705f88SJack F Vogel  *  @hw: pointer to hardware structure
65813705f88SJack F Vogel  *  @mc_addr_list: the list of new multicast addresses
65913705f88SJack F Vogel  *  @mc_addr_count: number of addresses
6609ca4041bSJack F Vogel  *  @func: iterator function to walk the multicast address list
66113705f88SJack F Vogel  *
66213705f88SJack F Vogel  *  The given list replaces any existing list. Clears the MC addrs from receive
6639ca4041bSJack F Vogel  *  address registers and the multicast table. Uses unused receive address
66413705f88SJack F Vogel  *  registers for the first multicast addresses, and hashes the rest into the
66513705f88SJack F Vogel  *  multicast table.
66613705f88SJack F Vogel  **/
66713705f88SJack F Vogel s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list,
6689ca4041bSJack F Vogel                               u32 mc_addr_count, ixgbe_mc_addr_itr func)
66913705f88SJack F Vogel {
6709ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.update_mc_addr_list, (hw,
6719ca4041bSJack F Vogel 	                       mc_addr_list, mc_addr_count, func),
67213705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
67313705f88SJack F Vogel }
67413705f88SJack F Vogel 
67513705f88SJack F Vogel /**
67613705f88SJack F Vogel  *  ixgbe_enable_mc - Enable multicast address in RAR
67713705f88SJack F Vogel  *  @hw: pointer to hardware structure
67813705f88SJack F Vogel  *
67913705f88SJack F Vogel  *  Enables multicast address in RAR and the use of the multicast hash table.
68013705f88SJack F Vogel  **/
68113705f88SJack F Vogel s32 ixgbe_enable_mc(struct ixgbe_hw *hw)
68213705f88SJack F Vogel {
6839ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.enable_mc, (hw),
68413705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
68513705f88SJack F Vogel }
68613705f88SJack F Vogel 
68713705f88SJack F Vogel /**
68813705f88SJack F Vogel  *  ixgbe_disable_mc - Disable multicast address in RAR
68913705f88SJack F Vogel  *  @hw: pointer to hardware structure
69013705f88SJack F Vogel  *
69113705f88SJack F Vogel  *  Disables multicast address in RAR and the use of the multicast hash table.
69213705f88SJack F Vogel  **/
69313705f88SJack F Vogel s32 ixgbe_disable_mc(struct ixgbe_hw *hw)
69413705f88SJack F Vogel {
6959ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.disable_mc, (hw),
69613705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
69713705f88SJack F Vogel }
69813705f88SJack F Vogel 
69913705f88SJack F Vogel /**
70013705f88SJack F Vogel  *  ixgbe_clear_vfta - Clear VLAN filter table
70113705f88SJack F Vogel  *  @hw: pointer to hardware structure
70213705f88SJack F Vogel  *
70313705f88SJack F Vogel  *  Clears the VLAN filer table, and the VMDq index associated with the filter
70413705f88SJack F Vogel  **/
70513705f88SJack F Vogel s32 ixgbe_clear_vfta(struct ixgbe_hw *hw)
70613705f88SJack F Vogel {
7079ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.clear_vfta, (hw),
70813705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
70913705f88SJack F Vogel }
71013705f88SJack F Vogel 
71113705f88SJack F Vogel /**
71213705f88SJack F Vogel  *  ixgbe_set_vfta - Set VLAN filter table
71313705f88SJack F Vogel  *  @hw: pointer to hardware structure
71413705f88SJack F Vogel  *  @vlan: VLAN id to write to VLAN filter
71513705f88SJack F Vogel  *  @vind: VMDq output index that maps queue to VLAN id in VFTA
71613705f88SJack F Vogel  *  @vlan_on: boolean flag to turn on/off VLAN in VFTA
71713705f88SJack F Vogel  *
71813705f88SJack F Vogel  *  Turn on/off specified VLAN in the VLAN filter table.
71913705f88SJack F Vogel  **/
72013705f88SJack F Vogel s32 ixgbe_set_vfta(struct ixgbe_hw *hw, u32 vlan, u32 vind, bool vlan_on)
72113705f88SJack F Vogel {
7229ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.set_vfta, (hw, vlan, vind,
72313705f88SJack F Vogel 	                       vlan_on), IXGBE_NOT_IMPLEMENTED);
72413705f88SJack F Vogel }
72513705f88SJack F Vogel 
72613705f88SJack F Vogel /**
72713705f88SJack F Vogel  *  ixgbe_setup_fc - Set flow control
72813705f88SJack F Vogel  *  @hw: pointer to hardware structure
72913705f88SJack F Vogel  *  @packetbuf_num: packet buffer number (0-7)
73013705f88SJack F Vogel  *
73113705f88SJack F Vogel  *  Configures the flow control settings based on SW configuration.
73213705f88SJack F Vogel  **/
73313705f88SJack F Vogel s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num)
73413705f88SJack F Vogel {
7359ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.setup_fc, (hw, packetbuf_num),
73613705f88SJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
73713705f88SJack F Vogel }
73813705f88SJack F Vogel 
7393ec35e52SJack F Vogel /**
7403ec35e52SJack F Vogel  *  ixgbe_read_analog_reg8 - Reads 8 bit analog register
7413ec35e52SJack F Vogel  *  @hw: pointer to hardware structure
7423ec35e52SJack F Vogel  *  @reg: analog register to read
7433ec35e52SJack F Vogel  *  @val: read value
7443ec35e52SJack F Vogel  *
7453ec35e52SJack F Vogel  *  Performs write operation to analog register specified.
7463ec35e52SJack F Vogel  **/
7473ec35e52SJack F Vogel s32 ixgbe_read_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 *val)
7483ec35e52SJack F Vogel {
7499ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.read_analog_reg8, (hw, reg,
7509ca4041bSJack F Vogel 	                       val), IXGBE_NOT_IMPLEMENTED);
7513ec35e52SJack F Vogel }
7523ec35e52SJack F Vogel 
7533ec35e52SJack F Vogel /**
7543ec35e52SJack F Vogel  *  ixgbe_write_analog_reg8 - Writes 8 bit analog register
7553ec35e52SJack F Vogel  *  @hw: pointer to hardware structure
7563ec35e52SJack F Vogel  *  @reg: analog register to write
7573ec35e52SJack F Vogel  *  @val: value to write
7583ec35e52SJack F Vogel  *
7593ec35e52SJack F Vogel  *  Performs write operation to Atlas analog register specified.
7603ec35e52SJack F Vogel  **/
7613ec35e52SJack F Vogel s32 ixgbe_write_analog_reg8(struct ixgbe_hw *hw, u32 reg, u8 val)
7623ec35e52SJack F Vogel {
7639ca4041bSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.write_analog_reg8, (hw, reg,
7649ca4041bSJack F Vogel 	                       val), IXGBE_NOT_IMPLEMENTED);
7653ec35e52SJack F Vogel }
7663ec35e52SJack F Vogel 
7675b7f4cedSJack F Vogel /**
7685b7f4cedSJack F Vogel  *  ixgbe_init_uta_tables - Initializes Unicast Table Arrays.
7695b7f4cedSJack F Vogel  *  @hw: pointer to hardware structure
7705b7f4cedSJack F Vogel  *
7715b7f4cedSJack F Vogel  *  Initializes the Unicast Table Arrays to zero on device load.  This
7725b7f4cedSJack F Vogel  *  is part of the Rx init addr execution path.
7735b7f4cedSJack F Vogel  **/
7745b7f4cedSJack F Vogel s32 ixgbe_init_uta_tables(struct ixgbe_hw *hw)
7755b7f4cedSJack F Vogel {
7765b7f4cedSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.init_uta_tables, (hw),
7775b7f4cedSJack F Vogel 	                       IXGBE_NOT_IMPLEMENTED);
7785b7f4cedSJack F Vogel }
7791b6e0dbaSJack F Vogel 
7801b6e0dbaSJack F Vogel /**
7811b6e0dbaSJack F Vogel  *  ixgbe_read_i2c_eeprom - Reads 8 bit EEPROM word over I2C interface
7821b6e0dbaSJack F Vogel  *  @hw: pointer to hardware structure
7831b6e0dbaSJack F Vogel  *  @byte_offset: EEPROM byte offset to read
7841b6e0dbaSJack F Vogel  *  @eeprom_data: value read
7851b6e0dbaSJack F Vogel  *
7861b6e0dbaSJack F Vogel  *  Performs byte read operation to SFP module's EEPROM over I2C interface.
7871b6e0dbaSJack F Vogel  **/
7881b6e0dbaSJack F Vogel s32 ixgbe_read_i2c_eeprom(struct ixgbe_hw *hw, u8 byte_offset, u8 *eeprom_data)
7891b6e0dbaSJack F Vogel {
7901b6e0dbaSJack F Vogel 	return ixgbe_call_func(hw, hw->phy.ops.read_i2c_eeprom,
7911b6e0dbaSJack F Vogel 	                      (hw, byte_offset, eeprom_data),
7921b6e0dbaSJack F Vogel 	                      IXGBE_NOT_IMPLEMENTED);
7931b6e0dbaSJack F Vogel }
7941b6e0dbaSJack F Vogel 
7951b6e0dbaSJack F Vogel /**
7961b6e0dbaSJack F Vogel  *  ixgbe_get_supported_physical_layer - Returns physical layer type
7971b6e0dbaSJack F Vogel  *  @hw: pointer to hardware structure
7981b6e0dbaSJack F Vogel  *
7991b6e0dbaSJack F Vogel  *  Determines physical layer capabilities of the current configuration.
8001b6e0dbaSJack F Vogel  **/
8011b6e0dbaSJack F Vogel u32 ixgbe_get_supported_physical_layer(struct ixgbe_hw *hw)
8021b6e0dbaSJack F Vogel {
8031b6e0dbaSJack F Vogel 	return ixgbe_call_func(hw, hw->mac.ops.get_supported_physical_layer,
8041b6e0dbaSJack F Vogel 	                       (hw), IXGBE_PHYSICAL_LAYER_UNKNOWN);
8051b6e0dbaSJack F Vogel }
806