Skip to content

Commit 371289b

Browse files
ogerlitzSaeed Mahameed
authored andcommitted
net/mlx5e: Expose ethtool pause and link functions to mlx5e callers
Towards supporting set/get of global pause for the port and get of the port link ksetting from the uplink representor, expose the relevant entries to other mlx5 callers. Signed-off-by: Or Gerlitz <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]>
1 parent 073caf5 commit 371289b

File tree

2 files changed

+56
-20
lines changed

2 files changed

+56
-20
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -973,12 +973,20 @@ int mlx5e_ethtool_get_coalesce(struct mlx5e_priv *priv,
973973
struct ethtool_coalesce *coal);
974974
int mlx5e_ethtool_set_coalesce(struct mlx5e_priv *priv,
975975
struct ethtool_coalesce *coal);
976+
int mlx5e_ethtool_get_link_ksettings(struct mlx5e_priv *priv,
977+
struct ethtool_link_ksettings *link_ksettings);
978+
int mlx5e_ethtool_set_link_ksettings(struct mlx5e_priv *priv,
979+
const struct ethtool_link_ksettings *link_ksettings);
976980
u32 mlx5e_ethtool_get_rxfh_key_size(struct mlx5e_priv *priv);
977981
u32 mlx5e_ethtool_get_rxfh_indir_size(struct mlx5e_priv *priv);
978982
int mlx5e_ethtool_get_ts_info(struct mlx5e_priv *priv,
979983
struct ethtool_ts_info *info);
980984
int mlx5e_ethtool_flash_device(struct mlx5e_priv *priv,
981985
struct ethtool_flash *flash);
986+
void mlx5e_ethtool_get_pauseparam(struct mlx5e_priv *priv,
987+
struct ethtool_pauseparam *pauseparam);
988+
int mlx5e_ethtool_set_pauseparam(struct mlx5e_priv *priv,
989+
struct ethtool_pauseparam *pauseparam);
982990

