0001
0002
0003
0004 #ifndef __MLX5_EN_RQT_H__
0005 #define __MLX5_EN_RQT_H__
0006
0007 #include <linux/kernel.h>
0008
0009 #define MLX5E_INDIR_RQT_SIZE (1 << 8)
0010
0011 struct mlx5_core_dev;
0012
0013 struct mlx5e_rss_params_indir {
0014 u32 table[MLX5E_INDIR_RQT_SIZE];
0015 };
0016
0017 void mlx5e_rss_params_indir_init_uniform(struct mlx5e_rss_params_indir *indir,
0018 unsigned int num_channels);
0019
0020 struct mlx5e_rqt {
0021 struct mlx5_core_dev *mdev;
0022 u32 rqtn;
0023 u16 size;
0024 };
0025
0026 int mlx5e_rqt_init_direct(struct mlx5e_rqt *rqt, struct mlx5_core_dev *mdev,
0027 bool indir_enabled, u32 init_rqn);
0028 int mlx5e_rqt_init_indir(struct mlx5e_rqt *rqt, struct mlx5_core_dev *mdev,
0029 u32 *rqns, unsigned int num_rqns,
0030 u8 hfunc, struct mlx5e_rss_params_indir *indir);
0031 void mlx5e_rqt_destroy(struct mlx5e_rqt *rqt);
0032
0033 static inline u32 mlx5e_rqt_get_rqtn(struct mlx5e_rqt *rqt)
0034 {
0035 return rqt->rqtn;
0036 }
0037
0038 int mlx5e_rqt_redirect_direct(struct mlx5e_rqt *rqt, u32 rqn);
0039 int mlx5e_rqt_redirect_indir(struct mlx5e_rqt *rqt, u32 *rqns, unsigned int num_rqns,
0040 u8 hfunc, struct mlx5e_rss_params_indir *indir);
0041
0042 #endif