Commit 1c96a63a authored by Heiner Kallweit's avatar Heiner Kallweit Committed by Jakub Kicinski
Browse files

bnx2x: convert EEE handling to use linkmode bitmaps



Convert EEE handling to use linkmode bitmaps. This prepares for
removing the legacy bitmaps from struct ethtool_keee.
No functional change intended.

Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/948562fb-c5d8-4912-8b88-bec56238732a@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 4c49b682
Loading
Loading
Loading
Loading
+21 −23
Original line number Diff line number Diff line
@@ -2081,28 +2081,25 @@ static const char bnx2x_private_arr[BNX2X_PRI_FLAG_LEN][ETH_GSTRING_LEN] = {
	"Storage only interface"
};

static u32 bnx2x_eee_to_adv(u32 eee_adv)
static void bnx2x_eee_to_linkmode(unsigned long *mode, u32 eee_adv)
{
	u32 modes = 0;

	if (eee_adv & SHMEM_EEE_100M_ADV)
		modes |= ADVERTISED_100baseT_Full;
		linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, mode);
	if (eee_adv & SHMEM_EEE_1G_ADV)
		modes |= ADVERTISED_1000baseT_Full;
		linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, mode);
	if (eee_adv & SHMEM_EEE_10G_ADV)
		modes |= ADVERTISED_10000baseT_Full;

	return modes;
		linkmode_set_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, mode);
}

static u32 bnx2x_adv_to_eee(u32 modes, u32 shift)
static u32 bnx2x_linkmode_to_eee(const unsigned long *mode, u32 shift)
{
	u32 eee_adv = 0;
	if (modes & ADVERTISED_100baseT_Full)

	if (linkmode_test_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, mode))
		eee_adv |= SHMEM_EEE_100M_ADV;
	if (modes & ADVERTISED_1000baseT_Full)
	if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, mode))
		eee_adv |= SHMEM_EEE_1G_ADV;
	if (modes & ADVERTISED_10000baseT_Full)
	if (linkmode_test_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, mode))
		eee_adv |= SHMEM_EEE_10G_ADV;

	return eee_adv << shift;
@@ -2120,15 +2117,16 @@ static int bnx2x_get_eee(struct net_device *dev, struct ethtool_keee *edata)

	eee_cfg = bp->link_vars.eee_status;

	edata->supported_u32 =
		bnx2x_eee_to_adv((eee_cfg & SHMEM_EEE_SUPPORTED_MASK) >>
	bnx2x_eee_to_linkmode(edata->supported,
			      (eee_cfg & SHMEM_EEE_SUPPORTED_MASK) >>
			      SHMEM_EEE_SUPPORTED_SHIFT);

	edata->advertised_u32 =
		bnx2x_eee_to_adv((eee_cfg & SHMEM_EEE_ADV_STATUS_MASK) >>
	bnx2x_eee_to_linkmode(edata->advertised,
			      (eee_cfg & SHMEM_EEE_ADV_STATUS_MASK) >>
			      SHMEM_EEE_ADV_STATUS_SHIFT);
	edata->lp_advertised_u32 =
		bnx2x_eee_to_adv((eee_cfg & SHMEM_EEE_LP_ADV_STATUS_MASK) >>

	bnx2x_eee_to_linkmode(edata->lp_advertised,
			      (eee_cfg & SHMEM_EEE_LP_ADV_STATUS_MASK) >>
			      SHMEM_EEE_LP_ADV_STATUS_SHIFT);

	/* SHMEM value is in 16u units --> Convert to 1u units. */
@@ -2162,7 +2160,7 @@ static int bnx2x_set_eee(struct net_device *dev, struct ethtool_keee *edata)
		return -EOPNOTSUPP;
	}

	advertised = bnx2x_adv_to_eee(edata->advertised_u32,
	advertised = bnx2x_linkmode_to_eee(edata->advertised,
					   SHMEM_EEE_ADV_STATUS_SHIFT);
	if ((advertised != (eee_cfg & SHMEM_EEE_ADV_STATUS_MASK))) {
		DP(BNX2X_MSG_ETHTOOL,