@@ -23,6 +23,7 @@ publish_internal_headers(rdma
rdma/rdma_user_ioctl.h
rdma/rdma_user_ioctl_cmds.h
rdma/rdma_user_rxe.h
+ rdma/rvt-abi.h
rdma/siw-abi.h
rdma/vmw_pvrdma-abi.h
)
new file mode 100644
@@ -0,0 +1,66 @@
+/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
+
+/*
+ * This file contains defines, structures, etc. that are used
+ * to communicate between kernel and user code.
+ */
+
+#ifndef RVT_ABI_USER_H
+#define RVT_ABI_USER_H
+
+#include <linux/types.h>
+#include <rdma/ib_user_verbs.h>
+#ifndef RDMA_ATOMIC_UAPI
+#define RDMA_ATOMIC_UAPI(_type, _name) struct{ _type val; } _name
+#endif
+
+struct rvt_wqe_sge {
+ __aligned_u64 addr;
+ __u32 length;
+ __u32 lkey;
+};
+
+/*
+ * This structure is used to contain the head pointer, tail pointer,
+ * and completion queue entries as a single memory allocation so
+ * it can be mmap'ed into user space.
+ */
+struct rvt_cq_wc {
+ /* index of next entry to fill */
+ RDMA_ATOMIC_UAPI(__u32, head);
+ /* index of next ib_poll_cq() entry */
+ RDMA_ATOMIC_UAPI(__u32, tail);
+
+ /* these are actually size ibcq.cqe + 1 */
+ struct ib_uverbs_wc uqueue[];
+};
+
+/*
+ * Receive work request queue entry.
+ * The size of the sg_list is determined when the QP (or SRQ) is created
+ * and stored in qp->r_rq.max_sge (or srq->rq.max_sge).
+ */
+struct rvt_rwqe {
+ __u64 wr_id;
+ __u8 num_sge;
+ __u8 padding[7];
+ struct rvt_wqe_sge sg_list[];
+};
+
+/*
+ * This structure is used to contain the head pointer, tail pointer,
+ * and receive work queue entries as a single memory allocation so
+ * it can be mmap'ed into user space.
+ * Note that the wq array elements are variable size so you can't
+ * just index into the array to get the N'th element;
+ * use get_rwqe_ptr() for user space and rvt_get_rwqe_ptr()
+ * for kernel space.
+ */
+struct rvt_rwq {
+ /* new work requests posted to the head */
+ RDMA_ATOMIC_UAPI(__u32, head);
+ /* receives pull requests from here. */
+ RDMA_ATOMIC_UAPI(__u32, tail);
+ struct rvt_rwqe wq[];
+};
+#endif /* RVT_ABI_USER_H */
@@ -133,6 +133,10 @@ enum pvrdma_wc_flags {
PVRDMA_WC_FLAGS_MAX = PVRDMA_WC_WITH_NETWORK_HDR_TYPE,
};
+enum pvrdma_user_qp_create_flags {
+ PVRDMA_USER_QP_CREATE_USE_RESP = 1 << 0,
+};
+
struct pvrdma_alloc_ucontext_resp {
__u32 qp_tab_size;
__u32 reserved;
@@ -177,6 +181,15 @@ struct pvrdma_create_qp {
__u32 rbuf_size;
__u32 sbuf_size;
__aligned_u64 qp_addr;
+ __u32 flags;
+ __u32 reserved;
+};
+
+struct pvrdma_create_qp_resp {
+ __u32 qpn;
+ __u32 qp_handle;
+ __u32 qpn_valid;
+ __u32 reserved;
};
/* PVRDMA masked atomic compare and swap */
To commit ?? ("RDMA/vmw_pvrdma: Use resource ids from physical device if available") Signed-off-by: Adit Ranadive <aditr@vmware.com> --- kernel-headers/CMakeLists.txt | 1 + kernel-headers/rdma/rvt-abi.h | 66 ++++++++++++++++++++++++++++ kernel-headers/rdma/vmw_pvrdma-abi.h | 13 ++++++ 3 files changed, 80 insertions(+) create mode 100644 kernel-headers/rdma/rvt-abi.h