ixgbe: make silicon specific functions generic
The new MAC type X540 shares much of the same functionality of some silicon specific functions. To reduce duplicate code, made these functions generic. Signed-off-by: Don Skidmore <donald.c.skidmore@intel.com> Tested-by: Stephen Ko <stephen.s.ko@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
		
					parent
					
						
							
								9b55bb0384
							
						
					
				
			
			
				commit
				
					
						a391f1d512
					
				
			
		
					 9 changed files with 98 additions and 126 deletions
				
			
		| 
						 | 
					@ -38,9 +38,6 @@
 | 
				
			||||||
#define IXGBE_82598_MC_TBL_SIZE  128
 | 
					#define IXGBE_82598_MC_TBL_SIZE  128
 | 
				
			||||||
#define IXGBE_82598_VFT_TBL_SIZE 128
 | 
					#define IXGBE_82598_VFT_TBL_SIZE 128
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static s32 ixgbe_get_copper_link_capabilities_82598(struct ixgbe_hw *hw,
 | 
					 | 
				
			||||||
                                             ixgbe_link_speed *speed,
 | 
					 | 
				
			||||||
                                             bool *autoneg);
 | 
					 | 
				
			||||||
static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
 | 
					static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
 | 
				
			||||||
                                         ixgbe_link_speed speed,
 | 
					                                         ixgbe_link_speed speed,
 | 
				
			||||||
                                         bool autoneg,
 | 
					                                         bool autoneg,
 | 
				
			||||||
