Commit 6d62b4d5 authored by Philippe Reynes's avatar Philippe Reynes Committed by David S. Miller
Browse files

net: ethtool: export conversion function between u32 and link mode



The function convert_legacy_u32_to_link_mode and
convert_link_mode_to_legacy_u32 may be used outside
of ethtool.c. We rename them to ethtool_convert_...
and export them, so we could use them in others
drivers and modules.

Signed-off-by: default avatarPhilippe Reynes <tremyfr@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2a2bbf17
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -150,6 +150,13 @@ extern int
__ethtool_get_link_ksettings(struct net_device *dev,
__ethtool_get_link_ksettings(struct net_device *dev,
			     struct ethtool_link_ksettings *link_ksettings);
			     struct ethtool_link_ksettings *link_ksettings);


void ethtool_convert_legacy_u32_to_link_mode(unsigned long *dst,
					     u32 legacy_u32);

/* return false if src had higher bits set. lower bits always updated. */
bool ethtool_convert_link_mode_to_legacy_u32(u32 *legacy_u32,
				     const unsigned long *src);

/**
/**
 * struct ethtool_ops - optional netdev operations
 * struct ethtool_ops - optional netdev operations
 * @get_settings: DEPRECATED, use %get_link_ksettings/%set_link_ksettings
 * @get_settings: DEPRECATED, use %get_link_ksettings/%set_link_ksettings
+12 −9
Original line number Original line Diff line number Diff line
@@ -391,14 +391,16 @@ static int __ethtool_set_flags(struct net_device *dev, u32 data)
	return 0;
	return 0;
}
}


static void convert_legacy_u32_to_link_mode(unsigned long *dst, u32 legacy_u32)
void ethtool_convert_legacy_u32_to_link_mode(unsigned long *dst,
					     u32 legacy_u32)
{
{
	bitmap_zero(dst, __ETHTOOL_LINK_MODE_MASK_NBITS);
	bitmap_zero(dst, __ETHTOOL_LINK_MODE_MASK_NBITS);
	dst[0] = legacy_u32;
	dst[0] = legacy_u32;
}
}
EXPORT_SYMBOL(ethtool_convert_legacy_u32_to_link_mode);


/* return false if src had higher bits set. lower bits always updated. */
/* return false if src had higher bits set. lower bits always updated. */
static bool convert_link_mode_to_legacy_u32(u32 *legacy_u32,
bool ethtool_convert_link_mode_to_legacy_u32(u32 *legacy_u32,
					     const unsigned long *src)
					     const unsigned long *src)
{
{
	bool retval = true;
	bool retval = true;
@@ -419,6 +421,7 @@ static bool convert_link_mode_to_legacy_u32(u32 *legacy_u32,
	*legacy_u32 = src[0];
	*legacy_u32 = src[0];
	return retval;
	return retval;
}
}
EXPORT_SYMBOL(ethtool_convert_link_mode_to_legacy_u32);


/* return false if legacy contained non-0 deprecated fields
/* return false if legacy contained non-0 deprecated fields
 * transceiver/maxtxpkt/maxrxpkt. rest of ksettings always updated
 * transceiver/maxtxpkt/maxrxpkt. rest of ksettings always updated
@@ -441,13 +444,13 @@ convert_legacy_settings_to_link_ksettings(
	    legacy_settings->maxrxpkt)
	    legacy_settings->maxrxpkt)
		retval = false;
		retval = false;


	convert_legacy_u32_to_link_mode(
	ethtool_convert_legacy_u32_to_link_mode(
		link_ksettings->link_modes.supported,
		link_ksettings->link_modes.supported,
		legacy_settings->supported);
		legacy_settings->supported);
	convert_legacy_u32_to_link_mode(
	ethtool_convert_legacy_u32_to_link_mode(
		link_ksettings->link_modes.advertising,
		link_ksettings->link_modes.advertising,
		legacy_settings->advertising);
		legacy_settings->advertising);
	convert_legacy_u32_to_link_mode(
	ethtool_convert_legacy_u32_to_link_mode(
		link_ksettings->link_modes.lp_advertising,
		link_ksettings->link_modes.lp_advertising,
		legacy_settings->lp_advertising);
		legacy_settings->lp_advertising);
	link_ksettings->base.speed
	link_ksettings->base.speed
@@ -486,13 +489,13 @@ convert_link_ksettings_to_legacy_settings(
	 * __u32	maxrxpkt;
	 * __u32	maxrxpkt;
	 */
	 */


	retval &= convert_link_mode_to_legacy_u32(
	retval &= ethtool_convert_link_mode_to_legacy_u32(
		&legacy_settings->supported,
		&legacy_settings->supported,
		link_ksettings->link_modes.supported);
		link_ksettings->link_modes.supported);
	retval &= convert_link_mode_to_legacy_u32(
	retval &= ethtool_convert_link_mode_to_legacy_u32(
		&legacy_settings->advertising,
		&legacy_settings->advertising,
		link_ksettings->link_modes.advertising);
		link_ksettings->link_modes.advertising);
	retval &= convert_link_mode_to_legacy_u32(
	retval &= ethtool_convert_link_mode_to_legacy_u32(
		&legacy_settings->lp_advertising,
		&legacy_settings->lp_advertising,
		link_ksettings->link_modes.lp_advertising);
		link_ksettings->link_modes.lp_advertising);
	ethtool_cmd_speed_set(legacy_settings, link_ksettings->base.speed);
	ethtool_cmd_speed_set(legacy_settings, link_ksettings->base.speed);