Skip to content

Commit

Permalink
net: phylink: move phylink_pcs_neg_mode() into phylink.c
Browse files Browse the repository at this point in the history
Move phylink_pcs_neg_mode() from the header file into the .c file since
nothing should be using it.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Russell King (Oracle) authored and davem330 committed Jan 4, 2024
1 parent 3b73a7b commit 5e5401d
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 66 deletions.
66 changes: 66 additions & 0 deletions drivers/net/phy/phylink.c
Original file line number Diff line number Diff line change
Expand Up @@ -1074,6 +1074,72 @@ static void phylink_pcs_an_restart(struct phylink *pl)
pl->pcs->ops->pcs_an_restart(pl->pcs);
}

/**
* phylink_pcs_neg_mode() - helper to determine PCS inband mode
* @mode: one of %MLO_AN_FIXED, %MLO_AN_PHY, %MLO_AN_INBAND.
* @interface: interface mode to be used
* @advertising: adertisement ethtool link mode mask
*
* Determines the negotiation mode to be used by the PCS, and returns
* one of:
*
* - %PHYLINK_PCS_NEG_NONE: interface mode does not support inband
* - %PHYLINK_PCS_NEG_OUTBAND: an out of band mode (e.g. reading the PHY)
* will be used.
* - %PHYLINK_PCS_NEG_INBAND_DISABLED: inband mode selected but autoneg
* disabled
* - %PHYLINK_PCS_NEG_INBAND_ENABLED: inband mode selected and autoneg enabled
*
* Note: this is for cases where the PCS itself is involved in negotiation
* (e.g. Clause 37, SGMII and similar) not Clause 73.
*/
static unsigned int phylink_pcs_neg_mode(unsigned int mode,
phy_interface_t interface,
const unsigned long *advertising)
{
unsigned int neg_mode;

switch (interface) {
case PHY_INTERFACE_MODE_SGMII:
case PHY_INTERFACE_MODE_QSGMII:
case PHY_INTERFACE_MODE_QUSGMII:
case PHY_INTERFACE_MODE_USXGMII:
/* These protocols are designed for use with a PHY which
* communicates its negotiation result back to the MAC via
* inband communication. Note: there exist PHYs that run
* with SGMII but do not send the inband data.
*/
if (!phylink_autoneg_inband(mode))
neg_mode = PHYLINK_PCS_NEG_OUTBAND;
else
neg_mode = PHYLINK_PCS_NEG_INBAND_ENABLED;
break;

case PHY_INTERFACE_MODE_1000BASEX:
case PHY_INTERFACE_MODE_2500BASEX:
/* 1000base-X is designed for use media-side for Fibre
* connections, and thus the Autoneg bit needs to be
* taken into account. We also do this for 2500base-X
* as well, but drivers may not support this, so may
* need to override this.
*/
if (!phylink_autoneg_inband(mode))
neg_mode = PHYLINK_PCS_NEG_OUTBAND;
else if (linkmode_test_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
advertising))
neg_mode = PHYLINK_PCS_NEG_INBAND_ENABLED;
else
neg_mode = PHYLINK_PCS_NEG_INBAND_DISABLED;
break;

default:
neg_mode = PHYLINK_PCS_NEG_NONE;
break;
}

return neg_mode;
}

static void phylink_major_config(struct phylink *pl, bool restart,
const struct phylink_link_state *state)
{
Expand Down
66 changes: 0 additions & 66 deletions include/linux/phylink.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,72 +98,6 @@ static inline bool phylink_autoneg_inband(unsigned int mode)
return mode == MLO_AN_INBAND;
}

/**
* phylink_pcs_neg_mode() - helper to determine PCS inband mode
* @mode: one of %MLO_AN_FIXED, %MLO_AN_PHY, %MLO_AN_INBAND.
* @interface: interface mode to be used
* @advertising: adertisement ethtool link mode mask
*
* Determines the negotiation mode to be used by the PCS, and returns
* one of:
*
* - %PHYLINK_PCS_NEG_NONE: interface mode does not support inband
* - %PHYLINK_PCS_NEG_OUTBAND: an out of band mode (e.g. reading the PHY)
* will be used.
* - %PHYLINK_PCS_NEG_INBAND_DISABLED: inband mode selected but autoneg
* disabled
* - %PHYLINK_PCS_NEG_INBAND_ENABLED: inband mode selected and autoneg enabled
*
* Note: this is for cases where the PCS itself is involved in negotiation
* (e.g. Clause 37, SGMII and similar) not Clause 73.
*/
static inline unsigned int phylink_pcs_neg_mode(unsigned int mode,
phy_interface_t interface,
const unsigned long *advertising)
{
unsigned int neg_mode;

switch (interface) {
case PHY_INTERFACE_MODE_SGMII:
case PHY_INTERFACE_MODE_QSGMII:
case PHY_INTERFACE_MODE_QUSGMII:
case PHY_INTERFACE_MODE_USXGMII:
/* These protocols are designed for use with a PHY which
* communicates its negotiation result back to the MAC via
* inband communication. Note: there exist PHYs that run
* with SGMII but do not send the inband data.
*/
if (!phylink_autoneg_inband(mode))
neg_mode = PHYLINK_PCS_NEG_OUTBAND;
else
neg_mode = PHYLINK_PCS_NEG_INBAND_ENABLED;
break;

case PHY_INTERFACE_MODE_1000BASEX:
case PHY_INTERFACE_MODE_2500BASEX:
/* 1000base-X is designed for use media-side for Fibre
* connections, and thus the Autoneg bit needs to be
* taken into account. We also do this for 2500base-X
* as well, but drivers may not support this, so may
* need to override this.
*/
if (!phylink_autoneg_inband(mode))
neg_mode = PHYLINK_PCS_NEG_OUTBAND;
else if (linkmode_test_bit(ETHTOOL_LINK_MODE_Autoneg_BIT,
advertising))
neg_mode = PHYLINK_PCS_NEG_INBAND_ENABLED;
else
neg_mode = PHYLINK_PCS_NEG_INBAND_DISABLED;
break;

default:
neg_mode = PHYLINK_PCS_NEG_NONE;
break;
}

return neg_mode;
}

/**
* struct phylink_link_state - link state structure
* @advertising: ethtool bitmask containing advertised link modes
Expand Down

0 comments on commit 5e5401d

Please sign in to comment.