| 
						 | 
					@ -156,7 +153,7 @@ static s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw)
 | 
				
			||||||
	if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
 | 
						if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
 | 
				
			||||||
		mac->ops.setup_link = &ixgbe_setup_copper_link_82598;
 | 
							mac->ops.setup_link = &ixgbe_setup_copper_link_82598;
 | 
				
			||||||
		mac->ops.get_link_capabilities =
 | 
							mac->ops.get_link_capabilities =
 | 
				
			||||||
		                  &ixgbe_get_copper_link_capabilities_82598;
 | 
								&ixgbe_get_copper_link_capabilities_generic;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (hw->phy.type) {
 | 
						switch (hw->phy.type) {
 | 
				
			||||||
| 
						 | 
					@ -273,37 +270,6 @@ static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
 | 
				
			||||||
	return status;
 | 
						return status;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 *  ixgbe_get_copper_link_capabilities_82598 - Determines link capabilities
 | 
					 | 
				
			||||||
 *  @hw: pointer to hardware structure
 | 
					 | 
				
			||||||
 *  @speed: pointer to link speed
 | 
					 | 
				
			||||||
 *  @autoneg: boolean auto-negotiation value
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *  Determines the link capabilities by reading the AUTOC register.
 | 
					 | 
				
			||||||
 **/
 | 
					 | 
				
			||||||
static s32 ixgbe_get_copper_link_capabilities_82598(struct ixgbe_hw *hw,
 | 
					 | 
				
			||||||
						    ixgbe_link_speed *speed,
 | 
					 | 
				
			||||||
						    bool *autoneg)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	s32 status = IXGBE_ERR_LINK_SETUP;
 | 
					 | 
				
			||||||
	u16 speed_ability;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	*speed = 0;
 | 
					 | 
				
			||||||
	*autoneg = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	status = hw->phy.ops.read_reg(hw, MDIO_SPEED, MDIO_MMD_PMAPMD,
 | 
					 | 
				
			||||||
	                              &speed_ability);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (status == 0) {
 | 
					 | 
				
			||||||
		if (speed_ability & MDIO_SPEED_10G)
 | 
					 | 
				
			||||||
		    *speed |= IXGBE_LINK_SPEED_10GB_FULL;
 | 
					 | 
				
			||||||
		if (speed_ability & MDIO_PMA_SPEED_1000)
 | 
					 | 
				
			||||||
		    *speed |= IXGBE_LINK_SPEED_1GB_FULL;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return status;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 *  ixgbe_get_media_type_82598 - Determines media type
 | 
					 *  ixgbe_get_media_type_82598 - Determines media type
 | 
				
			||||||
 *  @hw: pointer to hardware structure
 | 
					 *  @hw: pointer to hardware structure
 | 
				
			||||||
| 
						 | 
					@ -1225,6 +1191,7 @@ static struct ixgbe_mac_operations mac_ops_82598 = {
 | 
				
			||||||
static struct ixgbe_eeprom_operations eeprom_ops_82598 = {
 | 
					static struct ixgbe_eeprom_operations eeprom_ops_82598 = {
 | 
				
			||||||
	.init_params		= &ixgbe_init_eeprom_params_generic,
 | 
						.init_params		= &ixgbe_init_eeprom_params_generic,
 | 
				
			||||||
	.read			= &ixgbe_read_eerd_generic,
 | 
						.read			= &ixgbe_read_eerd_generic,
 | 
				
			||||||
 | 
						.calc_checksum          = &ixgbe_calc_eeprom_checksum_generic,
 | 
				
			||||||
	.validate_checksum	= &ixgbe_validate_eeprom_checksum_generic,
 | 
						.validate_checksum	= &ixgbe_validate_eeprom_checksum_generic,
 | 
				
			||||||
	.update_checksum	= &ixgbe_update_eeprom_checksum_generic,
 | 
						.update_checksum	= &ixgbe_update_eeprom_checksum_generic,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -56,9 +56,6 @@ static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
 | 
				
			||||||
                               ixgbe_link_speed speed,
 | 
					                               ixgbe_link_speed speed,
 | 
				
			||||||
                               bool autoneg,
 | 
					                               bool autoneg,
 | 
				
			||||||
                               bool autoneg_wait_to_complete);
 | 
					                               bool autoneg_wait_to_complete);
 | 
				
			||||||
static s32 ixgbe_get_copper_link_capabilities_82599(struct ixgbe_hw *hw,
 | 
					 | 
				
			||||||
                                             ixgbe_link_speed *speed,
 | 
					 | 
				
			||||||
                                             bool *autoneg);
 | 
					 | 
				
			||||||
static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
 | 
					static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
 | 
				
			||||||
                                         ixgbe_link_speed speed,
 | 
					                                         ixgbe_link_speed speed,
 | 
				
			||||||
                                         bool autoneg,
 | 
					                                         bool autoneg,
 | 
				
			||||||
| 
						 | 
					@ -174,7 +171,7 @@ static s32 ixgbe_init_phy_ops_82599(struct ixgbe_hw *hw)
 | 
				
			||||||
	if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
 | 
						if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
 | 
				
			||||||
		mac->ops.setup_link = &ixgbe_setup_copper_link_82599;
 | 
							mac->ops.setup_link = &ixgbe_setup_copper_link_82599;
 | 
				
			||||||
		mac->ops.get_link_capabilities =
 | 
							mac->ops.get_link_capabilities =
 | 
				
			||||||
		                  &ixgbe_get_copper_link_capabilities_82599;
 | 
								&ixgbe_get_copper_link_capabilities_generic;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Set necessary function pointers based on phy type */
 | 
						/* Set necessary function pointers based on phy type */
 | 
				
			||||||
| 
						 | 
					@ -289,37 +286,6 @@ out:
 | 
				
			||||||
	return status;
 | 
						return status;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 *  ixgbe_get_copper_link_capabilities_82599 - Determines link capabilities
 | 
					 | 
				
			||||||
 *  @hw: pointer to hardware structure
 | 
					 | 
				
			||||||
 *  @speed: pointer to link speed
 | 
					 | 
				
			||||||
 *  @autoneg: boolean auto-negotiation value
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *  Determines the link capabilities by reading the AUTOC register.
 | 
					 | 
				
			||||||
 **/
 | 
					 | 
				
			||||||
static s32 ixgbe_get_copper_link_capabilities_82599(struct ixgbe_hw *hw,
 | 
					 | 
				
			||||||
                                                    ixgbe_link_speed *speed,
 | 
					 | 
				
			||||||
                                                    bool *autoneg)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	s32 status = IXGBE_ERR_LINK_SETUP;
 | 
					 | 
				
			||||||
	u16 speed_ability;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	*speed = 0;
 | 
					 | 
				
			||||||
	*autoneg = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	status = hw->phy.ops.read_reg(hw, MDIO_SPEED, MDIO_MMD_PMAPMD,
 | 
					 | 
				
			||||||
	                              &speed_ability);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (status == 0) {
 | 
					 | 
				
			||||||
		if (speed_ability & MDIO_SPEED_10G)
 | 
					 | 
				
			||||||
		    *speed |= IXGBE_LINK_SPEED_10GB_FULL;
 | 
					 | 
				
			||||||
		if (speed_ability & MDIO_PMA_SPEED_1000)
 | 
					 | 
				
			||||||
		    *speed |= IXGBE_LINK_SPEED_1GB_FULL;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return status;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 *  ixgbe_get_media_type_82599 - Get media type
 | 
					 *  ixgbe_get_media_type_82599 - Get media type
 | 
				
			||||||
 *  @hw: pointer to hardware structure
 | 
					 *  @hw: pointer to hardware structure
 | 
				
			||||||
| 
						 | 
					@ -2125,51 +2091,6 @@ fw_version_out:
 | 
				
			||||||
	return status;
 | 
						return status;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 *  ixgbe_get_wwn_prefix_82599 - Get alternative WWNN/WWPN prefix from
 | 
					 | 
				
			||||||
 *  the EEPROM
 | 
					 | 
				
			||||||
 *  @hw: pointer to hardware structure
 | 
					 | 
				
			||||||
 *  @wwnn_prefix: the alternative WWNN prefix
 | 
					 | 
				
			||||||
 *  @wwpn_prefix: the alternative WWPN prefix
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *  This function will read the EEPROM from the alternative SAN MAC address
 | 
					 | 
				
			||||||
 *  block to check the support for the alternative WWNN/WWPN prefix support.
 | 
					 | 
				
			||||||
 **/
 | 
					 | 
				
			||||||
static s32 ixgbe_get_wwn_prefix_82599(struct ixgbe_hw *hw, u16 *wwnn_prefix,
 | 
					 | 
				
			||||||
                                      u16 *wwpn_prefix)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	u16 offset, caps;
 | 
					 | 
				
			||||||
	u16 alt_san_mac_blk_offset;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* clear output first */
 | 
					 | 
				
			||||||
	*wwnn_prefix = 0xFFFF;
 | 
					 | 
				
			||||||
	*wwpn_prefix = 0xFFFF;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* check if alternative SAN MAC is supported */
 | 
					 | 
				
			||||||
	hw->eeprom.ops.read(hw, IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR,
 | 
					 | 
				
			||||||
	                    &alt_san_mac_blk_offset);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if ((alt_san_mac_blk_offset == 0) ||
 | 
					 | 
				
			||||||
	    (alt_san_mac_blk_offset == 0xFFFF))
 | 
					 | 
				
			||||||
		goto wwn_prefix_out;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* check capability in alternative san mac address block */
 | 
					 | 
				
			||||||
	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET;
 | 
					 | 
				
			||||||
	hw->eeprom.ops.read(hw, offset, &caps);
 | 
					 | 
				
			||||||
	if (!(caps & IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN))
 | 
					 | 
				
			||||||
		goto wwn_prefix_out;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* get the corresponding prefix for WWNN/WWPN */
 | 
					 | 
				
			||||||
	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET;
 | 
					 | 
				
			||||||
	hw->eeprom.ops.read(hw, offset, wwnn_prefix);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET;
 | 
					 | 
				
			||||||
	hw->eeprom.ops.read(hw, offset, wwpn_prefix);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wwn_prefix_out:
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static struct ixgbe_mac_operations mac_ops_82599 = {
 | 
					static struct ixgbe_mac_operations mac_ops_82599 = {
 | 
				
			||||||
	.init_hw                = &ixgbe_init_hw_generic,
 | 
						.init_hw                = &ixgbe_init_hw_generic,
 | 
				
			||||||
	.reset_hw               = &ixgbe_reset_hw_82599,
 | 
						.reset_hw               = &ixgbe_reset_hw_82599,
 | 
				
			||||||
| 
						 | 
					@ -2181,7 +2102,7 @@ static struct ixgbe_mac_operations mac_ops_82599 = {
 | 
				
			||||||
	.get_mac_addr           = &ixgbe_get_mac_addr_generic,
 | 
						.get_mac_addr           = &ixgbe_get_mac_addr_generic,
 | 
				
			||||||
	.get_san_mac_addr       = &ixgbe_get_san_mac_addr_generic,
 | 
						.get_san_mac_addr       = &ixgbe_get_san_mac_addr_generic,
 | 
				
			||||||
	.get_device_caps        = &ixgbe_get_device_caps_82599,
 | 
						.get_device_caps        = &ixgbe_get_device_caps_82599,
 | 
				
			||||||
	.get_wwn_prefix         = &ixgbe_get_wwn_prefix_82599,
 | 
						.get_wwn_prefix         = &ixgbe_get_wwn_prefix_generic,
 | 
				
			||||||
	.stop_adapter           = &ixgbe_stop_adapter_generic,
 | 
						.stop_adapter           = &ixgbe_stop_adapter_generic,
 | 
				
			||||||
	.get_bus_info           = &ixgbe_get_bus_info_generic,
 | 
						.get_bus_info           = &ixgbe_get_bus_info_generic,
 | 
				
			||||||
	.set_lan_id             = &ixgbe_set_lan_id_multi_port_pcie,
 | 
						.set_lan_id             = &ixgbe_set_lan_id_multi_port_pcie,
 | 
				
			||||||
| 
						 | 
					@ -2214,6 +2135,7 @@ static struct ixgbe_eeprom_operations eeprom_ops_82599 = {
 | 
				
			||||||
	.init_params            = &ixgbe_init_eeprom_params_generic,
 | 
						.init_params            = &ixgbe_init_eeprom_params_generic,
 | 
				
			||||||
	.read                   = &ixgbe_read_eerd_generic,
 | 
						.read                   = &ixgbe_read_eerd_generic,
 | 
				
			||||||
	.write                  = &ixgbe_write_eeprom_generic,
 | 
						.write                  = &ixgbe_write_eeprom_generic,
 | 
				
			||||||
 | 
						.calc_checksum          = &ixgbe_calc_eeprom_checksum_generic,
 | 
				
			||||||
	.validate_checksum      = &ixgbe_validate_eeprom_checksum_generic,
 | 
						.validate_checksum      = &ixgbe_validate_eeprom_checksum_generic,
 | 
				
			||||||
	.update_checksum        = &ixgbe_update_eeprom_checksum_generic,
 | 
						.update_checksum        = &ixgbe_update_eeprom_checksum_generic,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -2240,5 +2162,5 @@ struct ixgbe_info ixgbe_82599_info = {
 | 
				
			||||||
	.mac_ops                = &mac_ops_82599,
 | 
						.mac_ops                = &mac_ops_82599,
 | 
				
			||||||
	.eeprom_ops             = &eeprom_ops_82599,
 | 
						.eeprom_ops             = &eeprom_ops_82599,
 | 
				
			||||||
	.phy_ops                = &phy_ops_82599,
 | 
						.phy_ops                = &phy_ops_82599,
 | 
				
			||||||
	.mbx_ops                = &mbx_ops_82599,
 | 
						.mbx_ops                = &mbx_ops_generic,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,14 +45,12 @@ static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count);
 | 
				
			||||||
static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec);
 | 
					static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec);
 | 
				
			||||||
static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec);
 | 
					static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec);
 | 
				
			||||||
static void ixgbe_release_eeprom(struct ixgbe_hw *hw);
 | 
					static void ixgbe_release_eeprom(struct ixgbe_hw *hw);
 | 
				
			||||||
static u16 ixgbe_calc_eeprom_checksum(struct ixgbe_hw *hw);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void ixgbe_enable_rar(struct ixgbe_hw *hw, u32 index);
 | 
					static void ixgbe_enable_rar(struct ixgbe_hw *hw, u32 index);
 | 
				
			||||||
static void ixgbe_disable_rar(struct ixgbe_hw *hw, u32 index);
 | 
					static void ixgbe_disable_rar(struct ixgbe_hw *hw, u32 index);
 | 
				
			||||||
static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr);
 | 
					static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr);
 | 
				
			||||||
static void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq);
 | 
					static void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq);
 | 
				
			||||||
static s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num);
 | 
					static s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num);
 | 
				
			||||||
