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