1 /*
2  *  RDMA device: Definitions of Backend Device 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_BACKEND_DEFS_H
17 #define RDMA_BACKEND_DEFS_H
18 
19 #include "qemu/thread.h"
20 #include "chardev/char-fe.h"
21 #include <infiniband/verbs.h>
22 #include "contrib/rdmacm-mux/rdmacm-mux.h"
23 #include "rdma_utils.h"
24 
25 typedef struct RdmaDeviceResources RdmaDeviceResources;
26 
27 typedef struct RdmaBackendThread {
28     QemuThread thread;
29     bool run; /* Set by thread manager to let thread know it should exit */
30     bool is_running; /* Set by the thread to report its status */
31 } RdmaBackendThread;
32 
33 typedef struct RdmaCmMux {
34     CharBackend *chr_be;
35     int can_receive;
36 } RdmaCmMux;
37 
38 typedef struct RdmaBackendDev {
39     RdmaBackendThread comp_thread;
40     PCIDevice *dev;
41     RdmaDeviceResources *rdma_dev_res;
42     struct ibv_device *ib_dev;
43     struct ibv_context *context;
44     struct ibv_comp_channel *channel;
45     uint8_t port_num;
46     RdmaProtectedQList recv_mads_list;
47     RdmaCmMux rdmacm_mux;
48 } RdmaBackendDev;
49 
50 typedef struct RdmaBackendPD {
51     struct ibv_pd *ibpd;
52 } RdmaBackendPD;
53 
54 typedef struct RdmaBackendMR {
55     struct ibv_pd *ibpd;
56     struct ibv_mr *ibmr;
57 } RdmaBackendMR;
58 
59 typedef struct RdmaBackendCQ {
60     RdmaBackendDev *backend_dev;
61     struct ibv_cq *ibcq;
62 } RdmaBackendCQ;
63 
64 typedef struct RdmaBackendQP {
65     struct ibv_pd *ibpd;
66     struct ibv_qp *ibqp;
67     uint8_t sgid_idx;
68     RdmaProtectedGSList cqe_ctx_list;
69 } RdmaBackendQP;
70 
71 typedef struct RdmaBackendSRQ {
72     struct ibv_srq *ibsrq;
73     RdmaProtectedGSList cqe_ctx_list;
74 } RdmaBackendSRQ;
75 
76 #endif
77