mirror of https://gitee.com/openkylin/linux.git
net/mlx5e: Add CONFIG_MLX5_EN_RXNFC for ethtool rx nfc
Add new mlx5 Kconfig flag to allow selecting ethtool rx nfc support, and compile out en_fs_ehtool.c if not selected. Add en/fs.h header file to host all steering declarations and definitions. Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Reviewed-by: Moshe Shemesh <moshe@mellanox.com>
This commit is contained in:
parent
cff2b1e3e8
commit
fe6d86b3c3
|
@ -35,6 +35,16 @@ config MLX5_CORE_EN
|
||||||
---help---
|
---help---
|
||||||
Ethernet support in Mellanox Technologies ConnectX-4 NIC.
|
Ethernet support in Mellanox Technologies ConnectX-4 NIC.
|
||||||
|
|
||||||
|
config MLX5_EN_RXNFC
|
||||||
|
bool "Mellanox MLX5 ethernet rx nfc flow steering support"
|
||||||
|
depends on MLX5_CORE_EN
|
||||||
|
default y
|
||||||
|
---help---
|
||||||
|
Mellanox MLX5 ethernet rx nfc flow steering support
|
||||||
|
Enables ethtool receive network flow classification, which allows user defined
|
||||||
|
flow rules to direct traffic into arbitrary rx queue via ethtool set/get_rxnfc
|
||||||
|
API.
|
||||||
|
|
||||||
config MLX5_MPFS
|
config MLX5_MPFS
|
||||||
bool "Mellanox Technologies MLX5 MPFS support"
|
bool "Mellanox Technologies MLX5 MPFS support"
|
||||||
depends on MLX5_CORE_EN
|
depends on MLX5_CORE_EN
|
||||||
|
|
|
@ -15,7 +15,9 @@ mlx5_core-$(CONFIG_MLX5_FPGA) += fpga/cmd.o fpga/core.o fpga/conn.o fpga/sdk.o \
|
||||||
|
|
||||||
mlx5_core-$(CONFIG_MLX5_CORE_EN) += en_main.o en_common.o en_fs.o en_ethtool.o \
|
mlx5_core-$(CONFIG_MLX5_CORE_EN) += en_main.o en_common.o en_fs.o en_ethtool.o \
|
||||||
en_tx.o en_rx.o en_dim.o en_txrx.o en/xdp.o en_stats.o \
|
en_tx.o en_rx.o en_dim.o en_txrx.o en/xdp.o en_stats.o \
|
||||||
en_arfs.o en_fs_ethtool.o en_selftest.o en/port.o lib/vxlan.o
|
en_arfs.o en_selftest.o en/port.o lib/vxlan.o
|
||||||
|
|
||||||
|
mlx5_core-$(CONFIG_MLX5_EN_RXNFC) += en_fs_ethtool.o
|
||||||
|
|
||||||
mlx5_core-$(CONFIG_MLX5_MPFS) += lib/mpfs.o
|
mlx5_core-$(CONFIG_MLX5_MPFS) += lib/mpfs.o
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,7 @@
|
||||||
#include "wq.h"
|
#include "wq.h"
|
||||||
#include "mlx5_core.h"
|
#include "mlx5_core.h"
|
||||||
#include "en_stats.h"
|
#include "en_stats.h"
|
||||||
|
#include "en/fs.h"
|
||||||
|
|
||||||
struct page_pool;
|
struct page_pool;
|
||||||
|
|
||||||
|
@ -746,24 +747,11 @@ enum {
|
||||||
MLX5E_TC_TTC_FT_LEVEL,
|
MLX5E_TC_TTC_FT_LEVEL,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mlx5e_ethtool_table {
|
|
||||||
struct mlx5_flow_table *ft;
|
|
||||||
int num_rules;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define ETHTOOL_NUM_L3_L4_FTS 7
|
|
||||||
#define ETHTOOL_NUM_L2_FTS 4
|
|
||||||
|
|
||||||
struct mlx5e_ethtool_steering {
|
|
||||||
struct mlx5e_ethtool_table l3_l4_ft[ETHTOOL_NUM_L3_L4_FTS];
|
|
||||||
struct mlx5e_ethtool_table l2_ft[ETHTOOL_NUM_L2_FTS];
|
|
||||||
struct list_head rules;
|
|
||||||
int tot_num_rules;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mlx5e_flow_steering {
|
struct mlx5e_flow_steering {
|
||||||
struct mlx5_flow_namespace *ns;
|
struct mlx5_flow_namespace *ns;
|
||||||
|
#ifdef CONFIG_MLX5_EN_RXNFC
|
||||||
struct mlx5e_ethtool_steering ethtool;
|
struct mlx5e_ethtool_steering ethtool;
|
||||||
|
#endif
|
||||||
struct mlx5e_tc_table tc;
|
struct mlx5e_tc_table tc;
|
||||||
struct mlx5e_vlan_table vlan;
|
struct mlx5e_vlan_table vlan;
|
||||||
struct mlx5e_l2_table l2;
|
struct mlx5e_l2_table l2;
|
||||||
|
@ -912,11 +900,6 @@ void mlx5e_destroy_flow_table(struct mlx5e_flow_table *ft);
|
||||||
int mlx5e_self_test_num(struct mlx5e_priv *priv);
|
int mlx5e_self_test_num(struct mlx5e_priv *priv);
|
||||||
void mlx5e_self_test(struct net_device *ndev, struct ethtool_test *etest,
|
void mlx5e_self_test(struct net_device *ndev, struct ethtool_test *etest,
|
||||||
u64 *buf);
|
u64 *buf);
|
||||||
void mlx5e_ethtool_init_steering(struct mlx5e_priv *priv);
|
|
||||||
void mlx5e_ethtool_cleanup_steering(struct mlx5e_priv *priv);
|
|
||||||
int mlx5e_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd);
|
|
||||||
int mlx5e_get_rxnfc(struct net_device *dev,
|
|
||||||
struct ethtool_rxnfc *info, u32 *rule_locs);
|
|
||||||
void mlx5e_set_rx_mode_work(struct work_struct *work);
|
void mlx5e_set_rx_mode_work(struct work_struct *work);
|
||||||
|
|
||||||
int mlx5e_hwstamp_set(struct mlx5e_priv *priv, struct ifreq *ifr);
|
int mlx5e_hwstamp_set(struct mlx5e_priv *priv, struct ifreq *ifr);
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
|
||||||
|
/* Copyright (c) 2018 Mellanox Technologies. */
|
||||||
|
|
||||||
|
#ifndef __MLX5E_FLOW_STEER_H__
|
||||||
|
#define __MLX5E_FLOW_STEER_H__
|
||||||
|
|
||||||
|
#ifdef CONFIG_MLX5_EN_RXNFC
|
||||||
|
|
||||||
|
struct mlx5e_ethtool_table {
|
||||||
|
struct mlx5_flow_table *ft;
|
||||||
|
int num_rules;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define ETHTOOL_NUM_L3_L4_FTS 7
|
||||||
|
#define ETHTOOL_NUM_L2_FTS 4
|
||||||
|
|
||||||
|
struct mlx5e_ethtool_steering {
|
||||||
|
struct mlx5e_ethtool_table l3_l4_ft[ETHTOOL_NUM_L3_L4_FTS];
|
||||||
|
struct mlx5e_ethtool_table l2_ft[ETHTOOL_NUM_L2_FTS];
|
||||||
|
struct list_head rules;
|
||||||
|
int tot_num_rules;
|
||||||
|
};
|
||||||
|
|
||||||
|
void mlx5e_ethtool_init_steering(struct mlx5e_priv *priv);
|
||||||
|
void mlx5e_ethtool_cleanup_steering(struct mlx5e_priv *priv);
|
||||||
|
int mlx5e_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd);
|
||||||
|
int mlx5e_get_rxnfc(struct net_device *dev,
|
||||||
|
struct ethtool_rxnfc *info, u32 *rule_locs);
|
||||||
|
#else
|
||||||
|
static inline void mlx5e_ethtool_init_steering(struct mlx5e_priv *priv) { }
|
||||||
|
static inline void mlx5e_ethtool_cleanup_steering(struct mlx5e_priv *priv) { }
|
||||||
|
#endif /* CONFIG_MLX5_EN_RXNFC */
|
||||||
|
|
||||||
|
#endif /* __MLX5E_FLOW_STEER_H__ */
|
||||||
|
|
|
@ -1631,8 +1631,10 @@ const struct ethtool_ops mlx5e_ethtool_ops = {
|
||||||
.get_rxfh_indir_size = mlx5e_get_rxfh_indir_size,
|
.get_rxfh_indir_size = mlx5e_get_rxfh_indir_size,
|
||||||
.get_rxfh = mlx5e_get_rxfh,
|
.get_rxfh = mlx5e_get_rxfh,
|
||||||
.set_rxfh = mlx5e_set_rxfh,
|
.set_rxfh = mlx5e_set_rxfh,
|
||||||
|
#ifdef CONFIG_MLX5_EN_RXNFC
|
||||||
.get_rxnfc = mlx5e_get_rxnfc,
|
.get_rxnfc = mlx5e_get_rxnfc,
|
||||||
.set_rxnfc = mlx5e_set_rxnfc,
|
.set_rxnfc = mlx5e_set_rxnfc,
|
||||||
|
#endif
|
||||||
.flash_device = mlx5e_flash_device,
|
.flash_device = mlx5e_flash_device,
|
||||||
.get_tunable = mlx5e_get_tunable,
|
.get_tunable = mlx5e_get_tunable,
|
||||||
.set_tunable = mlx5e_set_tunable,
|
.set_tunable = mlx5e_set_tunable,
|
||||||
|
|
Loading…
Reference in New Issue