rdma_backend_defs.h (1842B)
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 25typedef struct RdmaDeviceResources RdmaDeviceResources; 26 27typedef 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 33typedef struct RdmaCmMux { 34 CharBackend *chr_be; 35 int can_receive; 36} RdmaCmMux; 37 38typedef 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; 49 50typedef struct RdmaBackendPD { 51 struct ibv_pd *ibpd; 52} RdmaBackendPD; 53 54typedef struct RdmaBackendMR { 55 struct ibv_pd *ibpd; 56 struct ibv_mr *ibmr; 57} RdmaBackendMR; 58 59typedef struct RdmaBackendCQ { 60 RdmaBackendDev *backend_dev; 61 struct ibv_cq *ibcq; 62} RdmaBackendCQ; 63 64typedef 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 71typedef struct RdmaBackendSRQ { 72 struct ibv_srq *ibsrq; 73 RdmaProtectedGSList cqe_ctx_list; 74} RdmaBackendSRQ; 75 76#endif