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