| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- From 36569971241ae6b81376da4937d2c8760122d10b Mon Sep 17 00:00:00 2001
- From: Russell King <[email protected]>
- Date: Thu, 21 Nov 2019 17:58:58 +0000
- Subject: [PATCH 652/660] net: phylink: split phylink_sfp_module_insert()
- Split out the configuration step from phylink_sfp_module_insert() so
- we can re-use this later.
- Signed-off-by: Russell King <[email protected]>
- ---
- drivers/net/phy/phylink.c | 47 +++++++++++++++++++++++----------------
- 1 file changed, 28 insertions(+), 19 deletions(-)
- --- a/drivers/net/phy/phylink.c
- +++ b/drivers/net/phy/phylink.c
- @@ -1688,25 +1688,21 @@ static void phylink_sfp_detach(void *ups
- pl->netdev->sfp_bus = NULL;
- }
-
- -static int phylink_sfp_module_insert(void *upstream,
- - const struct sfp_eeprom_id *id)
- +static int phylink_sfp_config(struct phylink *pl, u8 mode, u8 port,
- + const unsigned long *supported,
- + const unsigned long *advertising)
- {
- - struct phylink *pl = upstream;
- - __ETHTOOL_DECLARE_LINK_MODE_MASK(support) = { 0, };
- __ETHTOOL_DECLARE_LINK_MODE_MASK(support1);
- + __ETHTOOL_DECLARE_LINK_MODE_MASK(support);
- struct phylink_link_state config;
- phy_interface_t iface;
- - int ret = 0;
- bool changed;
- - u8 port;
- + int ret;
-
- - ASSERT_RTNL();
- -
- - sfp_parse_support(pl->sfp_bus, id, support);
- - port = sfp_parse_port(pl->sfp_bus, id, support);
- + linkmode_copy(support, supported);
-
- memset(&config, 0, sizeof(config));
- - linkmode_copy(config.advertising, support);
- + linkmode_copy(config.advertising, advertising);
- config.interface = PHY_INTERFACE_MODE_NA;
- config.speed = SPEED_UNKNOWN;
- config.duplex = DUPLEX_UNKNOWN;
- @@ -1721,8 +1717,6 @@ static int phylink_sfp_module_insert(voi
- return ret;
- }
-
- - linkmode_copy(support1, support);
- -
- iface = sfp_select_interface(pl->sfp_bus, config.advertising);
- if (iface == PHY_INTERFACE_MODE_NA) {
- phylink_err(pl,
- @@ -1732,18 +1726,18 @@ static int phylink_sfp_module_insert(voi
- }
-
- config.interface = iface;
- + linkmode_copy(support1, support);
- ret = phylink_validate(pl, support1, &config);
- if (ret) {
- phylink_err(pl, "validation of %s/%s with support %*pb failed: %d\n",
- - phylink_an_mode_str(MLO_AN_INBAND),
- + phylink_an_mode_str(mode),
- phy_modes(config.interface),
- __ETHTOOL_LINK_MODE_MASK_NBITS, support, ret);
- return ret;
- }
-
- phylink_dbg(pl, "requesting link mode %s/%s with support %*pb\n",
- - phylink_an_mode_str(MLO_AN_INBAND),
- - phy_modes(config.interface),
- + phylink_an_mode_str(mode), phy_modes(config.interface),
- __ETHTOOL_LINK_MODE_MASK_NBITS, support);
-
- if (phy_interface_mode_is_8023z(iface) && pl->phydev)
- @@ -1756,15 +1750,15 @@ static int phylink_sfp_module_insert(voi
- linkmode_copy(pl->link_config.advertising, config.advertising);
- }
-
- - if (pl->cur_link_an_mode != MLO_AN_INBAND ||
- + if (pl->cur_link_an_mode != mode ||
- pl->link_config.interface != config.interface) {
- pl->link_config.interface = config.interface;
- - pl->cur_link_an_mode = MLO_AN_INBAND;
- + pl->cur_link_an_mode = mode;
-
- changed = true;
-
- phylink_info(pl, "switched to %s/%s link mode\n",
- - phylink_an_mode_str(MLO_AN_INBAND),
- + phylink_an_mode_str(mode),
- phy_modes(config.interface));
- }
-
- @@ -1777,6 +1771,21 @@ static int phylink_sfp_module_insert(voi
- return ret;
- }
-
- +static int phylink_sfp_module_insert(void *upstream,
- + const struct sfp_eeprom_id *id)
- +{
- + struct phylink *pl = upstream;
- + __ETHTOOL_DECLARE_LINK_MODE_MASK(support) = { 0, };
- + u8 port;
- +
- + ASSERT_RTNL();
- +
- + sfp_parse_support(pl->sfp_bus, id, support);
- + port = sfp_parse_port(pl->sfp_bus, id, support);
- +
- + return phylink_sfp_config(pl, MLO_AN_INBAND, port, support, support);
- +}
- +
- static int phylink_sfp_module_start(void *upstream)
- {
- struct phylink *pl = upstream;
|