xref: /openbmc/qemu/hw/rdma/rdma_rm.h (revision 0efc9511)
1ef6d4ccdSYuval Shaia /*
2ef6d4ccdSYuval Shaia  * RDMA device: Definitions of Resource Manager functions
3ef6d4ccdSYuval Shaia  *
4ef6d4ccdSYuval Shaia  * Copyright (C) 2018 Oracle
5ef6d4ccdSYuval Shaia  * Copyright (C) 2018 Red Hat Inc
6ef6d4ccdSYuval Shaia  *
7ef6d4ccdSYuval Shaia  * Authors:
8ef6d4ccdSYuval Shaia  *     Yuval Shaia <yuval.shaia@oracle.com>
9ef6d4ccdSYuval Shaia  *     Marcel Apfelbaum <marcel@redhat.com>
10ef6d4ccdSYuval Shaia  *
11ef6d4ccdSYuval Shaia  * This work is licensed under the terms of the GNU GPL, version 2 or later.
12ef6d4ccdSYuval Shaia  * See the COPYING file in the top-level directory.
13ef6d4ccdSYuval Shaia  *
14ef6d4ccdSYuval Shaia  */
15ef6d4ccdSYuval Shaia 
16ef6d4ccdSYuval Shaia #ifndef RDMA_RM_H
17ef6d4ccdSYuval Shaia #define RDMA_RM_H
18ef6d4ccdSYuval Shaia 
19*0efc9511SMichael S. Tsirkin #include "qapi/error.h"
20ef6d4ccdSYuval Shaia #include "rdma_backend_defs.h"
21ef6d4ccdSYuval Shaia #include "rdma_rm_defs.h"
22ef6d4ccdSYuval Shaia 
23ef6d4ccdSYuval Shaia int rdma_rm_init(RdmaDeviceResources *dev_res, struct ibv_device_attr *dev_attr,
24ef6d4ccdSYuval Shaia                  Error **errp);
25ef6d4ccdSYuval Shaia void rdma_rm_fini(RdmaDeviceResources *dev_res);
26ef6d4ccdSYuval Shaia 
27ef6d4ccdSYuval Shaia int rdma_rm_alloc_pd(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
28ef6d4ccdSYuval Shaia                      uint32_t *pd_handle, uint32_t ctx_handle);
29ef6d4ccdSYuval Shaia RdmaRmPD *rdma_rm_get_pd(RdmaDeviceResources *dev_res, uint32_t pd_handle);
30ef6d4ccdSYuval Shaia void rdma_rm_dealloc_pd(RdmaDeviceResources *dev_res, uint32_t pd_handle);
31ef6d4ccdSYuval Shaia 
32ef6d4ccdSYuval Shaia int rdma_rm_alloc_mr(RdmaDeviceResources *dev_res, uint32_t pd_handle,
33ef6d4ccdSYuval Shaia                      uint64_t guest_start, size_t guest_length, void *host_virt,
34ef6d4ccdSYuval Shaia                      int access_flags, uint32_t *mr_handle, uint32_t *lkey,
35ef6d4ccdSYuval Shaia                      uint32_t *rkey);
36ef6d4ccdSYuval Shaia RdmaRmMR *rdma_rm_get_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle);
37ef6d4ccdSYuval Shaia void rdma_rm_dealloc_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle);
38ef6d4ccdSYuval Shaia 
39ef6d4ccdSYuval Shaia int rdma_rm_alloc_uc(RdmaDeviceResources *dev_res, uint32_t pfn,
40ef6d4ccdSYuval Shaia                      uint32_t *uc_handle);
41ef6d4ccdSYuval Shaia RdmaRmUC *rdma_rm_get_uc(RdmaDeviceResources *dev_res, uint32_t uc_handle);
42ef6d4ccdSYuval Shaia void rdma_rm_dealloc_uc(RdmaDeviceResources *dev_res, uint32_t uc_handle);
43ef6d4ccdSYuval Shaia 
44ef6d4ccdSYuval Shaia int rdma_rm_alloc_cq(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
45ef6d4ccdSYuval Shaia                      uint32_t cqe, uint32_t *cq_handle, void *opaque);
46ef6d4ccdSYuval Shaia RdmaRmCQ *rdma_rm_get_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle);
47ef6d4ccdSYuval Shaia void rdma_rm_req_notify_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle,
48ef6d4ccdSYuval Shaia                            bool notify);
49ef6d4ccdSYuval Shaia void rdma_rm_dealloc_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle);
50ef6d4ccdSYuval Shaia 
51ef6d4ccdSYuval Shaia int rdma_rm_alloc_qp(RdmaDeviceResources *dev_res, uint32_t pd_handle,
52ef6d4ccdSYuval Shaia                      uint8_t qp_type, uint32_t max_send_wr,
53ef6d4ccdSYuval Shaia                      uint32_t max_send_sge, uint32_t send_cq_handle,
54ef6d4ccdSYuval Shaia                      uint32_t max_recv_wr, uint32_t max_recv_sge,
55ef6d4ccdSYuval Shaia                      uint32_t recv_cq_handle, void *opaque, uint32_t *qpn);
56ef6d4ccdSYuval Shaia RdmaRmQP *rdma_rm_get_qp(RdmaDeviceResources *dev_res, uint32_t qpn);
57ef6d4ccdSYuval Shaia int rdma_rm_modify_qp(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
58ef6d4ccdSYuval Shaia                       uint32_t qp_handle, uint32_t attr_mask,
59ef6d4ccdSYuval Shaia                       union ibv_gid *dgid, uint32_t dqpn,
60ef6d4ccdSYuval Shaia                       enum ibv_qp_state qp_state, uint32_t qkey,
61ef6d4ccdSYuval Shaia                       uint32_t rq_psn, uint32_t sq_psn);
62c99f2174SYuval Shaia int rdma_rm_query_qp(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
63c99f2174SYuval Shaia                      uint32_t qp_handle, struct ibv_qp_attr *attr,
64c99f2174SYuval Shaia                      int attr_mask, struct ibv_qp_init_attr *init_attr);
65ef6d4ccdSYuval Shaia void rdma_rm_dealloc_qp(RdmaDeviceResources *dev_res, uint32_t qp_handle);
66ef6d4ccdSYuval Shaia 
67ef6d4ccdSYuval Shaia int rdma_rm_alloc_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t *cqe_ctx_id,
68ef6d4ccdSYuval Shaia                           void *ctx);
69ef6d4ccdSYuval Shaia void *rdma_rm_get_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t cqe_ctx_id);
70ef6d4ccdSYuval Shaia void rdma_rm_dealloc_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t cqe_ctx_id);
71ef6d4ccdSYuval Shaia 
72ef6d4ccdSYuval Shaia #endif
73