xref: /openbmc/qemu/hw/rdma/rdma_backend_defs.h (revision 073d9f2c)
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 
24 typedef struct RdmaDeviceResources RdmaDeviceResources;
25 
26 typedef struct RdmaBackendThread {
27     QemuThread thread;
28     QemuMutex mutex;
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 RecvMadList {
34     QemuMutex lock;
35     QList *list;
36 } RecvMadList;
37 
38 typedef struct RdmaCmMux {
39     CharBackend *chr_be;
40     int can_receive;
41 } RdmaCmMux;
42 
43 typedef struct RdmaBackendDev {
44     RdmaBackendThread comp_thread;
45     PCIDevice *dev;
46     RdmaDeviceResources *rdma_dev_res;
47     struct ibv_device *ib_dev;
48     struct ibv_context *context;
49     struct ibv_comp_channel *channel;
50     uint8_t port_num;
51     RecvMadList recv_mads_list;
52     RdmaCmMux rdmacm_mux;
53 } RdmaBackendDev;
54 
55 typedef struct RdmaBackendPD {
56     struct ibv_pd *ibpd;
57 } RdmaBackendPD;
58 
59 typedef struct RdmaBackendMR {
60     struct ibv_pd *ibpd;
61     struct ibv_mr *ibmr;
62 } RdmaBackendMR;
63 
64 typedef struct RdmaBackendCQ {
65     RdmaBackendDev *backend_dev;
66     struct ibv_cq *ibcq;
67 } RdmaBackendCQ;
68 
69 typedef struct RdmaBackendQP {
70     struct ibv_pd *ibpd;
71     struct ibv_qp *ibqp;
72     uint8_t sgid_idx;
73 } RdmaBackendQP;
74 
75 #endif
76