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