13f22d6c7SMaxim Mikityanskiy /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 23f22d6c7SMaxim Mikityanskiy /* Copyright (c) 2021, Mellanox Technologies inc. All rights reserved. */ 33f22d6c7SMaxim Mikityanskiy 43f22d6c7SMaxim Mikityanskiy #ifndef __MLX5_EN_RX_RES_H__ 53f22d6c7SMaxim Mikityanskiy #define __MLX5_EN_RX_RES_H__ 63f22d6c7SMaxim Mikityanskiy 73f22d6c7SMaxim Mikityanskiy #include <linux/kernel.h> 83f22d6c7SMaxim Mikityanskiy #include "rqt.h" 9a6696735SMaxim Mikityanskiy #include "tir.h" 103f22d6c7SMaxim Mikityanskiy #include "fs.h" 1125307a91STariq Toukan #include "rss.h" 123f22d6c7SMaxim Mikityanskiy 1343ec0f41SMaxim Mikityanskiy struct mlx5e_rx_res; 143f22d6c7SMaxim Mikityanskiy 1543ec0f41SMaxim Mikityanskiy struct mlx5e_channels; 1643ec0f41SMaxim Mikityanskiy struct mlx5e_rss_params_hash; 170570c1c9SMaxim Mikityanskiy 1843ec0f41SMaxim Mikityanskiy enum mlx5e_rx_res_features { 1943ec0f41SMaxim Mikityanskiy MLX5E_RX_RES_FEATURE_INNER_FT = BIT(0), 203db4c85cSMaxim Mikityanskiy MLX5E_RX_RES_FEATURE_PTP = BIT(1), 213f22d6c7SMaxim Mikityanskiy }; 223f22d6c7SMaxim Mikityanskiy 2343ec0f41SMaxim Mikityanskiy /* Setup */ 2443ec0f41SMaxim Mikityanskiy struct mlx5e_rx_res *mlx5e_rx_res_alloc(void); 2543ec0f41SMaxim Mikityanskiy int mlx5e_rx_res_init(struct mlx5e_rx_res *res, struct mlx5_core_dev *mdev, 2643ec0f41SMaxim Mikityanskiy enum mlx5e_rx_res_features features, unsigned int max_nch, 27eaee12f0SKhalid Manaa u32 drop_rqn, const struct mlx5e_packet_merge_param *init_pkt_merge_param, 2843ec0f41SMaxim Mikityanskiy unsigned int init_nch); 2943ec0f41SMaxim Mikityanskiy void mlx5e_rx_res_destroy(struct mlx5e_rx_res *res); 3043ec0f41SMaxim Mikityanskiy void mlx5e_rx_res_free(struct mlx5e_rx_res *res); 3143ec0f41SMaxim Mikityanskiy 3243ec0f41SMaxim Mikityanskiy /* TIRN getters for flow steering */ 3343ec0f41SMaxim Mikityanskiy u32 mlx5e_rx_res_get_tirn_direct(struct mlx5e_rx_res *res, unsigned int ix); 34d443c6f6SMaor Gottlieb u32 mlx5e_rx_res_get_tirn_rss(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt); 35d443c6f6SMaor Gottlieb u32 mlx5e_rx_res_get_tirn_rss_inner(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt); 3643ec0f41SMaxim Mikityanskiy u32 mlx5e_rx_res_get_tirn_ptp(struct mlx5e_rx_res *res); 3743ec0f41SMaxim Mikityanskiy 3843ec0f41SMaxim Mikityanskiy /* Activate/deactivate API */ 3943ec0f41SMaxim Mikityanskiy void mlx5e_rx_res_channels_activate(struct mlx5e_rx_res *res, struct mlx5e_channels *chs); 4043ec0f41SMaxim Mikityanskiy void mlx5e_rx_res_channels_deactivate(struct mlx5e_rx_res *res); 413db4c85cSMaxim Mikityanskiy void mlx5e_rx_res_xsk_update(struct mlx5e_rx_res *res, struct mlx5e_channels *chs, 423db4c85cSMaxim Mikityanskiy unsigned int ix, bool xsk); 4343ec0f41SMaxim Mikityanskiy 4443ec0f41SMaxim Mikityanskiy /* Configuration API */ 4543ec0f41SMaxim Mikityanskiy void mlx5e_rx_res_rss_set_indir_uniform(struct mlx5e_rx_res *res, unsigned int nch); 46f01cc58cSTariq Toukan int mlx5e_rx_res_rss_get_rxfh(struct mlx5e_rx_res *res, u32 rss_idx, 47f01cc58cSTariq Toukan u32 *indir, u8 *key, u8 *hfunc); 48f01cc58cSTariq Toukan int mlx5e_rx_res_rss_set_rxfh(struct mlx5e_rx_res *res, u32 rss_idx, 49f01cc58cSTariq Toukan const u32 *indir, const u8 *key, const u8 *hfunc); 50f01cc58cSTariq Toukan 51*0212e5d9SJoe Damato int mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, u32 rss_idx, 52*0212e5d9SJoe Damato enum mlx5_traffic_types tt); 53*0212e5d9SJoe Damato int mlx5e_rx_res_rss_set_hash_fields(struct mlx5e_rx_res *res, u32 rss_idx, 54*0212e5d9SJoe Damato enum mlx5_traffic_types tt, u8 rx_hash_fields); 55eaee12f0SKhalid Manaa int mlx5e_rx_res_packet_merge_set_param(struct mlx5e_rx_res *res, 56eaee12f0SKhalid Manaa struct mlx5e_packet_merge_param *pkt_merge_param); 5743ec0f41SMaxim Mikityanskiy 58f01cc58cSTariq Toukan int mlx5e_rx_res_rss_init(struct mlx5e_rx_res *res, u32 *rss_idx, unsigned int init_nch); 59f01cc58cSTariq Toukan int mlx5e_rx_res_rss_destroy(struct mlx5e_rx_res *res, u32 rss_idx); 60f01cc58cSTariq Toukan int mlx5e_rx_res_rss_cnt(struct mlx5e_rx_res *res); 61248d3b4cSTariq Toukan int mlx5e_rx_res_rss_index(struct mlx5e_rx_res *res, struct mlx5e_rss *rss); 62248d3b4cSTariq Toukan struct mlx5e_rss *mlx5e_rx_res_rss_get(struct mlx5e_rx_res *res, u32 rss_idx); 63f01cc58cSTariq Toukan 6443ec0f41SMaxim Mikityanskiy /* Workaround for hairpin */ 6543ec0f41SMaxim Mikityanskiy struct mlx5e_rss_params_hash mlx5e_rx_res_get_current_hash(struct mlx5e_rx_res *res); 6665d6b6e5SMaxim Mikityanskiy 674cce2ccfSTariq Toukan /* Accel TIRs */ 684cce2ccfSTariq Toukan int mlx5e_rx_res_tls_tir_create(struct mlx5e_rx_res *res, unsigned int rxq, 694cce2ccfSTariq Toukan struct mlx5e_tir *tir); 703f22d6c7SMaxim Mikityanskiy #endif /* __MLX5_EN_RX_RES_H__ */ 71