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, 56*8b42cfabSKamal Heib uint32_t recv_cq_handle, void *opaque, uint32_t *qpn, 57*8b42cfabSKamal 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); 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 } 95f4b2c02aSYuval Shaia void rdma_dump_device_counters(Monitor *mon, RdmaDeviceResources *dev_res); 962b05705dSYuval Shaia 97ef6d4ccdSYuval Shaia #endif 98