19dab4d62SMichael Baum /* SPDX-License-Identifier: BSD-3-Clause 29dab4d62SMichael Baum * Copyright 2020 Mellanox Technologies, Ltd 39dab4d62SMichael Baum */ 49dab4d62SMichael Baum 59dab4d62SMichael Baum #ifndef RTE_PMD_MLX5_COMMON_DEVX_H_ 69dab4d62SMichael Baum #define RTE_PMD_MLX5_COMMON_DEVX_H_ 79dab4d62SMichael Baum 89dab4d62SMichael Baum #include "mlx5_devx_cmds.h" 99dab4d62SMichael Baum 10*1094dd94SDavid Marchand #include <rte_compat.h> 11*1094dd94SDavid Marchand 1238f53763SMichael Baum /* The standard page size */ 1338f53763SMichael Baum #define MLX5_LOG_PAGE_SIZE 12 1438f53763SMichael Baum 159dab4d62SMichael Baum /* DevX Completion Queue structure. */ 169dab4d62SMichael Baum struct mlx5_devx_cq { 179dab4d62SMichael Baum struct mlx5_devx_obj *cq; /* The CQ DevX object. */ 189dab4d62SMichael Baum void *umem_obj; /* The CQ umem object. */ 199dab4d62SMichael Baum union { 209dab4d62SMichael Baum volatile void *umem_buf; 219dab4d62SMichael Baum volatile struct mlx5_cqe *cqes; /* The CQ ring buffer. */ 229dab4d62SMichael Baum }; 239dab4d62SMichael Baum volatile uint32_t *db_rec; /* The CQ doorbell record. */ 249dab4d62SMichael Baum }; 259dab4d62SMichael Baum 2638f53763SMichael Baum /* DevX Send Queue structure. */ 2738f53763SMichael Baum struct mlx5_devx_sq { 2838f53763SMichael Baum struct mlx5_devx_obj *sq; /* The SQ DevX object. */ 2938f53763SMichael Baum void *umem_obj; /* The SQ umem object. */ 3038f53763SMichael Baum union { 3138f53763SMichael Baum volatile void *umem_buf; 3238f53763SMichael Baum volatile struct mlx5_wqe *wqes; /* The SQ ring buffer. */ 33389ab7f5SMichael Baum volatile struct mlx5_aso_wqe *aso_wqes; 3438f53763SMichael Baum }; 3538f53763SMichael Baum volatile uint32_t *db_rec; /* The SQ doorbell record. */ 3638f53763SMichael Baum }; 3738f53763SMichael Baum 38f9213ab1SRaja Zidane /* DevX Queue Pair structure. */ 39f9213ab1SRaja Zidane struct mlx5_devx_qp { 40f9213ab1SRaja Zidane struct mlx5_devx_obj *qp; /* The QP DevX object. */ 41f9213ab1SRaja Zidane void *umem_obj; /* The QP umem object. */ 42f9213ab1SRaja Zidane union { 43f9213ab1SRaja Zidane void *umem_buf; 44f9213ab1SRaja Zidane struct mlx5_wqe *wqes; /* The QP ring buffer. */ 45f9213ab1SRaja Zidane struct mlx5_aso_wqe *aso_wqes; 46f9213ab1SRaja Zidane }; 47f9213ab1SRaja Zidane volatile uint32_t *db_rec; /* The QP doorbell record. */ 48f9213ab1SRaja Zidane }; 49f9213ab1SRaja Zidane 50056c87d0SXueming Li /* DevX Receive Queue resource structure. */ 51056c87d0SXueming Li struct mlx5_devx_wq_res { 52edb704daSMichael Baum void *umem_obj; /* The RQ umem object. */ 53edb704daSMichael Baum volatile void *umem_buf; 54edb704daSMichael Baum volatile uint32_t *db_rec; /* The RQ doorbell record. */ 55edb704daSMichael Baum }; 5638f53763SMichael Baum 57056c87d0SXueming Li /* DevX Receive Memory Pool structure. */ 58056c87d0SXueming Li struct mlx5_devx_rmp { 59056c87d0SXueming Li struct mlx5_devx_obj *rmp; /* The RMP DevX object. */ 60056c87d0SXueming Li uint32_t ref_cnt; /* Reference count. */ 61056c87d0SXueming Li struct mlx5_devx_wq_res wq; 62056c87d0SXueming Li }; 63056c87d0SXueming Li 64056c87d0SXueming Li /* DevX Receive Queue structure. */ 65056c87d0SXueming Li struct mlx5_devx_rq { 66056c87d0SXueming Li struct mlx5_devx_obj *rq; /* The RQ DevX object. */ 67056c87d0SXueming Li struct mlx5_devx_rmp *rmp; /* Shared RQ RMP object. */ 68056c87d0SXueming Li struct mlx5_devx_wq_res wq; /* WQ resource of standalone RQ. */ 69056c87d0SXueming Li }; 70056c87d0SXueming Li 719dab4d62SMichael Baum /* mlx5_common_devx.c */ 729dab4d62SMichael Baum 739dab4d62SMichael Baum __rte_internal 749dab4d62SMichael Baum void mlx5_devx_cq_destroy(struct mlx5_devx_cq *cq); 759dab4d62SMichael Baum 769dab4d62SMichael Baum __rte_internal 779dab4d62SMichael Baum int mlx5_devx_cq_create(void *ctx, struct mlx5_devx_cq *cq_obj, 7838f53763SMichael Baum uint16_t log_desc_n, 7938f53763SMichael Baum struct mlx5_devx_cq_attr *attr, int socket); 8038f53763SMichael Baum 8138f53763SMichael Baum __rte_internal 8238f53763SMichael Baum void mlx5_devx_sq_destroy(struct mlx5_devx_sq *sq); 8338f53763SMichael Baum 8438f53763SMichael Baum __rte_internal 8538f53763SMichael Baum int mlx5_devx_sq_create(void *ctx, struct mlx5_devx_sq *sq_obj, 8638f53763SMichael Baum uint16_t log_wqbb_n, 8738f53763SMichael Baum struct mlx5_devx_create_sq_attr *attr, int socket); 889dab4d62SMichael Baum 89edb704daSMichael Baum __rte_internal 90f9213ab1SRaja Zidane void mlx5_devx_qp_destroy(struct mlx5_devx_qp *qp); 91f9213ab1SRaja Zidane 92f9213ab1SRaja Zidane __rte_internal 93f9213ab1SRaja Zidane int mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, 94bba8281dSRaja Zidane uint32_t queue_size, 95f9213ab1SRaja Zidane struct mlx5_devx_qp_attr *attr, int socket); 96f9213ab1SRaja Zidane 97f9213ab1SRaja Zidane __rte_internal 98edb704daSMichael Baum void mlx5_devx_rq_destroy(struct mlx5_devx_rq *rq); 99edb704daSMichael Baum 100edb704daSMichael Baum __rte_internal 101edb704daSMichael Baum int mlx5_devx_rq_create(void *ctx, struct mlx5_devx_rq *rq_obj, 102edb704daSMichael Baum uint32_t wqe_size, uint16_t log_wqbb_n, 103edb704daSMichael Baum struct mlx5_devx_create_rq_attr *attr, int socket); 104edb704daSMichael Baum 105f9213ab1SRaja Zidane __rte_internal 106f9213ab1SRaja Zidane int mlx5_devx_qp2rts(struct mlx5_devx_qp *qp, uint32_t remote_qp_id); 107f9213ab1SRaja Zidane 1089dab4d62SMichael Baum #endif /* RTE_PMD_MLX5_COMMON_DEVX_H_ */ 109