static s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 *  ixgbe_start_hw_generic - Prepare hardware for Tx/Rx
 | 
					 *  ixgbe_start_hw_generic - Prepare hardware for Tx/Rx
 | 
				
			||||||
| 
						 | 
					@ -638,7 +636,7 @@ out:
 | 
				
			||||||
 *  Polls the status bit (bit 1) of the EERD or EEWR to determine when the
 | 
					 *  Polls the status bit (bit 1) of the EERD or EEWR to determine when the
 | 
				
			||||||
 *  read or write is done respectively.
 | 
					 *  read or write is done respectively.
 | 
				
			||||||
 **/
 | 
					 **/
 | 
				
			||||||
static s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg)
 | 
					s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 i;
 | 
						u32 i;
 | 
				
			||||||
	u32 reg;
 | 
						u32 reg;
 | 
				
			||||||
| 
						 | 
					@ -1009,7 +1007,7 @@ static void ixgbe_release_eeprom(struct ixgbe_hw *hw)
 | 
				
			||||||
 *  ixgbe_calc_eeprom_checksum - Calculates and returns the checksum
 | 
					 *  ixgbe_calc_eeprom_checksum - Calculates and returns the checksum
 | 
				
			||||||
 *  @hw: pointer to hardware structure
 | 
					 *  @hw: pointer to hardware structure
 | 
				
			||||||
 **/
 | 
					 **/
 | 
				
			||||||
