aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/hfi1/opfn.h
diff options
context:
space:
mode:
authorKaike Wan <kaike.wan@intel.com>2019-01-23 19:20:52 -0800
committerDoug Ledford <dledford@redhat.com>2019-01-31 11:36:05 -0500
commitf01b4d5a43da47a9f61618a81a4ff3258ddc2c01 (patch)
treebad27cec61ab4bf9436ff70309bda0b583c0e8e8 /drivers/infiniband/hw/hfi1/opfn.h
parentIB/hfi1: Add OPFN helper functions for TID RDMA feature (diff)
downloadlinux-dev-f01b4d5a43da47a9f61618a81a4ff3258ddc2c01.tar.xz
linux-dev-f01b4d5a43da47a9f61618a81a4ff3258ddc2c01.zip
IB/hfi1: OPFN interface
OPFN allows a pair of connected RC QPs to exchange a set of parameters in succession. The parameter exchange itself is done using the IB compare and swap request with a special virtual address. The request is triggered using a reserved IB work request opcode. This patch implements the OPFN interface to initialize, start, process, and reset the OPFN request. Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com> Signed-off-by: Mitko Haralanov <mitko.haralanov@intel.com> Signed-off-by: Kaike Wan <kaike.wan@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband/hw/hfi1/opfn.h')
-rw-r--r--drivers/infiniband/hw/hfi1/opfn.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/hfi1/opfn.h b/drivers/infiniband/hw/hfi1/opfn.h
index 1927c9862b8f..5f2011cabc25 100644
--- a/drivers/infiniband/hw/hfi1/opfn.h
+++ b/drivers/infiniband/hw/hfi1/opfn.h
@@ -49,10 +49,37 @@
/* STL Verbs Extended */
#define IB_BTHE_E_SHIFT 24
+#define HFI1_VERBS_E_ATOMIC_VADDR U64_MAX
+
+struct ib_atomic_eth;
+
+enum hfi1_opfn_codes {
+ STL_VERBS_EXTD_NONE = 0,
+ STL_VERBS_EXTD_TID_RDMA,
+ STL_VERBS_EXTD_MAX
+};
struct hfi1_opfn_data {
+ u8 extended;
+ u16 requested;
+ u16 completed;
+ enum hfi1_opfn_codes curr;
/* serialize opfn function calls */
spinlock_t lock;
+ struct work_struct opfn_work;
};
+/* WR opcode for OPFN */
+#define IB_WR_OPFN IB_WR_RESERVED3
+
+void opfn_send_conn_request(struct work_struct *work);
+void opfn_conn_response(struct rvt_qp *qp, struct rvt_ack_entry *e,
+ struct ib_atomic_eth *ateth);
+void opfn_conn_reply(struct rvt_qp *qp, u64 data);
+void opfn_conn_error(struct rvt_qp *qp);
+void opfn_qp_init(struct rvt_qp *qp, struct ib_qp_attr *attr, int attr_mask);
+void opfn_trigger_conn_request(struct rvt_qp *qp, u32 bth1);
+int opfn_init(void);
+void opfn_exit(void);
+
#endif /* _HFI1_OPFN_H */