mirror of
https://github.com/torvalds/linux.git
synced 2026-09-26 10:02:02 +02:00
igc: move autoneg-enabled settings into igc_handle_autoneg_enabled()
Move the advertised link modes and flow control configuration from igc_ethtool_set_link_ksettings() into igc_handle_autoneg_enabled(). No functional change. Reviewed-by: Looi Hong Aun <hong.aun.looi@intel.com> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com> Signed-off-by: Faizal Rahim <faizal.abdul.rahim@linux.intel.com> Signed-off-by: Khai Wen Tan <khai.wen.tan@linux.intel.com> Reviewed-by: Dima Ruinskiy <dima.ruinskiy@intel.com> Reviewed-by: Simon Horman <horms@kernel.org> Tested-by: Moriya Kadosh <moriyax.kadosh@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
1ee93ee2e0
commit
c731361cfe
|
|
@ -2032,38 +2032,20 @@ static int igc_ethtool_get_link_ksettings(struct net_device *netdev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
igc_ethtool_set_link_ksettings(struct net_device *netdev,
|
||||
const struct ethtool_link_ksettings *cmd)
|
||||
/**
|
||||
* igc_handle_autoneg_enabled - Configure autonegotiation advertisement
|
||||
* @adapter: private driver structure
|
||||
* @cmd: ethtool link ksettings from user
|
||||
*
|
||||
* Records advertised speeds and flow control settings when autoneg
|
||||
* is enabled.
|
||||
*/
|
||||
static void igc_handle_autoneg_enabled(struct igc_adapter *adapter,
|
||||
const struct ethtool_link_ksettings *cmd)
|
||||
{
|
||||
struct igc_adapter *adapter = netdev_priv(netdev);
|
||||
struct net_device *dev = adapter->netdev;
|
||||
struct igc_hw *hw = &adapter->hw;
|
||||
u16 advertised = 0;
|
||||
|
||||
/* When adapter in resetting mode, autoneg/speed/duplex
|
||||
* cannot be changed
|
||||
*/
|
||||
if (igc_check_reset_block(hw)) {
|
||||
netdev_err(dev, "Cannot change link characteristics when reset is active\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* MDI setting is only allowed when autoneg enabled because
|
||||
* some hardware doesn't allow MDI setting when speed or
|
||||
* duplex is forced.
|
||||
*/
|
||||
if (cmd->base.eth_tp_mdix_ctrl) {
|
||||
if (cmd->base.eth_tp_mdix_ctrl != ETH_TP_MDI_AUTO &&
|
||||
cmd->base.autoneg != AUTONEG_ENABLE) {
|
||||
netdev_err(dev, "Forcing MDI/MDI-X state is not supported when link speed and/or duplex are forced\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
while (test_and_set_bit(__IGC_RESETTING, &adapter->state))
|
||||
usleep_range(1000, 2000);
|
||||
|
||||
if (ethtool_link_ksettings_test_link_mode(cmd, advertising,
|
||||
2500baseT_Full))
|
||||
advertised |= ADVERTISE_2500_FULL;
|
||||
|
|
@ -2088,10 +2070,44 @@ igc_ethtool_set_link_ksettings(struct net_device *netdev,
|
|||
10baseT_Half))
|
||||
advertised |= ADVERTISE_10_HALF;
|
||||
|
||||
hw->phy.autoneg_advertised = advertised;
|
||||
if (adapter->fc_autoneg)
|
||||
hw->fc.requested_mode = igc_fc_default;
|
||||
}
|
||||
|
||||
static int
|
||||
igc_ethtool_set_link_ksettings(struct net_device *netdev,
|
||||
const struct ethtool_link_ksettings *cmd)
|
||||
{
|
||||
struct igc_adapter *adapter = netdev_priv(netdev);
|
||||
struct net_device *dev = adapter->netdev;
|
||||
struct igc_hw *hw = &adapter->hw;
|
||||
|
||||
/* When adapter in resetting mode, autoneg/speed/duplex
|
||||
* cannot be changed
|
||||
*/
|
||||
if (igc_check_reset_block(hw)) {
|
||||
netdev_err(dev, "Cannot change link characteristics when reset is active\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* MDI setting is only allowed when autoneg enabled because
|
||||
* some hardware doesn't allow MDI setting when speed or
|
||||
* duplex is forced.
|
||||
*/
|
||||
if (cmd->base.eth_tp_mdix_ctrl) {
|
||||
if (cmd->base.eth_tp_mdix_ctrl != ETH_TP_MDI_AUTO &&
|
||||
cmd->base.autoneg != AUTONEG_ENABLE) {
|
||||
netdev_err(dev, "Forcing MDI/MDI-X state is not supported when link speed and/or duplex are forced\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
while (test_and_set_bit(__IGC_RESETTING, &adapter->state))
|
||||
usleep_range(1000, 2000);
|
||||
|
||||
if (cmd->base.autoneg == AUTONEG_ENABLE) {
|
||||
hw->phy.autoneg_advertised = advertised;
|
||||
if (adapter->fc_autoneg)
|
||||
hw->fc.requested_mode = igc_fc_default;
|
||||
igc_handle_autoneg_enabled(adapter, cmd);
|
||||
} else {
|
||||
netdev_info(dev, "Force mode currently not supported\n");
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user