rdma_rm.h 4.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * RDMA device: Definitions of Resource Manager functions
  3. *
  4. * Copyright (C) 2018 Oracle
  5. * Copyright (C) 2018 Red Hat Inc
  6. *
  7. * Authors:
  8. * Yuval Shaia <yuval.shaia@oracle.com>
  9. * Marcel Apfelbaum <marcel@redhat.com>
  10. *
  11. * This work is licensed under the terms of the GNU GPL, version 2 or later.
  12. * See the COPYING file in the top-level directory.
  13. *
  14. */
  15. #ifndef RDMA_RM_H
  16. #define RDMA_RM_H
  17. #include "qapi/error.h"
  18. #include "rdma_backend_defs.h"
  19. #include "rdma_rm_defs.h"
  20. int rdma_rm_init(RdmaDeviceResources *dev_res,
  21. struct ibv_device_attr *dev_attr);
  22. void rdma_rm_fini(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
  23. const char *ifname);
  24. int rdma_rm_alloc_pd(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
  25. uint32_t *pd_handle, uint32_t ctx_handle);
  26. RdmaRmPD *rdma_rm_get_pd(RdmaDeviceResources *dev_res, uint32_t pd_handle);
  27. void rdma_rm_dealloc_pd(RdmaDeviceResources *dev_res, uint32_t pd_handle);
  28. int rdma_rm_alloc_mr(RdmaDeviceResources *dev_res, uint32_t pd_handle,
  29. uint64_t guest_start, uint64_t guest_length,
  30. void *host_virt, int access_flags, uint32_t *mr_handle,
  31. uint32_t *lkey, uint32_t *rkey);
  32. RdmaRmMR *rdma_rm_get_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle);
  33. void rdma_rm_dealloc_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle);
  34. int rdma_rm_alloc_uc(RdmaDeviceResources *dev_res, uint32_t pfn,
  35. uint32_t *uc_handle);
  36. RdmaRmUC *rdma_rm_get_uc(RdmaDeviceResources *dev_res, uint32_t uc_handle);
  37. void rdma_rm_dealloc_uc(RdmaDeviceResources *dev_res, uint32_t uc_handle);
  38. int rdma_rm_alloc_cq(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
  39. uint32_t cqe, uint32_t *cq_handle, void *opaque);
  40. RdmaRmCQ *rdma_rm_get_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle);
  41. void rdma_rm_req_notify_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle,
  42. bool notify);
  43. void rdma_rm_dealloc_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle);
  44. int rdma_rm_alloc_qp(RdmaDeviceResources *dev_res, uint32_t pd_handle,
  45. uint8_t qp_type, uint32_t max_send_wr,
  46. uint32_t max_send_sge, uint32_t send_cq_handle,
  47. uint32_t max_recv_wr, uint32_t max_recv_sge,
  48. uint32_t recv_cq_handle, void *opaque, uint32_t *qpn,
  49. uint8_t is_srq, uint32_t srq_handle);
  50. RdmaRmQP *rdma_rm_get_qp(RdmaDeviceResources *dev_res, uint32_t qpn);
  51. int rdma_rm_modify_qp(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
  52. uint32_t qp_handle, uint32_t attr_mask, uint8_t sgid_idx,
  53. union ibv_gid *dgid, uint32_t dqpn,
  54. enum ibv_qp_state qp_state, uint32_t qkey,
  55. uint32_t rq_psn, uint32_t sq_psn);
  56. int rdma_rm_query_qp(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
  57. uint32_t qp_handle, struct ibv_qp_attr *attr,
  58. int attr_mask, struct ibv_qp_init_attr *init_attr);
  59. void rdma_rm_dealloc_qp(RdmaDeviceResources *dev_res, uint32_t qp_handle);
  60. RdmaRmSRQ *rdma_rm_get_srq(RdmaDeviceResources *dev_res, uint32_t srq_handle);
  61. int rdma_rm_alloc_srq(RdmaDeviceResources *dev_res, uint32_t pd_handle,
  62. uint32_t max_wr, uint32_t max_sge, uint32_t srq_limit,
  63. uint32_t *srq_handle, void *opaque);
  64. int rdma_rm_query_srq(RdmaDeviceResources *dev_res, uint32_t srq_handle,
  65. struct ibv_srq_attr *srq_attr);
  66. int rdma_rm_modify_srq(RdmaDeviceResources *dev_res, uint32_t srq_handle,
  67. struct ibv_srq_attr *srq_attr, int srq_attr_mask);
  68. void rdma_rm_dealloc_srq(RdmaDeviceResources *dev_res, uint32_t srq_handle);
  69. int rdma_rm_alloc_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t *cqe_ctx_id,
  70. void *ctx);
  71. void *rdma_rm_get_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t cqe_ctx_id);
  72. void rdma_rm_dealloc_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t cqe_ctx_id);
  73. int rdma_rm_add_gid(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
  74. const char *ifname, union ibv_gid *gid, int gid_idx);
  75. int rdma_rm_del_gid(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
  76. const char *ifname, int gid_idx);
  77. int rdma_rm_get_backend_gid_index(RdmaDeviceResources *dev_res,
  78. RdmaBackendDev *backend_dev, int sgid_idx);
  79. static inline union ibv_gid *rdma_rm_get_gid(RdmaDeviceResources *dev_res,
  80. int sgid_idx)
  81. {
  82. return &dev_res->port.gid_tbl[sgid_idx].gid;
  83. }
  84. void rdma_dump_device_counters(Monitor *mon, RdmaDeviceResources *dev_res);
  85. #endif