ethtool: Get link mode in use instead of speed and duplex parameters
Currently, when user space queries the link's parameters, as speed and duplex, each parameter is passed from the driver to ethtool. Instead, get the link mode bit in use, and derive each of the parameters from it in ethtool. Signed-off-by: Danielle Ratson <danieller@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: hongrongxuan <hongrongxuan@huawei.com> Conflicts: net/ethtool/linkmodes.c
This commit is contained in:
parent
6abf13bd7f
commit
f43960dac3
|
@ -157,6 +157,7 @@ struct ethtool_link_ksettings {
|
||||||
__ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising);
|
__ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising);
|
||||||
} link_modes;
|
} link_modes;
|
||||||
u32 lanes;
|
u32 lanes;
|
||||||
|
enum ethtool_link_mode_bit_indices link_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -192,6 +192,153 @@ const char link_mode_names[][ETH_GSTRING_LEN] = {
|
||||||
};
|
};
|
||||||
static_assert(ARRAY_SIZE(link_mode_names) == __ETHTOOL_LINK_MODE_MASK_NBITS);
|
static_assert(ARRAY_SIZE(link_mode_names) == __ETHTOOL_LINK_MODE_MASK_NBITS);
|
||||||
|
|
||||||
|
#define __LINK_MODE_LANES_CR 1
|
||||||
|
#define __LINK_MODE_LANES_CR2 2
|
||||||
|
#define __LINK_MODE_LANES_CR4 4
|
||||||
|
#define __LINK_MODE_LANES_CR8 8
|
||||||
|
#define __LINK_MODE_LANES_DR 1
|
||||||
|
#define __LINK_MODE_LANES_DR2 2
|
||||||
|
#define __LINK_MODE_LANES_DR4 4
|
||||||
|
#define __LINK_MODE_LANES_DR8 8
|
||||||
|
#define __LINK_MODE_LANES_KR 1
|
||||||
|
#define __LINK_MODE_LANES_KR2 2
|
||||||
|
#define __LINK_MODE_LANES_KR4 4
|
||||||
|
#define __LINK_MODE_LANES_KR8 8
|
||||||
|
#define __LINK_MODE_LANES_SR 1
|
||||||
|
#define __LINK_MODE_LANES_SR2 2
|
||||||
|
#define __LINK_MODE_LANES_SR4 4
|
||||||
|
#define __LINK_MODE_LANES_SR8 8
|
||||||
|
#define __LINK_MODE_LANES_ER 1
|
||||||
|
#define __LINK_MODE_LANES_KX 1
|
||||||
|
#define __LINK_MODE_LANES_KX4 4
|
||||||
|
#define __LINK_MODE_LANES_LR 1
|
||||||
|
#define __LINK_MODE_LANES_LR4 4
|
||||||
|
#define __LINK_MODE_LANES_LR4_ER4 4
|
||||||
|
#define __LINK_MODE_LANES_LR_ER_FR 1
|
||||||
|
#define __LINK_MODE_LANES_LR2_ER2_FR2 2
|
||||||
|
#define __LINK_MODE_LANES_LR4_ER4_FR4 4
|
||||||
|
#define __LINK_MODE_LANES_LR8_ER8_FR8 8
|
||||||
|
#define __LINK_MODE_LANES_LRM 1
|
||||||
|
#define __LINK_MODE_LANES_MLD2 2
|
||||||
|
#define __LINK_MODE_LANES_T 1
|
||||||
|
#define __LINK_MODE_LANES_T1 1
|
||||||
|
#define __LINK_MODE_LANES_X 1
|
||||||
|
#define __LINK_MODE_LANES_FX 1
|
||||||
|
|
||||||
|
#define __DEFINE_LINK_MODE_PARAMS(_speed, _type, _duplex) \
|
||||||
|
[ETHTOOL_LINK_MODE(_speed, _type, _duplex)] = { \
|
||||||
|
.speed = SPEED_ ## _speed, \
|
||||||
|
.lanes = __LINK_MODE_LANES_ ## _type, \
|
||||||
|
.duplex = __DUPLEX_ ## _duplex \
|
||||||
|
}
|
||||||
|
#define __DUPLEX_Half DUPLEX_HALF
|
||||||
|
#define __DUPLEX_Full DUPLEX_FULL
|
||||||
|
#define __DEFINE_SPECIAL_MODE_PARAMS(_mode) \
|
||||||
|
[ETHTOOL_LINK_MODE_ ## _mode ## _BIT] = { \
|
||||||
|
.speed = SPEED_UNKNOWN, \
|
||||||
|
.lanes = 0, \
|
||||||
|
.duplex = DUPLEX_UNKNOWN, \
|
||||||
|
}
|
||||||
|
|
||||||
|
const struct link_mode_info link_mode_params[] = {
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(10, T, Half),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(10, T, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100, T, Half),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100, T, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(1000, T, Half),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(1000, T, Full),
|
||||||
|
__DEFINE_SPECIAL_MODE_PARAMS(Autoneg),
|
||||||
|
__DEFINE_SPECIAL_MODE_PARAMS(TP),
|
||||||
|
__DEFINE_SPECIAL_MODE_PARAMS(AUI),
|
||||||
|
__DEFINE_SPECIAL_MODE_PARAMS(MII),
|
||||||
|
__DEFINE_SPECIAL_MODE_PARAMS(FIBRE),
|
||||||
|
__DEFINE_SPECIAL_MODE_PARAMS(BNC),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(10000, T, Full),
|
||||||
|
__DEFINE_SPECIAL_MODE_PARAMS(Pause),
|
||||||
|
__DEFINE_SPECIAL_MODE_PARAMS(Asym_Pause),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(2500, X, Full),
|
||||||
|
__DEFINE_SPECIAL_MODE_PARAMS(Backplane),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(1000, KX, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(10000, KX4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(10000, KR, Full),
|
||||||
|
[ETHTOOL_LINK_MODE_10000baseR_FEC_BIT] = {
|
||||||
|
.speed = SPEED_10000,
|
||||||
|
.duplex = DUPLEX_FULL,
|
||||||
|
},
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(20000, MLD2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(20000, KR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(40000, KR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(40000, CR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(40000, SR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(40000, LR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(56000, KR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(56000, CR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(56000, SR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(56000, LR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(25000, CR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(25000, KR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(25000, SR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(50000, CR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(50000, KR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, KR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, SR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, CR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, LR4_ER4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(50000, SR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(1000, X, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(10000, CR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(10000, SR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(10000, LR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(10000, LRM, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(10000, ER, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(2500, T, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(5000, T, Full),
|
||||||
|
__DEFINE_SPECIAL_MODE_PARAMS(FEC_NONE),
|
||||||
|
__DEFINE_SPECIAL_MODE_PARAMS(FEC_RS),
|
||||||
|
__DEFINE_SPECIAL_MODE_PARAMS(FEC_BASER),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(50000, KR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(50000, SR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(50000, CR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(50000, LR_ER_FR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(50000, DR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, KR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, SR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, CR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, LR2_ER2_FR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, DR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(200000, KR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(200000, SR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(200000, LR4_ER4_FR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(200000, DR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(200000, CR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100, T1, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(1000, T1, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(400000, KR8, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(400000, SR8, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(400000, LR8_ER8_FR8, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(400000, DR8, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(400000, CR8, Full),
|
||||||
|
__DEFINE_SPECIAL_MODE_PARAMS(FEC_LLRS),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, KR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, SR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, LR_ER_FR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, DR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100000, CR, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(200000, KR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(200000, SR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(200000, LR2_ER2_FR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(200000, DR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(200000, CR2, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(400000, KR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(400000, SR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(400000, LR4_ER4_FR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(400000, DR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(400000, CR4, Full),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100, FX, Half),
|
||||||
|
__DEFINE_LINK_MODE_PARAMS(100, FX, Full),
|
||||||
|
};
|
||||||
|
static_assert(ARRAY_SIZE(link_mode_params) == __ETHTOOL_LINK_MODE_MASK_NBITS);
|
||||||
|
|
||||||
const char netif_msg_class_names[][ETH_GSTRING_LEN] = {
|
const char netif_msg_class_names[][ETH_GSTRING_LEN] = {
|
||||||
[NETIF_MSG_DRV_BIT] = "drv",
|
[NETIF_MSG_DRV_BIT] = "drv",
|
||||||
[NETIF_MSG_PROBE_BIT] = "probe",
|
[NETIF_MSG_PROBE_BIT] = "probe",
|
||||||
|
|
|
@ -14,6 +14,12 @@
|
||||||
|
|
||||||
#define __SOF_TIMESTAMPING_CNT (const_ilog2(SOF_TIMESTAMPING_LAST) + 1)
|
#define __SOF_TIMESTAMPING_CNT (const_ilog2(SOF_TIMESTAMPING_LAST) + 1)
|
||||||
|
|
||||||
|
struct link_mode_info {
|
||||||
|
int speed;
|
||||||
|
u8 lanes;
|
||||||
|
u8 duplex;
|
||||||
|
};
|
||||||
|
|
||||||
extern const char
|
extern const char
|
||||||
netdev_features_strings[NETDEV_FEATURE_COUNT][ETH_GSTRING_LEN];
|
netdev_features_strings[NETDEV_FEATURE_COUNT][ETH_GSTRING_LEN];
|
||||||
extern const char
|
extern const char
|
||||||
|
@ -23,6 +29,7 @@ tunable_strings[__ETHTOOL_TUNABLE_COUNT][ETH_GSTRING_LEN];
|
||||||
extern const char
|
extern const char
|
||||||
phy_tunable_strings[__ETHTOOL_PHY_TUNABLE_COUNT][ETH_GSTRING_LEN];
|
phy_tunable_strings[__ETHTOOL_PHY_TUNABLE_COUNT][ETH_GSTRING_LEN];
|
||||||
extern const char link_mode_names[][ETH_GSTRING_LEN];
|
extern const char link_mode_names[][ETH_GSTRING_LEN];
|
||||||
|
extern const struct link_mode_info link_mode_params[];
|
||||||
extern const char netif_msg_class_names[][ETH_GSTRING_LEN];
|
extern const char netif_msg_class_names[][ETH_GSTRING_LEN];
|
||||||
extern const char wol_mode_names[][ETH_GSTRING_LEN];
|
extern const char wol_mode_names[][ETH_GSTRING_LEN];
|
||||||
extern const char sof_timestamping_names[][ETH_GSTRING_LEN];
|
extern const char sof_timestamping_names[][ETH_GSTRING_LEN];
|
||||||
|
|
|
@ -423,13 +423,29 @@ struct ethtool_link_usettings {
|
||||||
int __ethtool_get_link_ksettings(struct net_device *dev,
|
int __ethtool_get_link_ksettings(struct net_device *dev,
|
||||||
struct ethtool_link_ksettings *link_ksettings)
|
struct ethtool_link_ksettings *link_ksettings)
|
||||||
{
|
{
|
||||||
|
const struct link_mode_info *link_info;
|
||||||
|
int err;
|
||||||
|
|
||||||
ASSERT_RTNL();
|
ASSERT_RTNL();
|
||||||
|
|
||||||
if (!dev->ethtool_ops->get_link_ksettings)
|
if (!dev->ethtool_ops->get_link_ksettings)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
memset(link_ksettings, 0, sizeof(*link_ksettings));
|
memset(link_ksettings, 0, sizeof(*link_ksettings));
|
||||||
return dev->ethtool_ops->get_link_ksettings(dev, link_ksettings);
|
|
||||||
|
link_ksettings->link_mode = -1;
|
||||||
|
err = dev->ethtool_ops->get_link_ksettings(dev, link_ksettings);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
if (link_ksettings->link_mode != -1) {
|
||||||
|
link_info = &link_mode_params[link_ksettings->link_mode];
|
||||||
|
link_ksettings->base.speed = link_info->speed;
|
||||||
|
link_ksettings->lanes = link_info->lanes;
|
||||||
|
link_ksettings->base.duplex = link_info->duplex;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(__ethtool_get_link_ksettings);
|
EXPORT_SYMBOL(__ethtool_get_link_ksettings);
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "bitset.h"
|
#include "bitset.h"
|
||||||
|
|
||||||
|
/* LINKMODES_GET */
|
||||||
|
|
||||||
struct linkmodes_req_info {
|
struct linkmodes_req_info {
|
||||||
struct ethnl_req_info base;
|
struct ethnl_req_info base;
|
||||||
};
|
};
|
||||||
|
@ -160,158 +162,6 @@ const struct ethnl_request_ops ethnl_linkmodes_request_ops = {
|
||||||
|
|
||||||
/* LINKMODES_SET */
|
/* LINKMODES_SET */
|
||||||
|
|
||||||
struct link_mode_info {
|
|
||||||
int speed;
|
|
||||||
u8 lanes;
|
|
||||||
u8 duplex;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define __LINK_MODE_LANES_CR 1
|
|
||||||
#define __LINK_MODE_LANES_CR2 2
|
|
||||||
#define __LINK_MODE_LANES_CR4 4
|
|
||||||
#define __LINK_MODE_LANES_CR8 8
|
|
||||||
#define __LINK_MODE_LANES_DR 1
|
|
||||||
#define __LINK_MODE_LANES_DR2 2
|
|
||||||
#define __LINK_MODE_LANES_DR4 4
|
|
||||||
#define __LINK_MODE_LANES_DR8 8
|
|
||||||
#define __LINK_MODE_LANES_KR 1
|
|
||||||
#define __LINK_MODE_LANES_KR2 2
|
|
||||||
#define __LINK_MODE_LANES_KR4 4
|
|
||||||
#define __LINK_MODE_LANES_KR8 8
|
|
||||||
#define __LINK_MODE_LANES_SR 1
|
|
||||||
#define __LINK_MODE_LANES_SR2 2
|
|
||||||
#define __LINK_MODE_LANES_SR4 4
|
|
||||||
#define __LINK_MODE_LANES_SR8 8
|
|
||||||
#define __LINK_MODE_LANES_ER 1
|
|
||||||
#define __LINK_MODE_LANES_KX 1
|
|
||||||
#define __LINK_MODE_LANES_KX4 4
|
|
||||||
#define __LINK_MODE_LANES_LR 1
|
|
||||||
#define __LINK_MODE_LANES_LR4 4
|
|
||||||
#define __LINK_MODE_LANES_LR4_ER4 4
|
|
||||||
#define __LINK_MODE_LANES_LR_ER_FR 1
|
|
||||||
#define __LINK_MODE_LANES_LR2_ER2_FR2 2
|
|
||||||
#define __LINK_MODE_LANES_LR4_ER4_FR4 4
|
|
||||||
#define __LINK_MODE_LANES_LR8_ER8_FR8 8
|
|
||||||
#define __LINK_MODE_LANES_LRM 1
|
|
||||||
#define __LINK_MODE_LANES_MLD2 2
|
|
||||||
#define __LINK_MODE_LANES_T 1
|
|
||||||
#define __LINK_MODE_LANES_T1 1
|
|
||||||
#define __LINK_MODE_LANES_X 1
|
|
||||||
#define __LINK_MODE_LANES_FX 1
|
|
||||||
|
|
||||||
#define __DEFINE_LINK_MODE_PARAMS(_speed, _type, _duplex) \
|
|
||||||
[ETHTOOL_LINK_MODE(_speed, _type, _duplex)] = { \
|
|
||||||
.speed = SPEED_ ## _speed, \
|
|
||||||
.lanes = __LINK_MODE_LANES_ ## _type, \
|
|
||||||
.duplex = __DUPLEX_ ## _duplex \
|
|
||||||
}
|
|
||||||
#define __DUPLEX_Half DUPLEX_HALF
|
|
||||||
#define __DUPLEX_Full DUPLEX_FULL
|
|
||||||
#define __DEFINE_SPECIAL_MODE_PARAMS(_mode) \
|
|
||||||
[ETHTOOL_LINK_MODE_ ## _mode ## _BIT] = { \
|
|
||||||
.speed = SPEED_UNKNOWN, \
|
|
||||||
.lanes = 0, \
|
|
||||||
.duplex = DUPLEX_UNKNOWN, \
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct link_mode_info link_mode_params[] = {
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(10, T, Half),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(10, T, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100, T, Half),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100, T, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(1000, T, Half),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(1000, T, Full),
|
|
||||||
__DEFINE_SPECIAL_MODE_PARAMS(Autoneg),
|
|
||||||
__DEFINE_SPECIAL_MODE_PARAMS(TP),
|
|
||||||
__DEFINE_SPECIAL_MODE_PARAMS(AUI),
|
|
||||||
__DEFINE_SPECIAL_MODE_PARAMS(MII),
|
|
||||||
__DEFINE_SPECIAL_MODE_PARAMS(FIBRE),
|
|
||||||
__DEFINE_SPECIAL_MODE_PARAMS(BNC),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(10000, T, Full),
|
|
||||||
__DEFINE_SPECIAL_MODE_PARAMS(Pause),
|
|
||||||
__DEFINE_SPECIAL_MODE_PARAMS(Asym_Pause),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(2500, X, Full),
|
|
||||||
__DEFINE_SPECIAL_MODE_PARAMS(Backplane),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(1000, KX, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(10000, KX4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(10000, KR, Full),
|
|
||||||
[ETHTOOL_LINK_MODE_10000baseR_FEC_BIT] = {
|
|
||||||
.speed = SPEED_10000,
|
|
||||||
.duplex = DUPLEX_FULL,
|
|
||||||
},
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(20000, MLD2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(20000, KR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(40000, KR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(40000, CR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(40000, SR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(40000, LR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(56000, KR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(56000, CR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(56000, SR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(56000, LR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(25000, CR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(25000, KR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(25000, SR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(50000, CR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(50000, KR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, KR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, SR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, CR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, LR4_ER4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(50000, SR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(1000, X, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(10000, CR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(10000, SR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(10000, LR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(10000, LRM, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(10000, ER, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(2500, T, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(5000, T, Full),
|
|
||||||
__DEFINE_SPECIAL_MODE_PARAMS(FEC_NONE),
|
|
||||||
__DEFINE_SPECIAL_MODE_PARAMS(FEC_RS),
|
|
||||||
__DEFINE_SPECIAL_MODE_PARAMS(FEC_BASER),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(50000, KR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(50000, SR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(50000, CR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(50000, LR_ER_FR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(50000, DR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, KR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, SR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, CR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, LR2_ER2_FR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, DR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(200000, KR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(200000, SR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(200000, LR4_ER4_FR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(200000, DR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(200000, CR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100, T1, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(1000, T1, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(400000, KR8, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(400000, SR8, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(400000, LR8_ER8_FR8, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(400000, DR8, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(400000, CR8, Full),
|
|
||||||
__DEFINE_SPECIAL_MODE_PARAMS(FEC_LLRS),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, KR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, SR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, LR_ER_FR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, DR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100000, CR, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(200000, KR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(200000, SR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(200000, LR2_ER2_FR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(200000, DR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(200000, CR2, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(400000, KR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(400000, SR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(400000, LR4_ER4_FR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(400000, DR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(400000, CR4, Full),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100, FX, Half),
|
|
||||||
__DEFINE_LINK_MODE_PARAMS(100, FX, Full),
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct nla_policy
|
static const struct nla_policy
|
||||||
linkmodes_set_policy[ETHTOOL_A_LINKMODES_MAX + 1] = {
|
linkmodes_set_policy[ETHTOOL_A_LINKMODES_MAX + 1] = {
|
||||||
[ETHTOOL_A_LINKMODES_UNSPEC] = { .type = NLA_REJECT },
|
[ETHTOOL_A_LINKMODES_UNSPEC] = { .type = NLA_REJECT },
|
||||||
|
@ -340,9 +190,6 @@ static bool ethnl_auto_linkmodes(struct ethtool_link_ksettings *ksettings,
|
||||||
DECLARE_BITMAP(old_adv, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
DECLARE_BITMAP(old_adv, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
BUILD_BUG_ON(ARRAY_SIZE(link_mode_params) !=
|
|
||||||
__ETHTOOL_LINK_MODE_MASK_NBITS);
|
|
||||||
|
|
||||||
bitmap_copy(old_adv, advertising, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
bitmap_copy(old_adv, advertising, __ETHTOOL_LINK_MODE_MASK_NBITS);
|
||||||
|
|
||||||
for (i = 0; i < __ETHTOOL_LINK_MODE_MASK_NBITS; i++) {
|
for (i = 0; i < __ETHTOOL_LINK_MODE_MASK_NBITS; i++) {
|
||||||
|
|
Loading…
Reference in New Issue