1*06e9f13aSMaxim Mikityanskiy /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
2*06e9f13aSMaxim Mikityanskiy /* Copyright (c) 2021, Mellanox Technologies inc. All rights reserved. */
3*06e9f13aSMaxim Mikityanskiy 
4*06e9f13aSMaxim Mikityanskiy #ifndef __MLX5_EN_RQT_H__
5*06e9f13aSMaxim Mikityanskiy #define __MLX5_EN_RQT_H__
6*06e9f13aSMaxim Mikityanskiy 
7*06e9f13aSMaxim Mikityanskiy #include <linux/kernel.h>
8*06e9f13aSMaxim Mikityanskiy 
9*06e9f13aSMaxim Mikityanskiy #define MLX5E_INDIR_RQT_SIZE (1 << 8)
10*06e9f13aSMaxim Mikityanskiy 
11*06e9f13aSMaxim Mikityanskiy struct mlx5_core_dev;
12*06e9f13aSMaxim Mikityanskiy 
13*06e9f13aSMaxim Mikityanskiy struct mlx5e_rss_params_indir {
14*06e9f13aSMaxim Mikityanskiy 	u32 table[MLX5E_INDIR_RQT_SIZE];
15*06e9f13aSMaxim Mikityanskiy };
16*06e9f13aSMaxim Mikityanskiy 
17*06e9f13aSMaxim Mikityanskiy struct mlx5e_rqt {
18*06e9f13aSMaxim Mikityanskiy 	struct mlx5_core_dev *mdev;
19*06e9f13aSMaxim Mikityanskiy 	u32 rqtn;
20*06e9f13aSMaxim Mikityanskiy 	u16 size;
21*06e9f13aSMaxim Mikityanskiy };
22*06e9f13aSMaxim Mikityanskiy 
23*06e9f13aSMaxim Mikityanskiy int mlx5e_rqt_init_direct(struct mlx5e_rqt *rqt, struct mlx5_core_dev *mdev,
24*06e9f13aSMaxim Mikityanskiy 			  bool indir_enabled, u32 init_rqn);
25*06e9f13aSMaxim Mikityanskiy int mlx5e_rqt_init_indir(struct mlx5e_rqt *rqt, struct mlx5_core_dev *mdev,
26*06e9f13aSMaxim Mikityanskiy 			 u32 *rqns, unsigned int num_rqns,
27*06e9f13aSMaxim Mikityanskiy 			 u8 hfunc, struct mlx5e_rss_params_indir *indir);
28*06e9f13aSMaxim Mikityanskiy void mlx5e_rqt_destroy(struct mlx5e_rqt *rqt);
29*06e9f13aSMaxim Mikityanskiy 
30*06e9f13aSMaxim Mikityanskiy static inline u32 mlx5e_rqt_get_rqtn(struct mlx5e_rqt *rqt)
31*06e9f13aSMaxim Mikityanskiy {
32*06e9f13aSMaxim Mikityanskiy 	return rqt->rqtn;
33*06e9f13aSMaxim Mikityanskiy }
34*06e9f13aSMaxim Mikityanskiy 
35*06e9f13aSMaxim Mikityanskiy int mlx5e_rqt_redirect_direct(struct mlx5e_rqt *rqt, u32 rqn);
36*06e9f13aSMaxim Mikityanskiy int mlx5e_rqt_redirect_indir(struct mlx5e_rqt *rqt, u32 *rqns, unsigned int num_rqns,
37*06e9f13aSMaxim Mikityanskiy 			     u8 hfunc, struct mlx5e_rss_params_indir *indir);
38*06e9f13aSMaxim Mikityanskiy 
39*06e9f13aSMaxim Mikityanskiy #endif /* __MLX5_EN_RQT_H__ */
40