sfxge(4): infer port mode bandwidth from max link speed

Limit the port mode bandwidth calculations by the maximum
reported link speed. This system detects 25G vs 10G cards,
and 100G port modes vs 40G.

Submitted by:   Richard Houldsworth <rhouldsworth at solarflare.com>
Sponsored by:   Solarflare Communications, Inc.
Differential Revision:  https://reviews.freebsd.org/D18279
This commit is contained in:
Andrew Rybchenko 2018-11-30 07:09:23 +00:00
parent c42b6a3560
commit 109f5727a0

View File

@ -160,9 +160,11 @@ ef10_nic_get_port_mode_bandwidth(
{
uint32_t port_modes;
uint32_t current_mode;
uint32_t single_lane = 10000;
uint32_t dual_lane = 50000;
uint32_t quad_lane = 40000;
efx_port_t *epp = &(enp->en_port);
uint32_t single_lane;
uint32_t dual_lane;
uint32_t quad_lane;
uint32_t bandwidth;
efx_rc_t rc;
@ -172,6 +174,21 @@ ef10_nic_get_port_mode_bandwidth(
goto fail1;
}
if (epp->ep_phy_cap_mask & (1 << EFX_PHY_CAP_25000FDX))
single_lane = 25000;
else
single_lane = 10000;
if (epp->ep_phy_cap_mask & (1 << EFX_PHY_CAP_50000FDX))
dual_lane = 50000;
else
dual_lane = 20000;
if (epp->ep_phy_cap_mask & (1 << EFX_PHY_CAP_100000FDX))
quad_lane = 100000;
else
quad_lane = 40000;
switch (current_mode) {
case TLV_PORT_MODE_1x1_NA: /* mode 0 */
bandwidth = single_lane;