xref: /openbmc/qemu/hw/rdma/rdma_rm.h (revision 8dbbca5c)
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 
190efc9511SMichael S. Tsirkin #include "qapi/error.h"
20ef6d4ccdSYuval Shaia #include "rdma_backend_defs.h"
21ef6d4ccdSYuval Shaia #include "rdma_rm_defs.h"
22ef6d4ccdSYuval Shaia 
234d71b38aSYuval Shaia int rdma_rm_init(RdmaDeviceResources *dev_res,
244d71b38aSYuval Shaia                  struct ibv_device_attr *dev_attr);
252b05705dSYuval Shaia void rdma_rm_fini(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
262b05705dSYuval Shaia                   const char *ifname);
27ef6d4ccdSYuval Shaia 
28ef6d4ccdSYuval Shaia int rdma_rm_alloc_pd(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
29ef6d4ccdSYuval Shaia                      uint32_t *pd_handle, uint32_t ctx_handle);
30ef6d4ccdSYuval Shaia RdmaRmPD *rdma_rm_get_pd(RdmaDeviceResources *dev_res, uint32_t pd_handle);
31ef6d4ccdSYuval Shaia void rdma_rm_dealloc_pd(RdmaDeviceResources *dev_res, uint32_t pd_handle);
32ef6d4ccdSYuval Shaia 
33ef6d4ccdSYuval Shaia int rdma_rm_alloc_mr(RdmaDeviceResources *dev_res, uint32_t pd_handle,
344d71b38aSYuval Shaia                      uint64_t guest_start, uint64_t guest_length,
354d71b38aSYuval Shaia                      void *host_virt, int access_flags, uint32_t *mr_handle,
364d71b38aSYuval Shaia                      uint32_t *lkey, uint32_t *rkey);
37ef6d4ccdSYuval Shaia RdmaRmMR *rdma_rm_get_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle);
38ef6d4ccdSYuval Shaia void rdma_rm_dealloc_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle);
39ef6d4ccdSYuval Shaia 
40ef6d4ccdSYuval Shaia int rdma_rm_alloc_uc(RdmaDeviceResources *dev_res, uint32_t pfn,
41ef6d4ccdSYuval Shaia                      uint32_t *uc_handle);
42ef6d4ccdSYuval Shaia RdmaRmUC *rdma_rm_get_uc(RdmaDeviceResources *dev_res, uint32_t uc_handle);
43ef6d4ccdSYuval Shaia void rdma_rm_dealloc_uc(RdmaDeviceResources *dev_res, uint32_t uc_handle);
44ef6d4ccdSYuval Shaia 
45ef6d4ccdSYuval Shaia int rdma_rm_alloc_cq(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
46ef6d4ccdSYuval Shaia                      uint32_t cqe, uint32_t *cq_handle, void *opaque);
47ef6d4ccdSYuval Shaia RdmaRmCQ *rdma_rm_get_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle);
48ef6d4ccdSYuval Shaia void rdma_rm_req_notify_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle,
49ef6d4ccdSYuval Shaia                            bool notify);
50ef6d4ccdSYuval Shaia void rdma_rm_dealloc_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle);
51ef6d4ccdSYuval Shaia 
52ef6d4ccdSYuval Shaia int rdma_rm_alloc_qp(RdmaDeviceResources *dev_res, uint32_t pd_handle,
53ef6d4ccdSYuval Shaia                      uint8_t qp_type, uint32_t max_send_wr,
54ef6d4ccdSYuval Shaia                      uint32_t max_send_sge, uint32_t send_cq_handle,
55ef6d4ccdSYuval Shaia                      uint32_t max_recv_wr, uint32_t max_recv_sge,
568b42cfabSKamal Heib                      uint32_t recv_cq_handle, void *opaque, uint32_t *qpn,
578b42cfabSKamal Heib                      uint8_t is_srq, uint32_t srq_handle);
58ef6d4ccdSYuval Shaia RdmaRmQP *rdma_rm_get_qp(RdmaDeviceResources *dev_res, uint32_t qpn);
59ef6d4ccdSYuval Shaia int rdma_rm_modify_qp(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
602b05705dSYuval Shaia                       uint32_t qp_handle, uint32_t attr_mask, uint8_t sgid_idx,
61ef6d4ccdSYuval Shaia                       union ibv_gid *dgid, uint32_t dqpn,
62ef6d4ccdSYuval Shaia                       enum ibv_qp_state qp_state, uint32_t qkey,
63ef6d4ccdSYuval Shaia                       uint32_t rq_psn, uint32_t sq_psn);
64c99f2174SYuval Shaia int rdma_rm_query_qp(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
65c99f2174SYuval Shaia                      uint32_t qp_handle, struct ibv_qp_attr *attr,
66c99f2174SYuval Shaia                      int attr_mask, struct ibv_qp_init_attr *init_attr);
67ef6d4ccdSYuval Shaia void rdma_rm_dealloc_qp(RdmaDeviceResources *dev_res, uint32_t qp_handle);
68ef6d4ccdSYuval Shaia 
69cdc84058SKamal Heib RdmaRmSRQ *rdma_rm_get_srq(RdmaDeviceResources *dev_res, uint32_t srq_handle);
70cdc84058SKamal Heib int rdma_rm_alloc_srq(RdmaDeviceResources *dev_res, uint32_t pd_handle,
71cdc84058SKamal Heib                       uint32_t max_wr, uint32_t max_sge, uint32_t srq_limit,
72cdc84058SKamal Heib                       uint32_t *srq_handle, void *opaque);
73cdc84058SKamal Heib int rdma_rm_query_srq(RdmaDeviceResources *dev_res, uint32_t srq_handle,
74cdc84058SKamal Heib                       struct ibv_srq_attr *srq_attr);
75cdc84058SKamal Heib int rdma_rm_modify_srq(RdmaDeviceResources *dev_res, uint32_t srq_handle,
76cdc84058SKamal Heib                        struct ibv_srq_attr *srq_attr, int srq_attr_mask);
77cdc84058SKamal Heib void rdma_rm_dealloc_srq(RdmaDeviceResources *dev_res, uint32_t srq_handle);
78cdc84058SKamal Heib 
79ef6d4ccdSYuval Shaia int rdma_rm_alloc_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t *cqe_ctx_id,
80ef6d4ccdSYuval Shaia                           void *ctx);
81ef6d4ccdSYuval Shaia void *rdma_rm_get_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t cqe_ctx_id);
82ef6d4ccdSYuval Shaia void rdma_rm_dealloc_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t cqe_ctx_id);
83ef6d4ccdSYuval Shaia 
842b05705dSYuval Shaia int rdma_rm_add_gid(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
852b05705dSYuval Shaia                     const char *ifname, union ibv_gid *gid, int gid_idx);
862b05705dSYuval Shaia int rdma_rm_del_gid(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
872b05705dSYuval Shaia                     const char *ifname, int gid_idx);
882b05705dSYuval Shaia int rdma_rm_get_backend_gid_index(RdmaDeviceResources *dev_res,
892b05705dSYuval Shaia                                   RdmaBackendDev *backend_dev, int sgid_idx);
rdma_rm_get_gid(RdmaDeviceResources * dev_res,int sgid_idx)902b05705dSYuval Shaia static inline union ibv_gid *rdma_rm_get_gid(RdmaDeviceResources *dev_res,
912b05705dSYuval Shaia                                              int sgid_idx)
922b05705dSYuval Shaia {
9314c74f72SYuval Shaia     return &dev_res->port.gid_tbl[sgid_idx].gid;
942b05705dSYuval Shaia }
95*8dbbca5cSDaniel P. Berrangé void rdma_format_device_counters(RdmaDeviceResources *dev_res, GString *buf);
962b05705dSYuval Shaia 
97ef6d4ccdSYuval Shaia #endif
98