xref: /dpdk/drivers/net/mlx5/hws/mlx5dr_context.h (revision 87026d2e66019e23479e916584bc4cfc7b2c0f34)
1b0290e56SAlex Vesker /* SPDX-License-Identifier: BSD-3-Clause
2b0290e56SAlex Vesker  * Copyright (c) 2022 NVIDIA Corporation & Affiliates
3b0290e56SAlex Vesker  */
4b0290e56SAlex Vesker 
5b0290e56SAlex Vesker #ifndef MLX5DR_CONTEXT_H_
6b0290e56SAlex Vesker #define MLX5DR_CONTEXT_H_
7b0290e56SAlex Vesker 
8b0290e56SAlex Vesker enum mlx5dr_context_flags {
9b0290e56SAlex Vesker 	MLX5DR_CONTEXT_FLAG_HWS_SUPPORT = 1 << 0,
10b0290e56SAlex Vesker 	MLX5DR_CONTEXT_FLAG_PRIVATE_PD = 1 << 1,
11*87026d2eSYevgeny Kliteynik 	MLX5DR_CONTEXT_FLAG_BWC_SUPPORT = 1 << 2,
12b0290e56SAlex Vesker };
13b0290e56SAlex Vesker 
14b0290e56SAlex Vesker enum mlx5dr_context_shared_stc_type {
15bbddd062SAlex Vesker 	MLX5DR_CONTEXT_SHARED_STC_DECAP_L3 = 0,
16bbddd062SAlex Vesker 	MLX5DR_CONTEXT_SHARED_STC_DOUBLE_POP = 1,
17b0290e56SAlex Vesker 	MLX5DR_CONTEXT_SHARED_STC_MAX = 2,
18b0290e56SAlex Vesker };
19b0290e56SAlex Vesker 
20b0290e56SAlex Vesker struct mlx5dr_context_common_res {
21b0290e56SAlex Vesker 	struct mlx5dr_action_default_stc *default_stc;
22b0290e56SAlex Vesker 	struct mlx5dr_action_shared_stc *shared_stc[MLX5DR_CONTEXT_SHARED_STC_MAX];
23b0290e56SAlex Vesker 	struct mlx5dr_cmd_forward_tbl *default_miss;
24b0290e56SAlex Vesker };
25b0290e56SAlex Vesker 
26ce946c7dSErez Shitrit struct mlx5dr_context_shared_gvmi_res {
27ce946c7dSErez Shitrit 	struct mlx5dr_devx_obj *end_ft;
28ce946c7dSErez Shitrit 	struct mlx5dr_devx_obj *aliased_end_ft;
29ce946c7dSErez Shitrit 	uint32_t refcount;
30ce946c7dSErez Shitrit };
31ce946c7dSErez Shitrit 
32b0290e56SAlex Vesker struct mlx5dr_context {
33b0290e56SAlex Vesker 	struct ibv_context *ibv_ctx;
34ce946c7dSErez Shitrit 	/* When local_ibv_ctx is not NULL means we are using shared_ibv for resources */
35ce946c7dSErez Shitrit 	struct ibv_context *local_ibv_ctx;
36b0290e56SAlex Vesker 	struct mlx5dr_cmd_query_caps *caps;
37b0290e56SAlex Vesker 	struct ibv_pd *pd;
38b0290e56SAlex Vesker 	uint32_t pd_num;
39b0290e56SAlex Vesker 	struct mlx5dr_pool *stc_pool[MLX5DR_TABLE_TYPE_MAX];
40b0290e56SAlex Vesker 	struct mlx5dr_context_common_res common_res[MLX5DR_TABLE_TYPE_MAX];
41ce946c7dSErez Shitrit 	struct mlx5dr_context_shared_gvmi_res gvmi_res[MLX5DR_TABLE_TYPE_MAX];
42b0290e56SAlex Vesker 	struct mlx5dr_pattern_cache *pattern_cache;
432e2d6533SAlex Vesker 	struct mlx5dr_definer_cache *definer_cache;
44b0290e56SAlex Vesker 	pthread_spinlock_t ctrl_lock;
45b0290e56SAlex Vesker 	enum mlx5dr_context_flags flags;
46b0290e56SAlex Vesker 	struct mlx5dr_send_engine *send_queue;
47b0290e56SAlex Vesker 	size_t queues;
48*87026d2eSYevgeny Kliteynik 	rte_spinlock_t *bwc_send_queue_locks;
49b0290e56SAlex Vesker 	LIST_HEAD(table_head, mlx5dr_table) head;
50b0290e56SAlex Vesker };
51b0290e56SAlex Vesker 
mlx5dr_context_shared_gvmi_used(struct mlx5dr_context * ctx)52ce946c7dSErez Shitrit static inline bool mlx5dr_context_shared_gvmi_used(struct mlx5dr_context *ctx)
53ce946c7dSErez Shitrit {
54ce946c7dSErez Shitrit 	return ctx->local_ibv_ctx ? true : false;
55ce946c7dSErez Shitrit }
56ce946c7dSErez Shitrit 
mlx5dr_context_bwc_supported(struct mlx5dr_context * ctx)57*87026d2eSYevgeny Kliteynik static inline bool mlx5dr_context_bwc_supported(struct mlx5dr_context *ctx)
58*87026d2eSYevgeny Kliteynik {
59*87026d2eSYevgeny Kliteynik 	return ctx->flags & MLX5DR_CONTEXT_FLAG_BWC_SUPPORT;
60*87026d2eSYevgeny Kliteynik }
61*87026d2eSYevgeny Kliteynik 
62ce946c7dSErez Shitrit static inline struct ibv_context *
mlx5dr_context_get_local_ibv(struct mlx5dr_context * ctx)63ce946c7dSErez Shitrit mlx5dr_context_get_local_ibv(struct mlx5dr_context *ctx)
64ce946c7dSErez Shitrit {
65ce946c7dSErez Shitrit 	if (mlx5dr_context_shared_gvmi_used(ctx))
66ce946c7dSErez Shitrit 		return ctx->local_ibv_ctx;
67ce946c7dSErez Shitrit 
68ce946c7dSErez Shitrit 	return ctx->ibv_ctx;
69ce946c7dSErez Shitrit }
70bbddd062SAlex Vesker 
71bbddd062SAlex Vesker bool mlx5dr_context_cap_dynamic_reparse(struct mlx5dr_context *ctx);
72bbddd062SAlex Vesker 
73bbddd062SAlex Vesker uint8_t mlx5dr_context_get_reparse_mode(struct mlx5dr_context *ctx);
74bbddd062SAlex Vesker 
75b0290e56SAlex Vesker #endif /* MLX5DR_CONTEXT_H_ */
76