Merge remote-tracking branch 'remotes/dgilbert-gitlab/tags/pull-migration-20210726a...
[qemu/armbru.git] / hw / rdma / rdma_backend_defs.h
blob4e6c0ad695c8e174792eda6c6388689fe354e235
1 /*
2 * RDMA device: Definitions of Backend Device structures
4 * Copyright (C) 2018 Oracle
5 * Copyright (C) 2018 Red Hat Inc
7 * Authors:
8 * Yuval Shaia <yuval.shaia@oracle.com>
9 * Marcel Apfelbaum <marcel@redhat.com>
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.
16 #ifndef RDMA_BACKEND_DEFS_H
17 #define RDMA_BACKEND_DEFS_H
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"
25 typedef struct RdmaDeviceResources RdmaDeviceResources;
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;
33 typedef struct RdmaCmMux {
34 CharBackend *chr_be;
35 int can_receive;
36 } RdmaCmMux;
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 RdmaProtectedGQueue recv_mads_list;
47 RdmaCmMux rdmacm_mux;
48 } RdmaBackendDev;
50 typedef struct RdmaBackendPD {
51 struct ibv_pd *ibpd;
52 } RdmaBackendPD;
54 typedef struct RdmaBackendMR {
55 struct ibv_pd *ibpd;
56 struct ibv_mr *ibmr;
57 } RdmaBackendMR;
59 typedef struct RdmaBackendCQ {
60 RdmaBackendDev *backend_dev;
61 struct ibv_cq *ibcq;
62 } RdmaBackendCQ;
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;
71 typedef struct RdmaBackendSRQ {
72 struct ibv_srq *ibsrq;
73 RdmaProtectedGSList cqe_ctx_list;
74 } RdmaBackendSRQ;
76 #endif