/* * RDMA device: Definitions of Backend Device structures * * Copyright (C) 2018 Oracle * Copyright (C) 2018 Red Hat Inc * * Authors: * Yuval Shaia * Marcel Apfelbaum * * This work is licensed under the terms of the GNU GPL, version 2 or later. * See the COPYING file in the top-level directory. * */ #ifndef RDMA_BACKEND_DEFS_H #define RDMA_BACKEND_DEFS_H #include "qemu/thread.h" #include "chardev/char-fe.h" #include #include "contrib/rdmacm-mux/rdmacm-mux.h" #include "rdma_utils.h" typedef struct RdmaDeviceResources RdmaDeviceResources; typedef struct RdmaBackendThread { QemuThread thread; QemuMutex mutex; bool run; /* Set by thread manager to let thread know it should exit */ bool is_running; /* Set by the thread to report its status */ } RdmaBackendThread; typedef struct RdmaCmMux { CharBackend *chr_be; int can_receive; } RdmaCmMux; typedef struct RdmaBackendDev { RdmaBackendThread comp_thread; PCIDevice *dev; RdmaDeviceResources *rdma_dev_res; struct ibv_device *ib_dev; struct ibv_context *context; struct ibv_comp_channel *channel; uint8_t port_num; RdmaProtectedQList recv_mads_list; RdmaCmMux rdmacm_mux; } RdmaBackendDev; typedef struct RdmaBackendPD { struct ibv_pd *ibpd; } RdmaBackendPD; typedef struct RdmaBackendMR { struct ibv_pd *ibpd; struct ibv_mr *ibmr; } RdmaBackendMR; typedef struct RdmaBackendCQ { RdmaBackendDev *backend_dev; struct ibv_cq *ibcq; } RdmaBackendCQ; typedef struct RdmaBackendQP { struct ibv_pd *ibpd; struct ibv_qp *ibqp; uint8_t sgid_idx; } RdmaBackendQP; #endif