1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#ifndef RDMA_RM_H
17#define RDMA_RM_H
18
19#include "qapi/error.h"
20#include "rdma_backend_defs.h"
21#include "rdma_rm_defs.h"
22
23int rdma_rm_init(RdmaDeviceResources *dev_res, struct ibv_device_attr *dev_attr,
24 Error **errp);
25void rdma_rm_fini(RdmaDeviceResources *dev_res);
26
27int rdma_rm_alloc_pd(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
28 uint32_t *pd_handle, uint32_t ctx_handle);
29RdmaRmPD *rdma_rm_get_pd(RdmaDeviceResources *dev_res, uint32_t pd_handle);
30void rdma_rm_dealloc_pd(RdmaDeviceResources *dev_res, uint32_t pd_handle);
31
32int rdma_rm_alloc_mr(RdmaDeviceResources *dev_res, uint32_t pd_handle,
33 uint64_t guest_start, size_t guest_length, void *host_virt,
34 int access_flags, uint32_t *mr_handle, uint32_t *lkey,
35 uint32_t *rkey);
36RdmaRmMR *rdma_rm_get_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle);
37void rdma_rm_dealloc_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle);
38
39int rdma_rm_alloc_uc(RdmaDeviceResources *dev_res, uint32_t pfn,
40 uint32_t *uc_handle);
41RdmaRmUC *rdma_rm_get_uc(RdmaDeviceResources *dev_res, uint32_t uc_handle);
42void rdma_rm_dealloc_uc(RdmaDeviceResources *dev_res, uint32_t uc_handle);
43
44int rdma_rm_alloc_cq(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
45 uint32_t cqe, uint32_t *cq_handle, void *opaque);
46RdmaRmCQ *rdma_rm_get_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle);
47void rdma_rm_req_notify_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle,
48 bool notify);
49void rdma_rm_dealloc_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle);
50
51int rdma_rm_alloc_qp(RdmaDeviceResources *dev_res, uint32_t pd_handle,
52 uint8_t qp_type, uint32_t max_send_wr,
53 uint32_t max_send_sge, uint32_t send_cq_handle,
54 uint32_t max_recv_wr, uint32_t max_recv_sge,
55 uint32_t recv_cq_handle, void *opaque, uint32_t *qpn);
56RdmaRmQP *rdma_rm_get_qp(RdmaDeviceResources *dev_res, uint32_t qpn);
57int rdma_rm_modify_qp(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
58 uint32_t qp_handle, uint32_t attr_mask,
59 union ibv_gid *dgid, uint32_t dqpn,
60 enum ibv_qp_state qp_state, uint32_t qkey,
61 uint32_t rq_psn, uint32_t sq_psn);
62int rdma_rm_query_qp(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
63 uint32_t qp_handle, struct ibv_qp_attr *attr,
64 int attr_mask, struct ibv_qp_init_attr *init_attr);
65void rdma_rm_dealloc_qp(RdmaDeviceResources *dev_res, uint32_t qp_handle);
66
67int rdma_rm_alloc_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t *cqe_ctx_id,
68 void *ctx);
69void *rdma_rm_get_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t cqe_ctx_id);
70void rdma_rm_dealloc_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t cqe_ctx_id);
71
72#endif
73