1/* 2 * RDMA device: Definitions of Resource Manager 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_RM_DEFS_H 17#define RDMA_RM_DEFS_H 18 19#include "rdma_backend_defs.h" 20 21#define MAX_PORTS 1 22#define MAX_PORT_GIDS 1 23#define MAX_PORT_PKEYS 1 24#define MAX_PKEYS 1 25#define MAX_GIDS 2048 26#define MAX_UCS 512 27#define MAX_MR_SIZE (1UL << 27) 28#define MAX_QP 1024 29#define MAX_SGE 4 30#define MAX_CQ 2048 31#define MAX_MR 1024 32#define MAX_PD 1024 33#define MAX_QP_RD_ATOM 16 34#define MAX_QP_INIT_RD_ATOM 16 35#define MAX_AH 64 36 37#define MAX_RMRESTBL_NAME_SZ 16 38typedef struct RdmaRmResTbl { 39 char name[MAX_RMRESTBL_NAME_SZ]; 40 QemuMutex lock; 41 unsigned long *bitmap; 42 size_t tbl_sz; 43 size_t res_sz; 44 void *tbl; 45} RdmaRmResTbl; 46 47typedef struct RdmaRmPD { 48 RdmaBackendPD backend_pd; 49 uint32_t ctx_handle; 50} RdmaRmPD; 51 52typedef struct RdmaRmCQ { 53 RdmaBackendCQ backend_cq; 54 void *opaque; 55 bool notify; 56} RdmaRmCQ; 57 58typedef struct RdmaRmUserMR { 59 void *host_virt; 60 uint64_t guest_start; 61 size_t length; 62} RdmaRmUserMR; 63 64/* MR (DMA region) */ 65typedef struct RdmaRmMR { 66 RdmaBackendMR backend_mr; 67 RdmaRmUserMR user_mr; 68 uint32_t pd_handle; 69 uint32_t lkey; 70 uint32_t rkey; 71} RdmaRmMR; 72 73typedef struct RdmaRmUC { 74 uint64_t uc_handle; 75} RdmaRmUC; 76 77typedef struct RdmaRmQP { 78 RdmaBackendQP backend_qp; 79 void *opaque; 80 uint32_t qp_type; 81 uint32_t qpn; 82 uint32_t send_cq_handle; 83 uint32_t recv_cq_handle; 84 enum ibv_qp_state qp_state; 85} RdmaRmQP; 86 87typedef struct RdmaRmPort { 88 union ibv_gid gid_tbl[MAX_PORT_GIDS]; 89 enum ibv_port_state state; 90 int *pkey_tbl; /* TODO: Not yet supported */ 91} RdmaRmPort; 92 93typedef struct RdmaDeviceResources { 94 RdmaRmPort ports[MAX_PORTS]; 95 RdmaRmResTbl pd_tbl; 96 RdmaRmResTbl mr_tbl; 97 RdmaRmResTbl uc_tbl; 98 RdmaRmResTbl qp_tbl; 99 RdmaRmResTbl cq_tbl; 100 RdmaRmResTbl cqe_ctx_tbl; 101 GHashTable *qp_hash; /* Keeps mapping between real and emulated */ 102} RdmaDeviceResources; 103 104#endif 105