|
@@ -48,6 +48,86 @@
|
|
|
*
|
|
|
*/
|
|
|
|
|
|
+#include <rdma/ib_pack.h>
|
|
|
+/*
|
|
|
+ * Atomic bit definitions for r_aflags.
|
|
|
+ */
|
|
|
+#define RVT_R_WRID_VALID 0
|
|
|
+#define RVT_R_REWIND_SGE 1
|
|
|
+
|
|
|
+/*
|
|
|
+ * Bit definitions for r_flags.
|
|
|
+ */
|
|
|
+#define RVT_R_REUSE_SGE 0x01
|
|
|
+#define RVT_R_RDMAR_SEQ 0x02
|
|
|
+#define RVT_R_RSP_NAK 0x04
|
|
|
+#define RVT_R_RSP_SEND 0x08
|
|
|
+#define RVT_R_COMM_EST 0x10
|
|
|
+
|
|
|
+/*
|
|
|
+ * Bit definitions for s_flags.
|
|
|
+ *
|
|
|
+ * RVT_S_SIGNAL_REQ_WR - set if QP send WRs contain completion signaled
|
|
|
+ * RVT_S_BUSY - send tasklet is processing the QP
|
|
|
+ * RVT_S_TIMER - the RC retry timer is active
|
|
|
+ * RVT_S_ACK_PENDING - an ACK is waiting to be sent after RDMA read/atomics
|
|
|
+ * RVT_S_WAIT_FENCE - waiting for all prior RDMA read or atomic SWQEs
|
|
|
+ * before processing the next SWQE
|
|
|
+ * RVT_S_WAIT_RDMAR - waiting for a RDMA read or atomic SWQE to complete
|
|
|
+ * before processing the next SWQE
|
|
|
+ * RVT_S_WAIT_RNR - waiting for RNR timeout
|
|
|
+ * RVT_S_WAIT_SSN_CREDIT - waiting for RC credits to process next SWQE
|
|
|
+ * RVT_S_WAIT_DMA - waiting for send DMA queue to drain before generating
|
|
|
+ * next send completion entry not via send DMA
|
|
|
+ * RVT_S_WAIT_PIO - waiting for a send buffer to be available
|
|
|
+ * RVT_S_WAIT_TX - waiting for a struct verbs_txreq to be available
|
|
|
+ * RVT_S_WAIT_DMA_DESC - waiting for DMA descriptors to be available
|
|
|
+ * RVT_S_WAIT_KMEM - waiting for kernel memory to be available
|
|
|
+ * RVT_S_WAIT_PSN - waiting for a packet to exit the send DMA queue
|
|
|
+ * RVT_S_WAIT_ACK - waiting for an ACK packet before sending more requests
|
|
|
+ * RVT_S_SEND_ONE - send one packet, request ACK, then wait for ACK
|
|
|
+ * RVT_S_ECN - a BECN was queued to the send engine
|
|
|
+ */
|
|
|
+#define RVT_S_SIGNAL_REQ_WR 0x0001
|
|
|
+#define RVT_S_BUSY 0x0002
|
|
|
+#define RVT_S_TIMER 0x0004
|
|
|
+#define RVT_S_RESP_PENDING 0x0008
|
|
|
+#define RVT_S_ACK_PENDING 0x0010
|
|
|
+#define RVT_S_WAIT_FENCE 0x0020
|
|
|
+#define RVT_S_WAIT_RDMAR 0x0040
|
|
|
+#define RVT_S_WAIT_RNR 0x0080
|
|
|
+#define RVT_S_WAIT_SSN_CREDIT 0x0100
|
|
|
+#define RVT_S_WAIT_DMA 0x0200
|
|
|
+#define RVT_S_WAIT_PIO 0x0400
|
|
|
+#define RVT_S_WAIT_TX 0x0800
|
|
|
+#define RVT_S_WAIT_DMA_DESC 0x1000
|
|
|
+#define RVT_S_WAIT_KMEM 0x2000
|
|
|
+#define RVT_S_WAIT_PSN 0x4000
|
|
|
+#define RVT_S_WAIT_ACK 0x8000
|
|
|
+#define RVT_S_SEND_ONE 0x10000
|
|
|
+#define RVT_S_UNLIMITED_CREDIT 0x20000
|
|
|
+#define RVT_S_AHG_VALID 0x40000
|
|
|
+#define RVT_S_AHG_CLEAR 0x80000
|
|
|
+#define RVT_S_ECN 0x100000
|
|
|
+
|
|
|
+/*
|
|
|
+ * Wait flags that would prevent any packet type from being sent.
|
|
|
+ */
|
|
|
+#define RVT_S_ANY_WAIT_IO (RVT_S_WAIT_PIO | RVT_S_WAIT_TX | \
|
|
|
+ RVT_S_WAIT_DMA_DESC | RVT_S_WAIT_KMEM)
|
|
|
+
|
|
|
+/*
|
|
|
+ * Wait flags that would prevent send work requests from making progress.
|
|
|
+ */
|
|
|
+#define RVT_S_ANY_WAIT_SEND (RVT_S_WAIT_FENCE | RVT_S_WAIT_RDMAR | \
|
|
|
+ RVT_S_WAIT_RNR | RVT_S_WAIT_SSN_CREDIT | RVT_S_WAIT_DMA | \
|
|
|
+ RVT_S_WAIT_PSN | RVT_S_WAIT_ACK)
|
|
|
+
|
|
|
+#define RVT_S_ANY_WAIT (RVT_S_ANY_WAIT_IO | RVT_S_ANY_WAIT_SEND)
|
|
|
+
|
|
|
+/* Number of bits to pay attention to in the opcode for checking qp type */
|
|
|
+#define RVT_OPCODE_QP_MASK 0xE0
|
|
|
+
|
|
|
/*
|
|
|
* Send work request queue entry.
|
|
|
* The size of the sg_list is determined when the QP is created and stored
|