OSDN Git Service

scripts: adjust url to Coverity tools
[qmiga/qemu.git] / hw / rdma / rdma_rm_defs.h
1 /*
2  * RDMA device: Definitions of Resource Manager structures
3  *
4  * Copyright (C) 2018 Oracle
5  * Copyright (C) 2018 Red Hat Inc
6  *
7  * Authors:
8  *     Yuval Shaia <yuval.shaia@oracle.com>
9  *     Marcel Apfelbaum <marcel@redhat.com>
10  *
11  * This work is licensed under the terms of the GNU GPL, version 2 or later.
12  * See the COPYING file in the top-level directory.
13  *
14  */
15
16 #ifndef RDMA_RM_DEFS_H
17 #define RDMA_RM_DEFS_H
18
19 #include "rdma_backend_defs.h"
20
21 #define MAX_PORTS             1 /* Do not change - we support only one port */
22 #define MAX_PORT_GIDS         255
23 #define MAX_GIDS              MAX_PORT_GIDS
24 #define MAX_PORT_PKEYS        1
25 #define MAX_PKEYS             MAX_PORT_PKEYS
26 #define MAX_UCS               512
27 #define MAX_MR_SIZE           (1UL << 27)
28 #define MAX_QP                1024
29 #define MAX_SGE               4
30 #define MAX_CQ                2048
31 #define MAX_MR                1024
32 #define MAX_PD                1024
33 #define MAX_QP_RD_ATOM        16
34 #define MAX_QP_INIT_RD_ATOM   16
35 #define MAX_AH                64
36 #define MAX_SRQ               512
37
38 #define MAX_RM_TBL_NAME             16
39 #define MAX_CONSEQ_EMPTY_POLL_CQ    4096 /* considered as error above this */
40
41 typedef struct RdmaRmResTbl {
42     char name[MAX_RM_TBL_NAME];
43     QemuMutex lock;
44     unsigned long *bitmap;
45     size_t tbl_sz;
46     size_t res_sz;
47     void *tbl;
48     uint32_t used; /* number of used entries in the table */
49 } RdmaRmResTbl;
50
51 typedef struct RdmaRmPD {
52     RdmaBackendPD backend_pd;
53     uint32_t ctx_handle;
54 } RdmaRmPD;
55
56 typedef enum CQNotificationType {
57     CNT_CLEAR,
58     CNT_ARM,
59     CNT_SET,
60 } CQNotificationType;
61
62 typedef struct RdmaRmCQ {
63     RdmaBackendCQ backend_cq;
64     void *opaque;
65     CQNotificationType notify;
66 } RdmaRmCQ;
67
68 /* MR (DMA region) */
69 typedef struct RdmaRmMR {
70     RdmaBackendMR backend_mr;
71     void *virt;
72     uint64_t start;
73     size_t length;
74     uint32_t pd_handle;
75     uint32_t lkey;
76     uint32_t rkey;
77 } RdmaRmMR;
78
79 typedef struct RdmaRmUC {
80     uint64_t uc_handle;
81 } RdmaRmUC;
82
83 typedef struct RdmaRmQP {
84     RdmaBackendQP backend_qp;
85     void *opaque;
86     uint32_t qp_type;
87     uint32_t qpn;
88     uint32_t send_cq_handle;
89     uint32_t recv_cq_handle;
90     enum ibv_qp_state qp_state;
91     uint8_t is_srq;
92 } RdmaRmQP;
93
94 typedef struct RdmaRmSRQ {
95     RdmaBackendSRQ backend_srq;
96     uint32_t recv_cq_handle;
97     void *opaque;
98 } RdmaRmSRQ;
99
100 typedef struct RdmaRmGid {
101     union ibv_gid gid;
102     int backend_gid_index;
103 } RdmaRmGid;
104
105 typedef struct RdmaRmPort {
106     RdmaRmGid gid_tbl[MAX_PORT_GIDS];
107     enum ibv_port_state state;
108 } RdmaRmPort;
109
110 typedef struct RdmaRmStats {
111     uint64_t tx;
112     uint64_t tx_len;
113     uint64_t tx_err;
114     uint64_t rx_bufs;
115     uint64_t rx_bufs_len;
116     uint64_t rx_bufs_err;
117     uint64_t rx_srq;
118     uint64_t completions;
119     uint64_t mad_tx;
120     uint64_t mad_tx_err;
121     uint64_t mad_rx;
122     uint64_t mad_rx_err;
123     uint64_t mad_rx_bufs;
124     uint64_t mad_rx_bufs_err;
125     uint64_t poll_cq_from_bk;
126     uint64_t poll_cq_from_guest;
127     uint64_t poll_cq_from_guest_empty;
128     uint64_t poll_cq_ppoll_to;
129     uint32_t missing_cqe;
130 } RdmaRmStats;
131
132 struct RdmaDeviceResources {
133     RdmaRmPort port;
134     RdmaRmResTbl pd_tbl;
135     RdmaRmResTbl mr_tbl;
136     RdmaRmResTbl uc_tbl;
137     RdmaRmResTbl qp_tbl;
138     RdmaRmResTbl cq_tbl;
139     RdmaRmResTbl cqe_ctx_tbl;
140     RdmaRmResTbl srq_tbl;
141     GHashTable *qp_hash; /* Keeps mapping between real and emulated */
142     QemuMutex lock;
143     RdmaRmStats stats;
144 };
145
146 #endif