igc: Remove useless forward declaration
Move igc_phy_setup_autoneg, igc_wait_autoneg and igc_set_fc_watermarks up to avoid forward declaration. It is not necessary to forward declare these static methods. Signed-off-by: Sasha Neftin <sasha.neftin@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
dee23594d5
commit
10ce2c00cf
|
@ -7,9 +7,6 @@
|
||||||
#include "igc_mac.h"
|
#include "igc_mac.h"
|
||||||
#include "igc_hw.h"
|
#include "igc_hw.h"
|
||||||
|
|
||||||
/* forward declaration */
|
|
||||||
static s32 igc_set_fc_watermarks(struct igc_hw *hw);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* igc_disable_pcie_master - Disables PCI-express master access
|
* igc_disable_pcie_master - Disables PCI-express master access
|
||||||
* @hw: pointer to the HW structure
|
* @hw: pointer to the HW structure
|
||||||
|
@ -74,6 +71,41 @@ void igc_init_rx_addrs(struct igc_hw *hw, u16 rar_count)
|
||||||
hw->mac.ops.rar_set(hw, mac_addr, i);
|
hw->mac.ops.rar_set(hw, mac_addr, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* igc_set_fc_watermarks - Set flow control high/low watermarks
|
||||||
|
* @hw: pointer to the HW structure
|
||||||
|
*
|
||||||
|
* Sets the flow control high/low threshold (watermark) registers. If
|
||||||
|
* flow control XON frame transmission is enabled, then set XON frame
|
||||||
|
* transmission as well.
|
||||||
|
*/
|
||||||
|
static s32 igc_set_fc_watermarks(struct igc_hw *hw)
|
||||||
|
{
|
||||||
|
u32 fcrtl = 0, fcrth = 0;
|
||||||
|
|
||||||
|
/* Set the flow control receive threshold registers. Normally,
|
||||||
|
* these registers will be set to a default threshold that may be
|
||||||
|
* adjusted later by the driver's runtime code. However, if the
|
||||||
|
* ability to transmit pause frames is not enabled, then these
|
||||||
|
* registers will be set to 0.
|
||||||
|
*/
|
||||||
|
if (hw->fc.current_mode & igc_fc_tx_pause) {
|
||||||
|
/* We need to set up the Receive Threshold high and low water
|
||||||
|
* marks as well as (optionally) enabling the transmission of
|
||||||
|
* XON frames.
|
||||||
|
*/
|
||||||
|
fcrtl = hw->fc.low_water;
|
||||||
|
if (hw->fc.send_xon)
|
||||||
|
fcrtl |= IGC_FCRTL_XONE;
|
||||||
|
|
||||||
|
fcrth = hw->fc.high_water;
|
||||||
|
}
|
||||||
|
wr32(IGC_FCRTL, fcrtl);
|
||||||
|
wr32(IGC_FCRTH, fcrth);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* igc_setup_link - Setup flow control and link settings
|
* igc_setup_link - Setup flow control and link settings
|
||||||
* @hw: pointer to the HW structure
|
* @hw: pointer to the HW structure
|
||||||
|
@ -194,41 +226,6 @@ out:
|
||||||
return ret_val;
|
return ret_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* igc_set_fc_watermarks - Set flow control high/low watermarks
|
|
||||||
* @hw: pointer to the HW structure
|
|
||||||
*
|
|
||||||
* Sets the flow control high/low threshold (watermark) registers. If
|
|
||||||
* flow control XON frame transmission is enabled, then set XON frame
|
|
||||||
* transmission as well.
|
|
||||||
*/
|
|
||||||
static s32 igc_set_fc_watermarks(struct igc_hw *hw)
|
|
||||||
{
|
|
||||||
u32 fcrtl = 0, fcrth = 0;
|
|
||||||
|
|
||||||
/* Set the flow control receive threshold registers. Normally,
|
|
||||||
* these registers will be set to a default threshold that may be
|
|
||||||
* adjusted later by the driver's runtime code. However, if the
|
|
||||||
* ability to transmit pause frames is not enabled, then these
|
|
||||||
* registers will be set to 0.
|
|
||||||
*/
|
|
||||||
if (hw->fc.current_mode & igc_fc_tx_pause) {
|
|
||||||
/* We need to set up the Receive Threshold high and low water
|
|
||||||
* marks as well as (optionally) enabling the transmission of
|
|
||||||
* XON frames.
|
|
||||||
*/
|
|
||||||
fcrtl = hw->fc.low_water;
|
|
||||||
if (hw->fc.send_xon)
|
|
||||||
fcrtl |= IGC_FCRTL_XONE;
|
|
||||||
|
|
||||||
fcrth = hw->fc.high_water;
|
|
||||||
}
|
|
||||||
wr32(IGC_FCRTL, fcrtl);
|
|
||||||
wr32(IGC_FCRTH, fcrth);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* igc_clear_hw_cntrs_base - Clear base hardware counters
|
* igc_clear_hw_cntrs_base - Clear base hardware counters
|
||||||
* @hw: pointer to the HW structure
|
* @hw: pointer to the HW structure
|
||||||
|
|
|
@ -3,10 +3,6 @@
|
||||||
|
|
||||||
#include "igc_phy.h"
|
#include "igc_phy.h"
|
||||||
|
|
||||||
/* forward declaration */
|
|
||||||
static s32 igc_phy_setup_autoneg(struct igc_hw *hw);
|
|
||||||
static s32 igc_wait_autoneg(struct igc_hw *hw);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* igc_check_reset_block - Check if PHY reset is blocked
|
* igc_check_reset_block - Check if PHY reset is blocked
|
||||||
* @hw: pointer to the HW structure
|
* @hw: pointer to the HW structure
|
||||||
|
@ -207,100 +203,6 @@ out:
|
||||||
return ret_val;
|
return ret_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* igc_copper_link_autoneg - Setup/Enable autoneg for copper link
|
|
||||||
* @hw: pointer to the HW structure
|
|
||||||
*
|
|
||||||
* Performs initial bounds checking on autoneg advertisement parameter, then
|
|
||||||
* configure to advertise the full capability. Setup the PHY to autoneg
|
|
||||||
* and restart the negotiation process between the link partner. If
|
|
||||||
* autoneg_wait_to_complete, then wait for autoneg to complete before exiting.
|
|
||||||
*/
|
|
||||||
static s32 igc_copper_link_autoneg(struct igc_hw *hw)
|
|
||||||
{
|
|
||||||
struct igc_phy_info *phy = &hw->phy;
|
|
||||||
u16 phy_ctrl;
|
|
||||||
s32 ret_val;
|
|
||||||
|
|
||||||
/* Perform some bounds checking on the autoneg advertisement
|
|
||||||
* parameter.
|
|
||||||
*/
|
|
||||||
phy->autoneg_advertised &= phy->autoneg_mask;
|
|
||||||
|
|
||||||
/* If autoneg_advertised is zero, we assume it was not defaulted
|
|
||||||
* by the calling code so we set to advertise full capability.
|
|
||||||
*/
|
|
||||||
if (phy->autoneg_advertised == 0)
|
|
||||||
phy->autoneg_advertised = phy->autoneg_mask;
|
|
||||||
|
|
||||||
hw_dbg("Reconfiguring auto-neg advertisement params\n");
|
|
||||||
ret_val = igc_phy_setup_autoneg(hw);
|
|
||||||
if (ret_val) {
|
|
||||||
hw_dbg("Error Setting up Auto-Negotiation\n");
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
hw_dbg("Restarting Auto-Neg\n");
|
|
||||||
|
|
||||||
/* Restart auto-negotiation by setting the Auto Neg Enable bit and
|
|
||||||
* the Auto Neg Restart bit in the PHY control register.
|
|
||||||
*/
|
|
||||||
ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
|
|
||||||
if (ret_val)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
phy_ctrl |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
|
|
||||||
ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_ctrl);
|
|
||||||
if (ret_val)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
/* Does the user want to wait for Auto-Neg to complete here, or
|
|
||||||
* check at a later time (for example, callback routine).
|
|
||||||
*/
|
|
||||||
if (phy->autoneg_wait_to_complete) {
|
|
||||||
ret_val = igc_wait_autoneg(hw);
|
|
||||||
if (ret_val) {
|
|
||||||
hw_dbg("Error while waiting for autoneg to complete\n");
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hw->mac.get_link_status = true;
|
|
||||||
|
|
||||||
out:
|
|
||||||
return ret_val;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* igc_wait_autoneg - Wait for auto-neg completion
|
|
||||||
* @hw: pointer to the HW structure
|
|
||||||
*
|
|
||||||
* Waits for auto-negotiation to complete or for the auto-negotiation time
|
|
||||||
* limit to expire, which ever happens first.
|
|
||||||
*/
|
|
||||||
static s32 igc_wait_autoneg(struct igc_hw *hw)
|
|
||||||
{
|
|
||||||
u16 i, phy_status;
|
|
||||||
s32 ret_val = 0;
|
|
||||||
|
|
||||||
/* Break after autoneg completes or PHY_AUTO_NEG_LIMIT expires. */
|
|
||||||
for (i = PHY_AUTO_NEG_LIMIT; i > 0; i--) {
|
|
||||||
ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
|
|
||||||
if (ret_val)
|
|
||||||
break;
|
|
||||||
ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
|
|
||||||
if (ret_val)
|
|
||||||
break;
|
|
||||||
if (phy_status & MII_SR_AUTONEG_COMPLETE)
|
|
||||||
break;
|
|
||||||
msleep(100);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* PHY_AUTO_NEG_TIME expiration doesn't guarantee auto-negotiation
|
|
||||||
* has completed.
|
|
||||||
*/
|
|
||||||
return ret_val;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* igc_phy_setup_autoneg - Configure PHY for auto-negotiation
|
* igc_phy_setup_autoneg - Configure PHY for auto-negotiation
|
||||||
* @hw: pointer to the HW structure
|
* @hw: pointer to the HW structure
|
||||||
|
@ -485,6 +387,100 @@ static s32 igc_phy_setup_autoneg(struct igc_hw *hw)
|
||||||
return ret_val;
|
return ret_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* igc_wait_autoneg - Wait for auto-neg completion
|
||||||
|
* @hw: pointer to the HW structure
|
||||||
|
*
|
||||||
|
* Waits for auto-negotiation to complete or for the auto-negotiation time
|
||||||
|
* limit to expire, which ever happens first.
|
||||||
|
*/
|
||||||
|
static s32 igc_wait_autoneg(struct igc_hw *hw)
|
||||||
|
{
|
||||||
|
u16 i, phy_status;
|
||||||
|
s32 ret_val = 0;
|
||||||
|
|
||||||
|
/* Break after autoneg completes or PHY_AUTO_NEG_LIMIT expires. */
|
||||||
|
for (i = PHY_AUTO_NEG_LIMIT; i > 0; i--) {
|
||||||
|
ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
|
||||||
|
if (ret_val)
|
||||||
|
break;
|
||||||
|
ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
|
||||||
|
if (ret_val)
|
||||||
|
break;
|
||||||
|
if (phy_status & MII_SR_AUTONEG_COMPLETE)
|
||||||
|
break;
|
||||||
|
msleep(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* PHY_AUTO_NEG_TIME expiration doesn't guarantee auto-negotiation
|
||||||
|
* has completed.
|
||||||
|
*/
|
||||||
|
return ret_val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* igc_copper_link_autoneg - Setup/Enable autoneg for copper link
|
||||||
|
* @hw: pointer to the HW structure
|
||||||
|
*
|
||||||
|
* Performs initial bounds checking on autoneg advertisement parameter, then
|
||||||
|
* configure to advertise the full capability. Setup the PHY to autoneg
|
||||||
|
* and restart the negotiation process between the link partner. If
|
||||||
|
* autoneg_wait_to_complete, then wait for autoneg to complete before exiting.
|
||||||
|
*/
|
||||||
|
static s32 igc_copper_link_autoneg(struct igc_hw *hw)
|
||||||
|
{
|
||||||
|
struct igc_phy_info *phy = &hw->phy;
|
||||||
|
u16 phy_ctrl;
|
||||||
|
s32 ret_val;
|
||||||
|
|
||||||
|
/* Perform some bounds checking on the autoneg advertisement
|
||||||
|
* parameter.
|
||||||
|
*/
|
||||||
|
phy->autoneg_advertised &= phy->autoneg_mask;
|
||||||
|
|
||||||
|
/* If autoneg_advertised is zero, we assume it was not defaulted
|
||||||
|
* by the calling code so we set to advertise full capability.
|
||||||
|
*/
|
||||||
|
if (phy->autoneg_advertised == 0)
|
||||||
|
phy->autoneg_advertised = phy->autoneg_mask;
|
||||||
|
|
||||||
|
hw_dbg("Reconfiguring auto-neg advertisement params\n");
|
||||||
|
ret_val = igc_phy_setup_autoneg(hw);
|
||||||
|
if (ret_val) {
|
||||||
|
hw_dbg("Error Setting up Auto-Negotiation\n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
hw_dbg("Restarting Auto-Neg\n");
|
||||||
|
|
||||||
|
/* Restart auto-negotiation by setting the Auto Neg Enable bit and
|
||||||
|
* the Auto Neg Restart bit in the PHY control register.
|
||||||
|
*/
|
||||||
|
ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
|
||||||
|
if (ret_val)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
phy_ctrl |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
|
||||||
|
ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_ctrl);
|
||||||
|
if (ret_val)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
/* Does the user want to wait for Auto-Neg to complete here, or
|
||||||
|
* check at a later time (for example, callback routine).
|
||||||
|
*/
|
||||||
|
if (phy->autoneg_wait_to_complete) {
|
||||||
|
ret_val = igc_wait_autoneg(hw);
|
||||||
|
if (ret_val) {
|
||||||
|
hw_dbg("Error while waiting for autoneg to complete\n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hw->mac.get_link_status = true;
|
||||||
|
|
||||||
|
out:
|
||||||
|
return ret_val;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* igc_setup_copper_link - Configure copper link settings
|
* igc_setup_copper_link - Configure copper link settings
|
||||||
* @hw: pointer to the HW structure
|
* @hw: pointer to the HW structure
|
||||||
|
|
Loading…
Reference in New Issue