2 * RDMA device: Definitions of Resource Manager structures
4 * Copyright (C) 2018 Oracle
5 * Copyright (C) 2018 Red Hat Inc
8 * Yuval Shaia <yuval.shaia@oracle.com>
9 * Marcel Apfelbaum <marcel@redhat.com>
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.
16 #ifndef RDMA_RM_DEFS_H
17 #define RDMA_RM_DEFS_H
19 #include "rdma_backend_defs.h"
21 #define MAX_PORTS 1 /* Do not change - we support only one port */
22 #define MAX_PORT_GIDS 255
23 #define MAX_GIDS MAX_PORT_GIDS
24 #define MAX_PORT_PKEYS 1
25 #define MAX_PKEYS MAX_PORT_PKEYS
27 #define MAX_MR_SIZE (1UL << 27)
33 #define MAX_QP_RD_ATOM 16
34 #define MAX_QP_INIT_RD_ATOM 16
37 #define MAX_RM_TBL_NAME 16
38 #define MAX_CONSEQ_EMPTY_POLL_CQ 4096 /* considered as error above this */
40 typedef struct RdmaRmResTbl
{
41 char name
[MAX_RM_TBL_NAME
];
43 unsigned long *bitmap
;
47 uint32_t used
; /* number of used entries in the table */
50 typedef struct RdmaRmPD
{
51 RdmaBackendPD backend_pd
;
55 typedef enum CQNotificationType
{
61 typedef struct RdmaRmCQ
{
62 RdmaBackendCQ backend_cq
;
64 CQNotificationType notify
;
68 typedef struct RdmaRmMR
{
69 RdmaBackendMR backend_mr
;
78 typedef struct RdmaRmUC
{
82 typedef struct RdmaRmQP
{
83 RdmaBackendQP backend_qp
;
87 uint32_t send_cq_handle
;
88 uint32_t recv_cq_handle
;
89 enum ibv_qp_state qp_state
;
92 typedef struct RdmaRmGid
{
94 int backend_gid_index
;
97 typedef struct RdmaRmPort
{
98 RdmaRmGid gid_tbl
[MAX_PORT_GIDS
];
99 enum ibv_port_state state
;
102 typedef struct RdmaRmStats
{
107 uint64_t rx_bufs_len
;
108 uint64_t rx_bufs_err
;
109 uint64_t completions
;
114 uint64_t mad_rx_bufs
;
115 uint64_t mad_rx_bufs_err
;
116 uint64_t poll_cq_from_bk
;
117 uint64_t poll_cq_from_guest
;
118 uint64_t poll_cq_from_guest_empty
;
119 uint64_t poll_cq_ppoll_to
;
120 uint32_t missing_cqe
;
123 struct RdmaDeviceResources
{
130 RdmaRmResTbl cqe_ctx_tbl
;
131 GHashTable
*qp_hash
; /* Keeps mapping between real and emulated */