|
|
@@ -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,
|