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 Shitritstatic 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 Kliteynikstatic 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 Shitritmlx5dr_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