Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8f9000a5 authored by Pavel Belous's avatar Pavel Belous Committed by David S. Miller
Browse files

net:ethernet:aquantia: Add 2500/5000 mbit link modes support.



Using new link mode indices instead deprecated SUPPORTED_/ADVERTISED_
macro.

Added indication for 2500 and 5000mbit link modes (AQtion adapter already
supports these speeds).

Signed-off-by: default avatarPavel Belous <pavel.belous@aquantia.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent caa137ee
Loading
Loading
Loading
Loading
+59 −37
Original line number Diff line number Diff line
@@ -737,48 +737,70 @@ err_exit:;
void aq_nic_get_link_ksettings(struct aq_nic_s *self,
			       struct ethtool_link_ksettings *cmd)
{
	u32 supported, advertising;

	cmd->base.port = PORT_TP;
	/* This driver supports only 10G capable adapters, so DUPLEX_FULL */
	cmd->base.duplex = DUPLEX_FULL;
	cmd->base.autoneg = self->aq_nic_cfg.is_autoneg;

	ethtool_convert_link_mode_to_legacy_u32(&supported,
						cmd->link_modes.supported);
	ethtool_convert_link_mode_to_legacy_u32(&advertising,
						cmd->link_modes.advertising);

	supported |= (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_10G) ?
				ADVERTISED_10000baseT_Full : 0U;
	supported |= (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_1G) ?
				ADVERTISED_1000baseT_Full : 0U;
	supported |= (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_100M) ?
				ADVERTISED_100baseT_Full : 0U;
	supported |= self->aq_hw_caps.flow_control ? SUPPORTED_Pause : 0;
	supported |= SUPPORTED_Autoneg;
	supported |= SUPPORTED_TP;

	advertising = (self->aq_nic_cfg.is_autoneg) ?
							ADVERTISED_Autoneg : 0U;
	advertising |=
			(self->aq_nic_cfg.link_speed_msk & AQ_NIC_RATE_10G) ?
			ADVERTISED_10000baseT_Full : 0U;
	advertising |=
			(self->aq_nic_cfg.link_speed_msk & AQ_NIC_RATE_1G) ?
			ADVERTISED_1000baseT_Full : 0U;

	advertising |=
			(self->aq_nic_cfg.link_speed_msk & AQ_NIC_RATE_100M) ?
			ADVERTISED_100baseT_Full : 0U;
	advertising |= (self->aq_nic_cfg.flow_control) ?
				ADVERTISED_Pause : 0U;
	advertising |= ADVERTISED_TP;

	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
						supported);
	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
						advertising);
	ethtool_link_ksettings_zero_link_mode(cmd, supported);

	if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_10G)
		ethtool_link_ksettings_add_link_mode(cmd, supported,
						     10000baseT_Full);

	if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_5G)
		ethtool_link_ksettings_add_link_mode(cmd, supported,
						     5000baseT_Full);

	if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_2GS)
		ethtool_link_ksettings_add_link_mode(cmd, supported,
						     2500baseT_Full);

	if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_1G)
		ethtool_link_ksettings_add_link_mode(cmd, supported,
						     1000baseT_Full);

	if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_100M)
		ethtool_link_ksettings_add_link_mode(cmd, supported,
						     100baseT_Full);

	if (self->aq_hw_caps.flow_control)
		ethtool_link_ksettings_add_link_mode(cmd, supported,
						     Pause);

	ethtool_link_ksettings_add_link_mode(cmd, supported, Autoneg);
	ethtool_link_ksettings_add_link_mode(cmd, supported, TP);

	ethtool_link_ksettings_zero_link_mode(cmd, advertising);

	if (self->aq_nic_cfg.is_autoneg)
		ethtool_link_ksettings_add_link_mode(cmd, advertising, Autoneg);

	if (self->aq_nic_cfg.link_speed_msk  & AQ_NIC_RATE_10G)
		ethtool_link_ksettings_add_link_mode(cmd, advertising,
						     10000baseT_Full);

	if (self->aq_nic_cfg.link_speed_msk  & AQ_NIC_RATE_5G)
		ethtool_link_ksettings_add_link_mode(cmd, advertising,
						     5000baseT_Full);

	if (self->aq_nic_cfg.link_speed_msk  & AQ_NIC_RATE_2GS)
		ethtool_link_ksettings_add_link_mode(cmd, advertising,
						     2500baseT_Full);

	if (self->aq_nic_cfg.link_speed_msk  & AQ_NIC_RATE_1G)
		ethtool_link_ksettings_add_link_mode(cmd, advertising,
						     1000baseT_Full);

	if (self->aq_nic_cfg.link_speed_msk  & AQ_NIC_RATE_100M)
		ethtool_link_ksettings_add_link_mode(cmd, advertising,
						     100baseT_Full);

	if (self->aq_nic_cfg.flow_control)
		ethtool_link_ksettings_add_link_mode(cmd, advertising,
						     Pause);

	ethtool_link_ksettings_add_link_mode(cmd, advertising, TP);
}

int aq_nic_set_link_ksettings(struct aq_nic_s *self,