diff options
| author | Saeed Mahameed <saeedm@mellanox.com> | 2018-07-11 12:02:42 -0700 | 
|---|---|---|
| committer | Saeed Mahameed <saeedm@mellanox.com> | 2018-08-13 12:50:17 -0700 | 
| commit | fe6d86b3c3165e6c55d6b0049a13d3b65371163a (patch) | |
| tree | 76357780af00c37262053afcb563a93de00b0030 /drivers/net | |
| parent | cff2b1e3e83286e569466663b35bf0ae23afcbcf (diff) | |
| download | linux-fe6d86b3c3165e6c55d6b0049a13d3b65371163a.tar.bz2 | |
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>
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/Kconfig | 10 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/Makefile | 4 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/en.h | 23 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/en/fs.h | 35 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 2 | 
5 files changed, 53 insertions, 21 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig index 7a84dd07ced2..1ff5f12ab12d 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/Kconfig +++ b/drivers/net/ethernet/mellanox/mlx5/core/Kconfig @@ -35,6 +35,16 @@ config MLX5_CORE_EN  	---help---  	  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          bool "Mellanox Technologies MLX5 MPFS support"          depends on MLX5_CORE_EN diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Makefile b/drivers/net/ethernet/mellanox/mlx5/core/Makefile index f20fda1ced4f..7b6f9d2c32c9 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/Makefile +++ b/drivers/net/ethernet/mellanox/mlx5/core/Makefile @@ -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 \  		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 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h index 31a29b73f558..19728f9f25e7 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h @@ -52,6 +52,7 @@  #include "wq.h"  #include "mlx5_core.h"  #include "en_stats.h" +#include "en/fs.h"  struct page_pool; @@ -746,24 +747,11 @@ enum {  	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 mlx5_flow_namespace      *ns; +#ifdef CONFIG_MLX5_EN_RXNFC  	struct mlx5e_ethtool_steering   ethtool; +#endif  	struct mlx5e_tc_table           tc;  	struct mlx5e_vlan_table         vlan;  	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);  void mlx5e_self_test(struct net_device *ndev, struct ethtool_test *etest,  		     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);  int mlx5e_hwstamp_set(struct mlx5e_priv *priv, struct ifreq *ifr); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h b/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h new file mode 100644 index 000000000000..50b0784787bc --- /dev/null +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/fs.h @@ -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__ */ + diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c index cde1a0bb9c4a..7787cc3a2c84 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c @@ -1631,8 +1631,10 @@ const struct ethtool_ops mlx5e_ethtool_ops = {  	.get_rxfh_indir_size = mlx5e_get_rxfh_indir_size,  	.get_rxfh          = mlx5e_get_rxfh,  	.set_rxfh          = mlx5e_set_rxfh, +#ifdef CONFIG_MLX5_EN_RXNFC  	.get_rxnfc         = mlx5e_get_rxnfc,  	.set_rxnfc         = mlx5e_set_rxnfc, +#endif  	.flash_device      = mlx5e_flash_device,  	.get_tunable       = mlx5e_get_tunable,  	.set_tunable       = mlx5e_set_tunable,  |