]>
Commit | Line | Data |
---|---|---|
ef6d4ccd YS |
1 | /* |
2 | * RDMA device: Definitions of Backend Device functions | |
3 | * | |
4 | * Copyright (C) 2018 Oracle | |
5 | * Copyright (C) 2018 Red Hat Inc | |
6 | * | |
7 | * Authors: | |
8 | * Yuval Shaia <[email protected]> | |
9 | * Marcel Apfelbaum <[email protected]> | |
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 | ||
16 | #ifndef RDMA_BACKEND_H | |
17 | #define RDMA_BACKEND_H | |
18 | ||
0efc9511 | 19 | #include "qapi/error.h" |
605ec166 YS |
20 | #include "chardev/char-fe.h" |
21 | ||
ef6d4ccd YS |
22 | #include "rdma_rm_defs.h" |
23 | #include "rdma_backend_defs.h" | |
24 | ||
ffef4775 YS |
25 | /* Vendor Errors */ |
26 | #define VENDOR_ERR_FAIL_BACKEND 0x201 | |
27 | #define VENDOR_ERR_TOO_MANY_SGES 0x202 | |
28 | #define VENDOR_ERR_NOMEM 0x203 | |
29 | #define VENDOR_ERR_QP0 0x204 | |
30 | #define VENDOR_ERR_INV_NUM_SGE 0x205 | |
31 | #define VENDOR_ERR_MAD_SEND 0x206 | |
32 | #define VENDOR_ERR_INVLKEY 0x207 | |
33 | #define VENDOR_ERR_MR_SMALL 0x208 | |
34 | #define VENDOR_ERR_INV_MAD_BUFF 0x209 | |
35 | ||
ef6d4ccd YS |
36 | /* Add definition for QP0 and QP1 as there is no userspace enums for them */ |
37 | enum ibv_special_qp_type { | |
38 | IBV_QPT_SMI = 0, | |
39 | IBV_QPT_GSI = 1, | |
40 | }; | |
41 | ||
ef6d4ccd YS |
42 | static inline uint32_t rdma_backend_qpn(const RdmaBackendQP *qp) |
43 | { | |
46462cb1 | 44 | return qp->ibqp ? qp->ibqp->qp_num : 1; |
ef6d4ccd YS |
45 | } |
46 | ||
47 | static inline uint32_t rdma_backend_mr_lkey(const RdmaBackendMR *mr) | |
48 | { | |
49 | return mr->ibmr ? mr->ibmr->lkey : 0; | |
50 | } | |
51 | ||
52 | static inline uint32_t rdma_backend_mr_rkey(const RdmaBackendMR *mr) | |
53 | { | |
54 | return mr->ibmr ? mr->ibmr->rkey : 0; | |
55 | } | |
56 | ||
430e440c | 57 | int rdma_backend_init(RdmaBackendDev *backend_dev, PCIDevice *pdev, |
ef6d4ccd YS |
58 | RdmaDeviceResources *rdma_dev_res, |
59 | const char *backend_device_name, uint8_t port_num, | |
2b05705d YS |
60 | struct ibv_device_attr *dev_attr, CharBackend *mad_chr_be, |
61 | Error **errp); | |
ef6d4ccd | 62 | void rdma_backend_fini(RdmaBackendDev *backend_dev); |
2b05705d YS |
63 | int rdma_backend_add_gid(RdmaBackendDev *backend_dev, const char *ifname, |
64 | union ibv_gid *gid); | |
65 | int rdma_backend_del_gid(RdmaBackendDev *backend_dev, const char *ifname, | |
66 | union ibv_gid *gid); | |
67 | int rdma_backend_get_gid_index(RdmaBackendDev *backend_dev, | |
68 | union ibv_gid *gid); | |
75152227 YS |
69 | void rdma_backend_start(RdmaBackendDev *backend_dev); |
70 | void rdma_backend_stop(RdmaBackendDev *backend_dev); | |
eaac0100 YS |
71 | void rdma_backend_register_comp_handler(void (*handler)(void *ctx, |
72 | struct ibv_wc *wc)); | |
ef6d4ccd YS |
73 | void rdma_backend_unregister_comp_handler(void); |
74 | ||
75 | int rdma_backend_query_port(RdmaBackendDev *backend_dev, | |
76 | struct ibv_port_attr *port_attr); | |
77 | int rdma_backend_create_pd(RdmaBackendDev *backend_dev, RdmaBackendPD *pd); | |
78 | void rdma_backend_destroy_pd(RdmaBackendPD *pd); | |
79 | ||
9bbb8d35 | 80 | int rdma_backend_create_mr(RdmaBackendMR *mr, RdmaBackendPD *pd, void *addr, |
ef6d4ccd YS |
81 | size_t length, int access); |
82 | void rdma_backend_destroy_mr(RdmaBackendMR *mr); | |
83 | ||
84 | int rdma_backend_create_cq(RdmaBackendDev *backend_dev, RdmaBackendCQ *cq, | |
85 | int cqe); | |
86 | void rdma_backend_destroy_cq(RdmaBackendCQ *cq); | |
87 | void rdma_backend_poll_cq(RdmaDeviceResources *rdma_dev_res, RdmaBackendCQ *cq); | |
88 | ||
89 | int rdma_backend_create_qp(RdmaBackendQP *qp, uint8_t qp_type, | |
90 | RdmaBackendPD *pd, RdmaBackendCQ *scq, | |
91 | RdmaBackendCQ *rcq, uint32_t max_send_wr, | |
92 | uint32_t max_recv_wr, uint32_t max_send_sge, | |
93 | uint32_t max_recv_sge); | |
94 | int rdma_backend_qp_state_init(RdmaBackendDev *backend_dev, RdmaBackendQP *qp, | |
95 | uint8_t qp_type, uint32_t qkey); | |
96 | int rdma_backend_qp_state_rtr(RdmaBackendDev *backend_dev, RdmaBackendQP *qp, | |
2b05705d YS |
97 | uint8_t qp_type, uint8_t sgid_idx, |
98 | union ibv_gid *dgid, uint32_t dqpn, | |
99 | uint32_t rq_psn, uint32_t qkey, bool use_qkey); | |
ef6d4ccd YS |
100 | int rdma_backend_qp_state_rts(RdmaBackendQP *qp, uint8_t qp_type, |
101 | uint32_t sq_psn, uint32_t qkey, bool use_qkey); | |
c99f2174 YS |
102 | int rdma_backend_query_qp(RdmaBackendQP *qp, struct ibv_qp_attr *attr, |
103 | int attr_mask, struct ibv_qp_init_attr *init_attr); | |
ef6d4ccd YS |
104 | void rdma_backend_destroy_qp(RdmaBackendQP *qp); |
105 | ||
106 | void rdma_backend_post_send(RdmaBackendDev *backend_dev, | |
107 | RdmaBackendQP *qp, uint8_t qp_type, | |
108 | struct ibv_sge *sge, uint32_t num_sge, | |
2b05705d | 109 | uint8_t sgid_idx, union ibv_gid *sgid, |
ef6d4ccd YS |
110 | union ibv_gid *dgid, uint32_t dqpn, uint32_t dqkey, |
111 | void *ctx); | |
112 | void rdma_backend_post_recv(RdmaBackendDev *backend_dev, | |
113 | RdmaDeviceResources *rdma_dev_res, | |
114 | RdmaBackendQP *qp, uint8_t qp_type, | |
115 | struct ibv_sge *sge, uint32_t num_sge, void *ctx); | |
116 | ||
117 | #endif |