qemu/queue.h: leave head structs anonymous unless necessary
[qemu/ar7.git] / hw / rdma / rdma_rm.h
blob3c602c04c0a4f2cd6a679408be5dcf6265006001
1 /*
2 * RDMA device: Definitions of Resource Manager functions
4 * Copyright (C) 2018 Oracle
5 * Copyright (C) 2018 Red Hat Inc
7 * Authors:
8 * Yuval Shaia <yuval.shaia@oracle.com>
9 * Marcel Apfelbaum <marcel@redhat.com>
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.
16 #ifndef RDMA_RM_H
17 #define RDMA_RM_H
19 #include "qapi/error.h"
20 #include "rdma_backend_defs.h"
21 #include "rdma_rm_defs.h"
23 int rdma_rm_init(RdmaDeviceResources *dev_res, struct ibv_device_attr *dev_attr,
24 Error **errp);
25 void rdma_rm_fini(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
26 const char *ifname);
28 int rdma_rm_alloc_pd(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
29 uint32_t *pd_handle, uint32_t ctx_handle);
30 RdmaRmPD *rdma_rm_get_pd(RdmaDeviceResources *dev_res, uint32_t pd_handle);
31 void rdma_rm_dealloc_pd(RdmaDeviceResources *dev_res, uint32_t pd_handle);
33 int rdma_rm_alloc_mr(RdmaDeviceResources *dev_res, uint32_t pd_handle,
34 uint64_t guest_start, size_t guest_length, void *host_virt,
35 int access_flags, uint32_t *mr_handle, uint32_t *lkey,
36 uint32_t *rkey);
37 RdmaRmMR *rdma_rm_get_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle);
38 void rdma_rm_dealloc_mr(RdmaDeviceResources *dev_res, uint32_t mr_handle);
40 int rdma_rm_alloc_uc(RdmaDeviceResources *dev_res, uint32_t pfn,
41 uint32_t *uc_handle);
42 RdmaRmUC *rdma_rm_get_uc(RdmaDeviceResources *dev_res, uint32_t uc_handle);
43 void rdma_rm_dealloc_uc(RdmaDeviceResources *dev_res, uint32_t uc_handle);
45 int rdma_rm_alloc_cq(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
46 uint32_t cqe, uint32_t *cq_handle, void *opaque);
47 RdmaRmCQ *rdma_rm_get_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle);
48 void rdma_rm_req_notify_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle,
49 bool notify);
50 void rdma_rm_dealloc_cq(RdmaDeviceResources *dev_res, uint32_t cq_handle);
52 int rdma_rm_alloc_qp(RdmaDeviceResources *dev_res, uint32_t pd_handle,
53 uint8_t qp_type, uint32_t max_send_wr,
54 uint32_t max_send_sge, uint32_t send_cq_handle,
55 uint32_t max_recv_wr, uint32_t max_recv_sge,
56 uint32_t recv_cq_handle, void *opaque, uint32_t *qpn);
57 RdmaRmQP *rdma_rm_get_qp(RdmaDeviceResources *dev_res, uint32_t qpn);
58 int rdma_rm_modify_qp(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
59 uint32_t qp_handle, uint32_t attr_mask, uint8_t sgid_idx,
60 union ibv_gid *dgid, uint32_t dqpn,
61 enum ibv_qp_state qp_state, uint32_t qkey,
62 uint32_t rq_psn, uint32_t sq_psn);
63 int rdma_rm_query_qp(RdmaDeviceResources *dev_res, RdmaBackendDev *backend_dev,
64 uint32_t qp_handle, struct ibv_qp_attr *attr,
65 int attr_mask, struct ibv_qp_init_attr *init_attr);
66 void rdma_rm_dealloc_qp(RdmaDeviceResources *dev_res, uint32_t qp_handle);
68 int rdma_rm_alloc_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t *cqe_ctx_id,
69 void *ctx);
70 void *rdma_rm_get_cqe_ctx(RdmaDeviceResources *dev_res, uint32_t cqe_ctx_id);
71 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)
82 return &dev_res->port.gid_tbl[sgid_idx].gid;
85 #endif