1 /** 2 * Copyright (C) Mellanox Technologies Ltd. 2001-2018. ALL RIGHTS RESERVED. 3 * 4 * See file LICENSE for terms. 5 */ 6 7 #ifndef UCT_IB_MLX5_HW_H_ 8 #define UCT_IB_MLX5_HW_H_ 9 10 #include <stdint.h> 11 12 struct mlx5dv_qp { 13 volatile uint32_t *dbrec; 14 struct { 15 void *buf; 16 uint32_t wqe_cnt; 17 uint32_t stride; 18 } sq; 19 struct { 20 void *buf; 21 uint32_t wqe_cnt; 22 uint32_t stride; 23 } rq; 24 struct { 25 void *reg; 26 uint32_t size; 27 } bf; 28 uint64_t comp_mask; 29 }; 30 31 struct mlx5dv_cq { 32 void *buf; 33 volatile uint32_t *dbrec; 34 uint32_t cqe_cnt; 35 uint32_t cqe_size; 36 void *cq_uar; 37 /* DV backport will behave as DV with fixed CQ UAR */ 38 #undef HAVE_STRUCT_MLX5DV_CQ_CQ_UAR 39 #define HAVE_STRUCT_MLX5DV_CQ_CQ_UAR 1 40 uint32_t cqn; 41 uint64_t comp_mask; 42 }; 43 44 struct mlx5dv_srq { 45 void *buf; 46 volatile uint32_t *dbrec; 47 uint32_t stride; 48 uint32_t head; 49 uint32_t tail; 50 uint64_t comp_mask; 51 }; 52 53 struct mlx5dv_obj { 54 struct { 55 struct ibv_qp *in; 56 struct mlx5dv_qp *out; 57 } qp; 58 struct { 59 struct ibv_cq *in; 60 struct mlx5dv_cq *out; 61 } cq; 62 struct { 63 struct ibv_srq *in; 64 struct mlx5dv_srq *out; 65 } srq; 66 struct { 67 struct ibv_exp_wq *in; 68 struct mlx5dv_rwq *out; 69 } rwq; 70 }; 71 72 enum mlx5dv_obj_type { 73 MLX5DV_OBJ_QP = 1 << 0, 74 MLX5DV_OBJ_CQ = 1 << 1, 75 MLX5DV_OBJ_SRQ = 1 << 2, 76 MLX5DV_OBJ_RWQ = 1 << 3, 77 }; 78 79 #endif 80