106e9f13aSMaxim Mikityanskiy /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
206e9f13aSMaxim Mikityanskiy /* Copyright (c) 2021, Mellanox Technologies inc. All rights reserved. */
306e9f13aSMaxim Mikityanskiy 
406e9f13aSMaxim Mikityanskiy #ifndef __MLX5_EN_RQT_H__
506e9f13aSMaxim Mikityanskiy #define __MLX5_EN_RQT_H__
606e9f13aSMaxim Mikityanskiy 
706e9f13aSMaxim Mikityanskiy #include <linux/kernel.h>
806e9f13aSMaxim Mikityanskiy 
906e9f13aSMaxim Mikityanskiy #define MLX5E_INDIR_RQT_SIZE (1 << 8)
1006e9f13aSMaxim Mikityanskiy 
1106e9f13aSMaxim Mikityanskiy struct mlx5_core_dev;
1206e9f13aSMaxim Mikityanskiy 
1306e9f13aSMaxim Mikityanskiy struct mlx5e_rss_params_indir {
1406e9f13aSMaxim Mikityanskiy 	u32 table[MLX5E_INDIR_RQT_SIZE];
1506e9f13aSMaxim Mikityanskiy };
1606e9f13aSMaxim Mikityanskiy 
17*43befe99SMaxim Mikityanskiy void mlx5e_rss_params_indir_init_uniform(struct mlx5e_rss_params_indir *indir,
18*43befe99SMaxim Mikityanskiy 					 unsigned int num_channels);
19*43befe99SMaxim Mikityanskiy 
2006e9f13aSMaxim Mikityanskiy struct mlx5e_rqt {
2106e9f13aSMaxim Mikityanskiy 	struct mlx5_core_dev *mdev;
2206e9f13aSMaxim Mikityanskiy 	u32 rqtn;
2306e9f13aSMaxim Mikityanskiy 	u16 size;
2406e9f13aSMaxim Mikityanskiy };
2506e9f13aSMaxim Mikityanskiy 
2606e9f13aSMaxim Mikityanskiy int mlx5e_rqt_init_direct(struct mlx5e_rqt *rqt, struct mlx5_core_dev *mdev,
2706e9f13aSMaxim Mikityanskiy 			  bool indir_enabled, u32 init_rqn);
2806e9f13aSMaxim Mikityanskiy int mlx5e_rqt_init_indir(struct mlx5e_rqt *rqt, struct mlx5_core_dev *mdev,
2906e9f13aSMaxim Mikityanskiy 			 u32 *rqns, unsigned int num_rqns,
3006e9f13aSMaxim Mikityanskiy 			 u8 hfunc, struct mlx5e_rss_params_indir *indir);
3106e9f13aSMaxim Mikityanskiy void mlx5e_rqt_destroy(struct mlx5e_rqt *rqt);
3206e9f13aSMaxim Mikityanskiy 
mlx5e_rqt_get_rqtn(struct mlx5e_rqt * rqt)3306e9f13aSMaxim Mikityanskiy static inline u32 mlx5e_rqt_get_rqtn(struct mlx5e_rqt *rqt)
3406e9f13aSMaxim Mikityanskiy {
3506e9f13aSMaxim Mikityanskiy 	return rqt->rqtn;
3606e9f13aSMaxim Mikityanskiy }
3706e9f13aSMaxim Mikityanskiy 
3806e9f13aSMaxim Mikityanskiy int mlx5e_rqt_redirect_direct(struct mlx5e_rqt *rqt, u32 rqn);
3906e9f13aSMaxim Mikityanskiy int mlx5e_rqt_redirect_indir(struct mlx5e_rqt *rqt, u32 *rqns, unsigned int num_rqns,
4006e9f13aSMaxim Mikityanskiy 			     u8 hfunc, struct mlx5e_rss_params_indir *indir);
4106e9f13aSMaxim Mikityanskiy 
4206e9f13aSMaxim Mikityanskiy #endif /* __MLX5_EN_RQT_H__ */
43