|  | /* | 
|  | *  RDMA device: Definitions of Backend Device structures | 
|  | * | 
|  | * Copyright (C) 2018 Oracle | 
|  | * Copyright (C) 2018 Red Hat Inc | 
|  | * | 
|  | * Authors: | 
|  | *     Yuval Shaia <yuval.shaia@oracle.com> | 
|  | *     Marcel Apfelbaum <marcel@redhat.com> | 
|  | * | 
|  | * 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 <infiniband/verbs.h> | 
|  | #include "contrib/rdmacm-mux/rdmacm-mux.h" | 
|  | #include "rdma_utils.h" | 
|  |  | 
|  | typedef struct RdmaDeviceResources RdmaDeviceResources; | 
|  |  | 
|  | typedef struct RdmaBackendThread { | 
|  | QemuThread thread; | 
|  | 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; | 
|  | RdmaProtectedGQueue 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; | 
|  | RdmaProtectedGSList cqe_ctx_list; | 
|  | } RdmaBackendQP; | 
|  |  | 
|  | typedef struct RdmaBackendSRQ { | 
|  | struct ibv_srq *ibsrq; | 
|  | RdmaProtectedGSList cqe_ctx_list; | 
|  | } RdmaBackendSRQ; | 
|  |  | 
|  | #endif |