983991
/* mlx5e generic netdev management API */
984992
int mlx5e_netdev_init(struct net_device *netdev,

drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c

Lines changed: 48 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -787,10 +787,9 @@ static void get_lp_advertising(u32 eth_proto_lp,
787787
ptys2ethtool_adver_link(lp_advertising, eth_proto_lp);
788788
}
789789

790-
static int mlx5e_get_link_ksettings(struct net_device *netdev,
791-
struct ethtool_link_ksettings *link_ksettings)
790+
int mlx5e_ethtool_get_link_ksettings(struct mlx5e_priv *priv,
791+
struct ethtool_link_ksettings *link_ksettings)
792792
{
793-
struct mlx5e_priv *priv = netdev_priv(netdev);
794793
struct mlx5_core_dev *mdev = priv->mdev;
795794
u32 out[MLX5_ST_SZ_DW(ptys_reg)] = {0};
796795
u32 rx_pause = 0;
@@ -806,7 +805,7 @@ static int mlx5e_get_link_ksettings(struct net_device *netdev,
806805

807806
err = mlx5_query_port_ptys(mdev, out, sizeof(out), MLX5_PTYS_EN, 1);
808807
if (err) {
809-
netdev_err(netdev, "%s: query port ptys failed: %d\n",
808+
netdev_err(priv->netdev, "%s: query port ptys failed: %d\n",
810809
__func__, err);
811810
goto err_query_regs;
812811
}
@@ -826,7 +825,7 @@ static int mlx5e_get_link_ksettings(struct net_device *netdev,
826825

827826
get_supported(eth_proto_cap, link_ksettings);
828827
get_advertising(eth_proto_admin, tx_pause, rx_pause, link_ksettings);
829-
get_speed_duplex(netdev, eth_proto_oper, link_ksettings);
828+
get_speed_duplex(priv->netdev, eth_proto_oper, link_ksettings);
830829

831830
eth_proto_oper = eth_proto_oper ? eth_proto_oper : eth_proto_cap;
832831

@@ -846,7 +845,7 @@ static int mlx5e_get_link_ksettings(struct net_device *netdev,
846845
Autoneg);
847846

848847
if (get_fec_supported_advertised(mdev, link_ksettings))
849-
netdev_dbg(netdev, "%s: FEC caps query failed: %d\n",
848+
netdev_dbg(priv->netdev, "%s: FEC caps query failed: %d\n",
850849
__func__, err);
851850

852851
if (!an_disable_admin)
@@ -857,6 +856,14 @@ static int mlx5e_get_link_ksettings(struct net_device *netdev,
857856
return err;
858857
}
859858

859+
static int mlx5e_get_link_ksettings(struct net_device *netdev,
860+
struct ethtool_link_ksettings *link_ksettings)
861+
{
862+
struct mlx5e_priv *priv = netdev_priv(netdev);
863+
864+
return mlx5e_ethtool_get_link_ksettings(priv, link_ksettings);
865+
}
866+
860867
static u32 mlx5e_ethtool2ptys_adver_link(const unsigned long *link_modes)
861868
{
862869
u32 i, ptys_modes = 0;
@@ -871,10 +878,9 @@ static u32 mlx5e_ethtool2ptys_adver_link(const unsigned long *link_modes)
871878
return ptys_modes;
872879
}
873880

874-
static int mlx5e_set_link_ksettings(struct net_device *netdev,
875-
const struct ethtool_link_ksettings *link_ksettings)
881+
int mlx5e_ethtool_set_link_ksettings(struct mlx5e_priv *priv,
882+
const struct ethtool_link_ksettings *link_ksettings)
876883
{
877-
struct mlx5e_priv *priv = netdev_priv(netdev);
878884
struct mlx5_core_dev *mdev = priv->mdev;
879885
u32 eth_proto_cap, eth_proto_admin;
880886
bool an_changes = false;
@@ -894,22 +900,22 @@ static int mlx5e_set_link_ksettings(struct net_device *netdev,
894900

895901
err = mlx5_query_port_proto_cap(mdev, &eth_proto_cap, MLX5_PTYS_EN);
896902
if (err) {
897-
netdev_err(netdev, "%s: query port eth proto cap failed: %d\n",
903+
netdev_err(priv->netdev, "%s: query port eth proto cap failed: %d\n",
898904
__func__, err);
899905
goto out;
900906
}
901907

902908
link_modes = link_modes & eth_proto_cap;
903909
if (!link_modes) {
904-
netdev_err(netdev, "%s: Not supported link mode(s) requested",
910+
netdev_err(priv->netdev, "%s: Not supported link mode(s) requested",
905911
__func__);
906912
err = -EINVAL;
907913
goto out;
908914
}
909915

910916
err = mlx5_query_port_proto_admin(mdev, &eth_proto_admin, MLX5_PTYS_EN);
911917
if (err) {
912-
netdev_err(netdev, "%s: query port eth proto admin failed: %d\n",
918+
netdev_err(priv->netdev, "%s: query port eth proto admin failed: %d\n",
913919
__func__, err);
914920
goto out;
915921
}
@@ -931,6 +937,14 @@ static int mlx5e_set_link_ksettings(struct net_device *netdev,
931937
return err;
932938
}
933939

940+
static int mlx5e_set_link_ksettings(struct net_device *netdev,
941+
const struct ethtool_link_ksettings *link_ksettings)
942+
{
943+
struct mlx5e_priv *priv = netdev_priv(netdev);
944+
945+
return mlx5e_ethtool_set_link_ksettings(priv, link_ksettings);
946+
}
947+
934948
u32 mlx5e_ethtool_get_rxfh_key_size(struct mlx5e_priv *priv)
935949
{
936950
return sizeof(priv->rss_params.toeplitz_hash_key);
@@ -1127,25 +1141,31 @@ static int mlx5e_set_tunable(struct net_device *dev,
11271141
return err;
11281142
}
11291143

1130-
static void mlx5e_get_pauseparam(struct net_device *netdev,
1131-
struct ethtool_pauseparam *pauseparam)
1144+
void mlx5e_ethtool_get_pauseparam(struct mlx5e_priv *priv,
1145+
struct ethtool_pauseparam *pauseparam)
11321146
{
1133-
struct mlx5e_priv *priv = netdev_priv(netdev);
11341147
struct mlx5_core_dev *mdev = priv->mdev;
11351148
int err;
11361149

11371150
err = mlx5_query_port_pause(mdev, &pauseparam->rx_pause,
11381151
&pauseparam->tx_pause);
11391152
if (err) {
1140-
netdev_err(netdev, "%s: mlx5_query_port_pause failed:0x%x\n",
1153+
netdev_err(priv->netdev, "%s: mlx5_query_port_pause failed:0x%x\n",
11411154
__func__, err);
11421155
}
11431156
}
11441157

1145-
static int mlx5e_set_pauseparam(struct net_device *netdev,
1146-
struct ethtool_pauseparam *pauseparam)
1158+
static void mlx5e_get_pauseparam(struct net_device *netdev,
1159+
struct ethtool_pauseparam *pauseparam)
1160+
{
1161+
struct mlx5e_priv *priv = netdev_priv(netdev);
1162+
1163+
mlx5e_ethtool_get_pauseparam(priv, pauseparam);
1164+
}
1165+
1166+
int mlx5e_ethtool_set_pauseparam(struct mlx5e_priv *priv,
1167+
struct ethtool_pauseparam *pauseparam)
11471168
{
1148-
struct mlx5e_priv *priv = netdev_priv(netdev);
11491169
struct mlx5_core_dev *mdev = priv->mdev;
11501170
int err;
11511171

@@ -1156,13 +1176,21 @@ static int mlx5e_set_pauseparam(struct net_device *netdev,
11561176
pauseparam->rx_pause ? 1 : 0,
11571177
pauseparam->tx_pause ? 1 : 0);
11581178
if (err) {
1159-
netdev_err(netdev, "%s: mlx5_set_port_pause failed:0x%x\n",
1179+
netdev_err(priv->netdev, "%s: mlx5_set_port_pause failed:0x%x\n",
11601180
__func__, err);
11611181
}
11621182

11631183
return err;
11641184
}
11651185

1186+
static int mlx5e_set_pauseparam(struct net_device *netdev,
1187+
struct ethtool_pauseparam *pauseparam)
1188+
{
1189+
struct mlx5e_priv *priv = netdev_priv(netdev);
1190+
1191+
return mlx5e_ethtool_set_pauseparam(priv, pauseparam);
1192+
}
1193+
11661194
int mlx5e_ethtool_get_ts_info(struct mlx5e_priv *priv,
11671195
struct ethtool_ts_info *info)
11681196
{

0 commit comments

Comments
 (0)