static u16 ixgbe_calc_eeprom_checksum(struct ixgbe_hw *hw)
 | 
					u16 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u16 i;
 | 
						u16 i;
 | 
				
			||||||
	u16 j;
 | 
						u16 j;
 | 
				
			||||||
| 
						 | 
					@ -1072,7 +1070,7 @@ s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw,
 | 
				
			||||||
	status = hw->eeprom.ops.read(hw, 0, &checksum);
 | 
						status = hw->eeprom.ops.read(hw, 0, &checksum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (status == 0) {
 | 
						if (status == 0) {
 | 
				
			||||||
		checksum = ixgbe_calc_eeprom_checksum(hw);
 | 
							checksum = hw->eeprom.ops.calc_checksum(hw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		hw->eeprom.ops.read(hw, IXGBE_EEPROM_CHECKSUM, &read_checksum);
 | 
							hw->eeprom.ops.read(hw, IXGBE_EEPROM_CHECKSUM, &read_checksum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1110,7 +1108,7 @@ s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw)
 | 
				
			||||||
	status = hw->eeprom.ops.read(hw, 0, &checksum);
 | 
						status = hw->eeprom.ops.read(hw, 0, &checksum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (status == 0) {
 | 
						if (status == 0) {
 | 
				
			||||||
		checksum = ixgbe_calc_eeprom_checksum(hw);
 | 
							checksum = hw->eeprom.ops.calc_checksum(hw);
 | 
				
			||||||
		status = hw->eeprom.ops.write(hw, IXGBE_EEPROM_CHECKSUM,
 | 
							status = hw->eeprom.ops.write(hw, IXGBE_EEPROM_CHECKSUM,
 | 
				
			||||||
		                            checksum);
 | 
							                            checksum);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
| 
						 | 
					@ -2686,3 +2684,48 @@ s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 *  ixgbe_get_wwn_prefix_generic Get alternative WWNN/WWPN prefix from
 | 
				
			||||||
 | 
					 *  the EEPROM
 | 
				
			||||||
 | 
					 *  @hw: pointer to hardware structure
 | 
				
			||||||
 | 
					 *  @wwnn_prefix: the alternative WWNN prefix
 | 
				
			||||||
 | 
					 *  @wwpn_prefix: the alternative WWPN prefix
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  This function will read the EEPROM from the alternative SAN MAC address
 | 
				
			||||||
 | 
					 *  block to check the support for the alternative WWNN/WWPN prefix support.
 | 
				
			||||||
 | 
					 **/
 | 
				
			||||||
 | 
					s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
 | 
				
			||||||
 | 
					                                        u16 *wwpn_prefix)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						u16 offset, caps;
 | 
				
			||||||
 | 
						u16 alt_san_mac_blk_offset;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* clear output first */
 | 
				
			||||||
 | 
						*wwnn_prefix = 0xFFFF;
 | 
				
			||||||
 | 
						*wwpn_prefix = 0xFFFF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* check if alternative SAN MAC is supported */
 | 
				
			||||||
 | 
						hw->eeprom.ops.read(hw, IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR,
 | 
				
			||||||
 | 
						                    &alt_san_mac_blk_offset);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ((alt_san_mac_blk_offset == 0) ||
 | 
				
			||||||
 | 
						    (alt_san_mac_blk_offset == 0xFFFF))
 | 
				
			||||||
 | 
							goto wwn_prefix_out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* check capability in alternative san mac address block */
 | 
				
			||||||
 | 
						offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET;
 | 
				
			||||||
 | 
						hw->eeprom.ops.read(hw, offset, &caps);
 | 
				
			||||||
 | 
						if (!(caps & IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN))
 | 
				
			||||||
 | 
							goto wwn_prefix_out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* get the corresponding prefix for WWNN/WWPN */
 | 
				
			||||||
 | 
						offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET;
 | 
				
			||||||
 | 
						hw->eeprom.ops.read(hw, offset, wwnn_prefix);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET;
 | 
				
			||||||
 | 
						hw->eeprom.ops.read(hw, offset, wwpn_prefix);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wwn_prefix_out:
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,9 +49,11 @@ s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data);
 | 
				
			||||||
s32 ixgbe_read_eerd_generic(struct ixgbe_hw *hw, u16 offset, u16 *data);
 | 
					s32 ixgbe_read_eerd_generic(struct ixgbe_hw *hw, u16 offset, u16 *data);
 | 
				
			||||||
s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
 | 
					s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
 | 
				
			||||||
                                       u16 *data);
 | 
					                                       u16 *data);
 | 
				
			||||||
 | 
					u16 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw);
 | 
				
			||||||
s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw,
 | 
					s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw,
 | 
				
			||||||
                                           u16 *checksum_val);
 | 
					                                           u16 *checksum_val);
 | 
				
			||||||
