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