#include <infiniband/mlx4dv.h> int mlx4dv_init_obj(struct mlx4dv_obj *obj, uint64_t obj_type);
Request information of CQ marks its owned by direct verbs for all consumer index related actions. The initialization type can be combination of several types together.
struct mlx4dv_qp {
uint32_t *rdb;
uint32_t *sdb;
struct {
uint32_t wqe_cnt;
int wqe_shift;
int offset;
} sq;
struct {
uint32_t wqe_cnt;
int wqe_shift;
int offset;
} rq;
struct {
void *buf;
size_t length;
} buf;
uint64_t comp_mask; /* Use enum mlx4dv_qp_comp_mask */
off_t uar_mmap_offset; /* If MLX4DV_QP_MASK_UAR_MMAP_OFFSET is set in comp_mask, this will contain the mmap offset of *sdb* */
};
struct mlx4dv_cq {
struct {
void *buf;
size_t length;
} buf;
uint32_t cqe_cnt;
uint32_t cqn;
uint32_t *set_ci_db;
uint32_t *arm_db;
int arm_sn;
int cqe_size;
uint64_t comp_mask; /* Use enum mlx4dv_cq_comp_mask */
void *cq_uar;
};
struct mlx4dv_srq {
struct {
void *buf;
size_t length;
} buf;
int wqe_shift;
int head;
int tail;
uint32_t *db;
uint64_t comp_mask;
};
struct mlx4dv_rwq {
__be32 *rdb;
struct {
uint32_t wqe_cnt;
int wqe_shift;
int offset;
} rq;
struct {
void *buf;
size_t length;
} buf;
uint64_t comp_mask;
};
struct mlx4dv_obj {
struct {
struct ibv_qp *in;
struct mlx4dv_qp *out;
} qp;
struct {
struct ibv_cq *in;
struct mlx4dv_cq *out;
} cq;
};
enum mlx4dv_obj_type {
MLX4DV_OBJ_QP = 1 << 0,
MLX4DV_OBJ_CQ = 1 << 1,
MLX4DV_OBJ_SRQ = 1 << 2,
};