/* * RDMA device: Definitions of Resource Manager 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_RM_DEFS_H #define RDMA_RM_DEFS_H #include "rdma_backend_defs.h" #define MAX_PORTS 1 #define MAX_PORT_GIDS 1 #define MAX_PORT_PKEYS 1 #define MAX_PKEYS 1 #define MAX_GIDS 2048 #define MAX_UCS 512 #define MAX_MR_SIZE (1UL << 27) #define MAX_QP 1024 #define MAX_SGE 4 #define MAX_CQ 2048 #define MAX_MR 1024 #define MAX_PD 1024 #define MAX_QP_RD_ATOM 16 #define MAX_QP_INIT_RD_ATOM 16 #define MAX_AH 64 #define MAX_RMRESTBL_NAME_SZ 16 typedef struct RdmaRmResTbl { char name[MAX_RMRESTBL_NAME_SZ]; QemuMutex lock; unsigned long *bitmap; size_t tbl_sz; size_t res_sz; void *tbl; } RdmaRmResTbl; typedef struct RdmaRmPD { RdmaBackendPD backend_pd; uint32_t ctx_handle; } RdmaRmPD; typedef struct RdmaRmCQ { RdmaBackendCQ backend_cq; void *opaque; bool notify; } RdmaRmCQ; typedef struct RdmaRmUserMR { void *host_virt; uint64_t guest_start; size_t length; } RdmaRmUserMR; /* MR (DMA region) */ typedef struct RdmaRmMR { RdmaBackendMR backend_mr; RdmaRmUserMR user_mr; uint32_t pd_handle; uint32_t lkey; uint32_t rkey; } RdmaRmMR; typedef struct RdmaRmUC { uint64_t uc_handle; } RdmaRmUC; typedef struct RdmaRmQP { RdmaBackendQP backend_qp; void *opaque; uint32_t qp_type; uint32_t qpn; uint32_t send_cq_handle; uint32_t recv_cq_handle; enum ibv_qp_state qp_state; } RdmaRmQP; typedef struct RdmaRmPort { union ibv_gid gid_tbl[MAX_PORT_GIDS]; enum ibv_port_state state; int *pkey_tbl; /* TODO: Not yet supported */ } RdmaRmPort; typedef struct RdmaDeviceResources { RdmaRmPort ports[MAX_PORTS]; RdmaRmResTbl pd_tbl; RdmaRmResTbl mr_tbl; RdmaRmResTbl uc_tbl; RdmaRmResTbl qp_tbl; RdmaRmResTbl cq_tbl; RdmaRmResTbl cqe_ctx_tbl; GHashTable *qp_hash; /* Keeps mapping between real and emulated */ } RdmaDeviceResources; #endif