s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw);
 | 
					s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw);
 | 
				
			||||||
 | 
					s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
 | 
					s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
 | 
				
			||||||
                          u32 enable_addr);
 | 
					                          u32 enable_addr);
 | 
				
			||||||
| 
						 | 
					@ -81,7 +83,8 @@ s32 ixgbe_clear_vfta_generic(struct ixgbe_hw *hw);
 | 
				
			||||||
s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw,
 | 
					s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw,
 | 
				
			||||||
                                 ixgbe_link_speed *speed,
 | 
					                                 ixgbe_link_speed *speed,
 | 
				
			||||||
                                 bool *link_up, bool link_up_wait_to_complete);
 | 
					                                 bool *link_up, bool link_up_wait_to_complete);
 | 
				
			||||||
 | 
					s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
 | 
				
			||||||
 | 
					                                 u16 *wwpn_prefix);
 | 
				
			||||||
s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index);
 | 
					s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index);
 | 
				
			||||||
s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index);
 | 
					s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -454,7 +454,7 @@ void ixgbe_init_mbx_params_pf(struct ixgbe_hw *hw)
 | 
				
			||||||
	mbx->stats.rsts = 0;
 | 
						mbx->stats.rsts = 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct ixgbe_mbx_operations mbx_ops_82599 = {
 | 
					struct ixgbe_mbx_operations mbx_ops_generic = {
 | 
				
			||||||
	.read                   = ixgbe_read_mbx_pf,
 | 
						.read                   = ixgbe_read_mbx_pf,
 | 
				
			||||||
	.write                  = ixgbe_write_mbx_pf,
 | 
						.write                  = ixgbe_write_mbx_pf,
 | 
				
			||||||
	.read_posted            = ixgbe_read_posted_mbx,
 | 
						.read_posted            = ixgbe_read_posted_mbx,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,6 +88,6 @@ s32 ixgbe_check_for_ack(struct ixgbe_hw *, u16);
 | 
				
			||||||
s32 ixgbe_check_for_rst(struct ixgbe_hw *, u16);
 | 
					s32 ixgbe_check_for_rst(struct ixgbe_hw *, u16);
 | 
				
			||||||
void ixgbe_init_mbx_params_pf(struct ixgbe_hw *);
 | 
					void ixgbe_init_mbx_params_pf(struct ixgbe_hw *);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern struct ixgbe_mbx_operations mbx_ops_82599;
 | 
					extern struct ixgbe_mbx_operations mbx_ops_generic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* _IXGBE_MBX_H_ */
 | 
					#endif /* _IXGBE_MBX_H_ */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -424,6 +424,39 @@ s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * ixgbe_get_copper_link_capabilities_generic - Determines link capabilities
 | 
				
			||||||
 | 
					 * @hw: pointer to hardware structure
 | 
				
			||||||
 | 
					 * @speed: pointer to link speed
 | 
				
			||||||
 | 
					 * @autoneg: boolean auto-negotiation value
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Determines the link capabilities by reading the AUTOC register.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
 | 
				
			||||||
 | 
					                                                      ixgbe_link_speed *speed,
 | 
				
			||||||
 | 
					                                                      bool *autoneg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						s32 status = IXGBE_ERR_LINK_SETUP;
 | 
				
			||||||
 | 
						u16 speed_ability;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						*speed = 0;
 | 
				
			||||||
 | 
						*autoneg = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						status = hw->phy.ops.read_reg(hw, MDIO_SPEED, MDIO_MMD_PMAPMD,
 | 
				
			||||||
 | 
						                              &speed_ability);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (status == 0) {
 | 
				
			||||||
 | 
							if (speed_ability & MDIO_SPEED_10G)
 | 
				
			||||||
 | 
								*speed |= IXGBE_LINK_SPEED_10GB_FULL;
 | 
				
			||||||
 | 
							if (speed_ability & MDIO_PMA_SPEED_1000)
 | 
				
			||||||
 | 
								*speed |= IXGBE_LINK_SPEED_1GB_FULL;
 | 
				
			||||||
 | 
							if (speed_ability & MDIO_PMA_SPEED_100)
 | 
				
			||||||
 | 
								*speed |= IXGBE_LINK_SPEED_100_FULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return status;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 *  ixgbe_reset_phy_nl - Performs a PHY reset
 | 
					 *  ixgbe_reset_phy_nl - Performs a PHY reset
 | 
				
			||||||
 *  @hw: pointer to hardware structure
 | 
					 *  @hw: pointer to hardware structure
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -96,6 +96,9 @@ s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
 | 
				
			||||||
                                       ixgbe_link_speed speed,
 | 
					                                       ixgbe_link_speed speed,
 | 
				
			||||||
                                       bool autoneg,
 | 
					                                       bool autoneg,
 | 
				
			||||||
                                       bool autoneg_wait_to_complete);
 | 
					                                       bool autoneg_wait_to_complete);
 | 
				
			||||||
 | 
					s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
 | 
				
			||||||
 | 
					                                               ixgbe_link_speed *speed,
 | 
				
			||||||
 | 
					                                               bool *autoneg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* PHY specific */
 | 
					/* PHY specific */
 | 
				
			||||||
s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw,
 | 
					s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2414,6 +2414,7 @@ struct ixgbe_eeprom_operations {
 | 
				
			||||||
	s32 (*write)(struct ixgbe_hw *, u16, u16);
 | 
						s32 (*write)(struct ixgbe_hw *, u16, u16);
 | 
				
			||||||
	s32 (*validate_checksum)(struct ixgbe_hw *, u16 *);
 | 
						s32 (*validate_checksum)(struct ixgbe_hw *, u16 *);
 | 
				
			||||||
	s32 (*update_checksum)(struct ixgbe_hw *);
 | 
						s32 (*update_checksum)(struct ixgbe_hw *);
 | 
				
			||||||
 | 
						u16 (*calc_checksum)(struct ixgbe_hw *);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct ixgbe_mac_operations {
 | 
					struct ixgbe_mac_operations {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue