aboutsummaryrefslogtreecommitdiffstats
path: root/hw/rdma/rdma_rm_defs.h
diff options
context:
space:
mode:
Diffstat (limited to 'hw/rdma/rdma_rm_defs.h')
-rw-r--r--hw/rdma/rdma_rm_defs.h146
1 files changed, 146 insertions, 0 deletions
diff --git a/hw/rdma/rdma_rm_defs.h b/hw/rdma/rdma_rm_defs.h
new file mode 100644
index 000000000..534f2f74d
--- /dev/null
+++ b/hw/rdma/rdma_rm_defs.h
@@ -0,0 +1,146 @@
+/*
+ * RDMA device: Definitions of Resource Manager 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_RM_DEFS_H
+#define RDMA_RM_DEFS_H
+
+#include "rdma_backend_defs.h"
+
+#define MAX_PORTS 1 /* Do not change - we support only one port */
+#define MAX_PORT_GIDS 255
+#define MAX_GIDS MAX_PORT_GIDS
+#define MAX_PORT_PKEYS 1
+#define MAX_PKEYS MAX_PORT_PKEYS
+#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_SRQ 512
+
+#define MAX_RM_TBL_NAME 16
+#define MAX_CONSEQ_EMPTY_POLL_CQ 4096 /* considered as error above this */
+
+typedef struct RdmaRmResTbl {
+ char name[MAX_RM_TBL_NAME];
+ QemuMutex lock;
+ unsigned long *bitmap;
+ size_t tbl_sz;
+ size_t res_sz;
+ void *tbl;
+ uint32_t used; /* number of used entries in the table */
+} RdmaRmResTbl;
+
+typedef struct RdmaRmPD {
+ RdmaBackendPD backend_pd;
+ uint32_t ctx_handle;
+} RdmaRmPD;
+
+typedef enum CQNotificationType {
+ CNT_CLEAR,
+ CNT_ARM,
+ CNT_SET,
+} CQNotificationType;
+
+typedef struct RdmaRmCQ {
+ RdmaBackendCQ backend_cq;
+ void *opaque;
+ CQNotificationType notify;
+} RdmaRmCQ;
+
+/* MR (DMA region) */
+typedef struct RdmaRmMR {
+ RdmaBackendMR backend_mr;
+ void *virt;
+ uint64_t start;
+ size_t length;
+ 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;
+ uint8_t is_srq;
+} RdmaRmQP;
+
+typedef struct RdmaRmSRQ {
+ RdmaBackendSRQ backend_srq;
+ uint32_t recv_cq_handle;
+ void *opaque;
+} RdmaRmSRQ;
+
+typedef struct RdmaRmGid {
+ union ibv_gid gid;
+ int backend_gid_index;
+} RdmaRmGid;
+
+typedef struct RdmaRmPort {
+ RdmaRmGid gid_tbl[MAX_PORT_GIDS];
+ enum ibv_port_state state;
+} RdmaRmPort;
+
+typedef struct RdmaRmStats {
+ uint64_t tx;
+ uint64_t tx_len;
+ uint64_t tx_err;
+ uint64_t rx_bufs;
+ uint64_t rx_bufs_len;
+ uint64_t rx_bufs_err;
+ uint64_t rx_srq;
+ uint64_t completions;
+ uint64_t mad_tx;
+ uint64_t mad_tx_err;
+ uint64_t mad_rx;
+ uint64_t mad_rx_err;
+ uint64_t mad_rx_bufs;
+ uint64_t mad_rx_bufs_err;
+ uint64_t poll_cq_from_bk;
+ uint64_t poll_cq_from_guest;
+ uint64_t poll_cq_from_guest_empty;
+ uint64_t poll_cq_ppoll_to;
+ uint32_t missing_cqe;
+} RdmaRmStats;
+
+struct RdmaDeviceResources {
+ RdmaRmPort port;
+ RdmaRmResTbl pd_tbl;
+ RdmaRmResTbl mr_tbl;
+ RdmaRmResTbl uc_tbl;
+ RdmaRmResTbl qp_tbl;
+ RdmaRmResTbl cq_tbl;
+ RdmaRmResTbl cqe_ctx_tbl;
+ RdmaRmResTbl srq_tbl;
+ GHashTable *qp_hash; /* Keeps mapping between real and emulated */
+ QemuMutex lock;
+ RdmaRmStats stats;
+};
+
+#endif