qemu/hw/rdma/rdma_rm_defs.h
<<
>>
Prefs
   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