|
@@ -403,6 +403,22 @@ static int __ethtool_set_flags(struct net_device *dev, u32 data)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/* Given two link masks, AND them together and save the result in dst. */
|
|
|
+void ethtool_intersect_link_masks(struct ethtool_link_ksettings *dst,
|
|
|
+ struct ethtool_link_ksettings *src)
|
|
|
+{
|
|
|
+ unsigned int size = BITS_TO_LONGS(__ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
|
+ unsigned int idx = 0;
|
|
|
+
|
|
|
+ for (; idx < size; idx++) {
|
|
|
+ dst->link_modes.supported[idx] &=
|
|
|
+ src->link_modes.supported[idx];
|
|
|
+ dst->link_modes.advertising[idx] &=
|
|
|
+ src->link_modes.advertising[idx];
|
|
|
+ }
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(ethtool_intersect_link_masks);
|
|
|
+
|
|
|
void ethtool_convert_legacy_u32_to_link_mode(unsigned long *dst,
|
|
|
u32 legacy_u32)
|
|
|
{
|