xref: /freebsd/contrib/ofed/libirdma/irdma_defs.h (revision 5b5f7d0e77a9eee73eb5d596f43aef4e1a3674d8)
1cdcd52d4SBartosz Sobczak /*-
2cdcd52d4SBartosz Sobczak  * SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB
3cdcd52d4SBartosz Sobczak  *
4*01fbb869SBartosz Sobczak  * Copyright (c) 2015 - 2023 Intel Corporation
5cdcd52d4SBartosz Sobczak  *
6cdcd52d4SBartosz Sobczak  * This software is available to you under a choice of one of two
7cdcd52d4SBartosz Sobczak  * licenses.  You may choose to be licensed under the terms of the GNU
8cdcd52d4SBartosz Sobczak  * General Public License (GPL) Version 2, available from the file
9cdcd52d4SBartosz Sobczak  * COPYING in the main directory of this source tree, or the
10cdcd52d4SBartosz Sobczak  * OpenFabrics.org BSD license below:
11cdcd52d4SBartosz Sobczak  *
12cdcd52d4SBartosz Sobczak  *   Redistribution and use in source and binary forms, with or
13cdcd52d4SBartosz Sobczak  *   without modification, are permitted provided that the following
14cdcd52d4SBartosz Sobczak  *   conditions are met:
15cdcd52d4SBartosz Sobczak  *
16cdcd52d4SBartosz Sobczak  *    - Redistributions of source code must retain the above
17cdcd52d4SBartosz Sobczak  *	copyright notice, this list of conditions and the following
18cdcd52d4SBartosz Sobczak  *	disclaimer.
19cdcd52d4SBartosz Sobczak  *
20cdcd52d4SBartosz Sobczak  *    - Redistributions in binary form must reproduce the above
21cdcd52d4SBartosz Sobczak  *	copyright notice, this list of conditions and the following
22cdcd52d4SBartosz Sobczak  *	disclaimer in the documentation and/or other materials
23cdcd52d4SBartosz Sobczak  *	provided with the distribution.
24cdcd52d4SBartosz Sobczak  *
25cdcd52d4SBartosz Sobczak  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26cdcd52d4SBartosz Sobczak  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27cdcd52d4SBartosz Sobczak  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28cdcd52d4SBartosz Sobczak  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29cdcd52d4SBartosz Sobczak  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30cdcd52d4SBartosz Sobczak  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31cdcd52d4SBartosz Sobczak  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32cdcd52d4SBartosz Sobczak  * SOFTWARE.
33cdcd52d4SBartosz Sobczak  */
34cdcd52d4SBartosz Sobczak 
35cdcd52d4SBartosz Sobczak #ifndef IRDMA_DEFS_H
36cdcd52d4SBartosz Sobczak #define IRDMA_DEFS_H
37cdcd52d4SBartosz Sobczak 
38cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_0		0
39cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_8		8
40cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_16		16
41cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_24		24
42cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_32		32
43cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_40		40
44cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_48		48
45cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_56		56
46cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_64		64
47cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_72		72
48cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_80		80
49cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_88		88
50cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_96		96
51cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_104		104
52cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_112		112
53cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_120		120
54cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_128		128
55cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_136		136
56cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_144		144
57cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_152		152
58cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_160		160
59cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_168		168
60cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_176		176
61cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_184		184
62cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_192		192
63cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_200		200
64cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_208		208
65cdcd52d4SBartosz Sobczak #define IRDMA_BYTE_216		216
66cdcd52d4SBartosz Sobczak 
67cdcd52d4SBartosz Sobczak #define IRDMA_QP_TYPE_IWARP	1
68cdcd52d4SBartosz Sobczak #define IRDMA_QP_TYPE_UDA	2
69cdcd52d4SBartosz Sobczak #define IRDMA_QP_TYPE_ROCE_RC	3
70cdcd52d4SBartosz Sobczak #define IRDMA_QP_TYPE_ROCE_UD	4
71cdcd52d4SBartosz Sobczak 
72cdcd52d4SBartosz Sobczak #define IRDMA_HW_PAGE_SIZE	4096
73cdcd52d4SBartosz Sobczak #define IRDMA_HW_PAGE_SHIFT	12
74cdcd52d4SBartosz Sobczak #define IRDMA_CQE_QTYPE_RQ	0
75cdcd52d4SBartosz Sobczak #define IRDMA_CQE_QTYPE_SQ	1
76cdcd52d4SBartosz Sobczak 
7735105900SBartosz Sobczak #define IRDMA_QP_SW_MIN_WQSIZE	8 /* in WRs*/
78cdcd52d4SBartosz Sobczak #define IRDMA_QP_WQE_MIN_SIZE	32
79cdcd52d4SBartosz Sobczak #define IRDMA_QP_WQE_MAX_SIZE	256
80cdcd52d4SBartosz Sobczak #define IRDMA_QP_WQE_MIN_QUANTA 1
81cdcd52d4SBartosz Sobczak #define IRDMA_MAX_RQ_WQE_SHIFT_GEN1 2
82cdcd52d4SBartosz Sobczak #define IRDMA_MAX_RQ_WQE_SHIFT_GEN2 3
83cdcd52d4SBartosz Sobczak 
84cdcd52d4SBartosz Sobczak #define IRDMA_SQ_RSVD	258
85cdcd52d4SBartosz Sobczak #define IRDMA_RQ_RSVD	1
86cdcd52d4SBartosz Sobczak 
87777e472cSBartosz Sobczak #define IRDMA_FEATURE_RTS_AE			BIT_ULL(0)
88777e472cSBartosz Sobczak #define IRDMA_FEATURE_CQ_RESIZE			BIT_ULL(1)
89777e472cSBartosz Sobczak #define IRDMA_FEATURE_RELAX_RQ_ORDER		BIT_ULL(2)
90777e472cSBartosz Sobczak #define IRDMA_FEATURE_64_BYTE_CQE		BIT_ULL(5)
91777e472cSBartosz Sobczak 
92cdcd52d4SBartosz Sobczak #define IRDMAQP_OP_RDMA_WRITE			0x00
93cdcd52d4SBartosz Sobczak #define IRDMAQP_OP_RDMA_READ			0x01
94cdcd52d4SBartosz Sobczak #define IRDMAQP_OP_RDMA_SEND			0x03
95cdcd52d4SBartosz Sobczak #define IRDMAQP_OP_RDMA_SEND_INV		0x04
96cdcd52d4SBartosz Sobczak #define IRDMAQP_OP_RDMA_SEND_SOL_EVENT		0x05
97cdcd52d4SBartosz Sobczak #define IRDMAQP_OP_RDMA_SEND_SOL_EVENT_INV	0x06
98cdcd52d4SBartosz Sobczak #define IRDMAQP_OP_BIND_MW			0x08
99cdcd52d4SBartosz Sobczak #define IRDMAQP_OP_FAST_REGISTER		0x09
100cdcd52d4SBartosz Sobczak #define IRDMAQP_OP_LOCAL_INVALIDATE		0x0a
101cdcd52d4SBartosz Sobczak #define IRDMAQP_OP_RDMA_READ_LOC_INV		0x0b
102cdcd52d4SBartosz Sobczak #define IRDMAQP_OP_NOP				0x0c
103cdcd52d4SBartosz Sobczak 
104cdcd52d4SBartosz Sobczak #ifndef LS_64_1
105cdcd52d4SBartosz Sobczak #define LS_64_1(val, bits)	((u64)(uintptr_t)(val) << (bits))
106cdcd52d4SBartosz Sobczak #define RS_64_1(val, bits)	((u64)(uintptr_t)(val) >> (bits))
107cdcd52d4SBartosz Sobczak #define LS_32_1(val, bits)	((u32)((val) << (bits)))
108cdcd52d4SBartosz Sobczak #define RS_32_1(val, bits)	((u32)((val) >> (bits)))
109cdcd52d4SBartosz Sobczak #endif
110777e472cSBartosz Sobczak #ifndef GENMASK_ULL
111777e472cSBartosz Sobczak #define GENMASK_ULL(high, low)	((0xFFFFFFFFFFFFFFFFULL >> (64ULL - ((high) - (low) + 1ULL))) << (low))
112777e472cSBartosz Sobczak #endif /* GENMASK_ULL */
113777e472cSBartosz Sobczak #ifndef GENMASK
114777e472cSBartosz Sobczak #define GENMASK(high, low)	((0xFFFFFFFFUL >> (32UL - ((high) - (low) + 1UL))) << (low))
115777e472cSBartosz Sobczak #endif /* GENMASK */
116777e472cSBartosz Sobczak #ifndef FIELD_PREP
117777e472cSBartosz Sobczak #define FIELD_PREP(mask, val)	(((u64)(val) << mask##_S) & (mask))
118777e472cSBartosz Sobczak #define FIELD_GET(mask, val)	(((val) & mask) >> mask##_S)
119777e472cSBartosz Sobczak #endif /* FIELD_PREP */
120cdcd52d4SBartosz Sobczak 
121cdcd52d4SBartosz Sobczak #define IRDMA_CQPHC_QPCTX_S 0
122777e472cSBartosz Sobczak #define IRDMA_CQPHC_QPCTX GENMASK_ULL(63, 0)
123cdcd52d4SBartosz Sobczak #define IRDMA_QP_DBSA_HW_SQ_TAIL_S 0
124777e472cSBartosz Sobczak #define IRDMA_QP_DBSA_HW_SQ_TAIL GENMASK_ULL(14, 0)
125cdcd52d4SBartosz Sobczak #define IRDMA_CQ_DBSA_CQEIDX_S 0
126777e472cSBartosz Sobczak #define IRDMA_CQ_DBSA_CQEIDX GENMASK_ULL(19, 0)
127cdcd52d4SBartosz Sobczak #define IRDMA_CQ_DBSA_SW_CQ_SELECT_S 0
128777e472cSBartosz Sobczak #define IRDMA_CQ_DBSA_SW_CQ_SELECT GENMASK_ULL(13, 0)
129cdcd52d4SBartosz Sobczak #define IRDMA_CQ_DBSA_ARM_NEXT_S 14
130777e472cSBartosz Sobczak #define IRDMA_CQ_DBSA_ARM_NEXT BIT_ULL(14)
131cdcd52d4SBartosz Sobczak #define IRDMA_CQ_DBSA_ARM_NEXT_SE_S 15
132777e472cSBartosz Sobczak #define IRDMA_CQ_DBSA_ARM_NEXT_SE BIT_ULL(15)
133cdcd52d4SBartosz Sobczak #define IRDMA_CQ_DBSA_ARM_SEQ_NUM_S 16
134777e472cSBartosz Sobczak #define IRDMA_CQ_DBSA_ARM_SEQ_NUM GENMASK_ULL(17, 16)
135cdcd52d4SBartosz Sobczak 
136cdcd52d4SBartosz Sobczak /* CQP and iWARP Completion Queue */
137cdcd52d4SBartosz Sobczak #define IRDMA_CQ_QPCTX_S IRDMA_CQPHC_QPCTX_S
138777e472cSBartosz Sobczak #define IRDMA_CQ_QPCTX IRDMA_CQPHC_QPCTX
139cdcd52d4SBartosz Sobczak 
140cdcd52d4SBartosz Sobczak #define IRDMA_CQ_MINERR_S 0
141777e472cSBartosz Sobczak #define IRDMA_CQ_MINERR GENMASK_ULL(15, 0)
142cdcd52d4SBartosz Sobczak #define IRDMA_CQ_MAJERR_S 16
143777e472cSBartosz Sobczak #define IRDMA_CQ_MAJERR GENMASK_ULL(31, 16)
144cdcd52d4SBartosz Sobczak #define IRDMA_CQ_WQEIDX_S 32
145777e472cSBartosz Sobczak #define IRDMA_CQ_WQEIDX GENMASK_ULL(46, 32)
146cdcd52d4SBartosz Sobczak #define IRDMA_CQ_EXTCQE_S 50
147777e472cSBartosz Sobczak #define IRDMA_CQ_EXTCQE BIT_ULL(50)
148cdcd52d4SBartosz Sobczak #define IRDMA_OOO_CMPL_S 54
149777e472cSBartosz Sobczak #define IRDMA_OOO_CMPL BIT_ULL(54)
150cdcd52d4SBartosz Sobczak #define IRDMA_CQ_ERROR_S 55
151777e472cSBartosz Sobczak #define IRDMA_CQ_ERROR BIT_ULL(55)
152cdcd52d4SBartosz Sobczak #define IRDMA_CQ_SQ_S 62
153777e472cSBartosz Sobczak #define IRDMA_CQ_SQ BIT_ULL(62)
154cdcd52d4SBartosz Sobczak 
155cdcd52d4SBartosz Sobczak #define IRDMA_CQ_VALID_S 63
156777e472cSBartosz Sobczak #define IRDMA_CQ_VALID BIT_ULL(63)
157777e472cSBartosz Sobczak #define IRDMA_CQ_IMMVALID BIT_ULL(62)
158cdcd52d4SBartosz Sobczak #define IRDMA_CQ_UDSMACVALID_S 61
159777e472cSBartosz Sobczak #define IRDMA_CQ_UDSMACVALID BIT_ULL(61)
160cdcd52d4SBartosz Sobczak #define IRDMA_CQ_UDVLANVALID_S 60
161777e472cSBartosz Sobczak #define IRDMA_CQ_UDVLANVALID BIT_ULL(60)
162cdcd52d4SBartosz Sobczak #define IRDMA_CQ_UDSMAC_S 0
163777e472cSBartosz Sobczak #define IRDMA_CQ_UDSMAC GENMASK_ULL(47, 0)
164cdcd52d4SBartosz Sobczak #define IRDMA_CQ_UDVLAN_S 48
165777e472cSBartosz Sobczak #define IRDMA_CQ_UDVLAN GENMASK_ULL(63, 48)
166cdcd52d4SBartosz Sobczak 
167cdcd52d4SBartosz Sobczak #define IRDMA_CQ_IMMDATA_S 0
168777e472cSBartosz Sobczak #define IRDMA_CQ_IMMVALID_S 62
169777e472cSBartosz Sobczak #define IRDMA_CQ_IMMDATA GENMASK_ULL(125, 62)
170cdcd52d4SBartosz Sobczak #define IRDMA_CQ_IMMDATALOW32_S 0
171777e472cSBartosz Sobczak #define IRDMA_CQ_IMMDATALOW32 GENMASK_ULL(31, 0)
172cdcd52d4SBartosz Sobczak #define IRDMA_CQ_IMMDATAUP32_S 32
173777e472cSBartosz Sobczak #define IRDMA_CQ_IMMDATAUP32 GENMASK_ULL(63, 32)
174cdcd52d4SBartosz Sobczak #define IRDMACQ_PAYLDLEN_S 0
175777e472cSBartosz Sobczak #define IRDMACQ_PAYLDLEN GENMASK_ULL(31, 0)
176777e472cSBartosz Sobczak #define IRDMACQ_TCPSQN_ROCEPSN_RTT_TS_S 32
177777e472cSBartosz Sobczak #define IRDMACQ_TCPSQN_ROCEPSN_RTT_TS GENMASK_ULL(63, 32)
178cdcd52d4SBartosz Sobczak #define IRDMACQ_INVSTAG_S 0
179777e472cSBartosz Sobczak #define IRDMACQ_INVSTAG GENMASK_ULL(31, 0)
180cdcd52d4SBartosz Sobczak #define IRDMACQ_QPID_S 32
181777e472cSBartosz Sobczak #define IRDMACQ_QPID GENMASK_ULL(55, 32)
182cdcd52d4SBartosz Sobczak 
183cdcd52d4SBartosz Sobczak #define IRDMACQ_UDSRCQPN_S 0
184777e472cSBartosz Sobczak #define IRDMACQ_UDSRCQPN GENMASK_ULL(31, 0)
185cdcd52d4SBartosz Sobczak #define IRDMACQ_PSHDROP_S 51
186777e472cSBartosz Sobczak #define IRDMACQ_PSHDROP BIT_ULL(51)
187cdcd52d4SBartosz Sobczak #define IRDMACQ_STAG_S 53
188777e472cSBartosz Sobczak #define IRDMACQ_STAG BIT_ULL(53)
189cdcd52d4SBartosz Sobczak #define IRDMACQ_IPV4_S 53
190777e472cSBartosz Sobczak #define IRDMACQ_IPV4 BIT_ULL(53)
191cdcd52d4SBartosz Sobczak #define IRDMACQ_SOEVENT_S 54
192777e472cSBartosz Sobczak #define IRDMACQ_SOEVENT BIT_ULL(54)
193cdcd52d4SBartosz Sobczak #define IRDMACQ_OP_S 56
194777e472cSBartosz Sobczak #define IRDMACQ_OP GENMASK_ULL(61, 56)
195cdcd52d4SBartosz Sobczak 
196cdcd52d4SBartosz Sobczak /* Manage Push Page - MPP */
197cdcd52d4SBartosz Sobczak #define IRDMA_INVALID_PUSH_PAGE_INDEX_GEN_1 0xffff
198cdcd52d4SBartosz Sobczak #define IRDMA_INVALID_PUSH_PAGE_INDEX 0xffffffff
199cdcd52d4SBartosz Sobczak 
200cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_OPCODE_S 32
201777e472cSBartosz Sobczak #define IRDMAQPSQ_OPCODE GENMASK_ULL(37, 32)
202cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_COPY_HOST_PBL_S 43
203777e472cSBartosz Sobczak #define IRDMAQPSQ_COPY_HOST_PBL BIT_ULL(43)
204cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_ADDFRAGCNT_S 38
205777e472cSBartosz Sobczak #define IRDMAQPSQ_ADDFRAGCNT GENMASK_ULL(41, 38)
206cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_PUSHWQE_S 56
207777e472cSBartosz Sobczak #define IRDMAQPSQ_PUSHWQE BIT_ULL(56)
208cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_STREAMMODE_S 58
209777e472cSBartosz Sobczak #define IRDMAQPSQ_STREAMMODE BIT_ULL(58)
210cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_WAITFORRCVPDU_S 59
211777e472cSBartosz Sobczak #define IRDMAQPSQ_WAITFORRCVPDU BIT_ULL(59)
212cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_READFENCE_S 60
213777e472cSBartosz Sobczak #define IRDMAQPSQ_READFENCE BIT_ULL(60)
214cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_LOCALFENCE_S 61
215777e472cSBartosz Sobczak #define IRDMAQPSQ_LOCALFENCE BIT_ULL(61)
216cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_UDPHEADER_S 61
217777e472cSBartosz Sobczak #define IRDMAQPSQ_UDPHEADER BIT_ULL(61)
218cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_L4LEN_S 42
219777e472cSBartosz Sobczak #define IRDMAQPSQ_L4LEN GENMASK_ULL(45, 42)
220cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_SIGCOMPL_S 62
221777e472cSBartosz Sobczak #define IRDMAQPSQ_SIGCOMPL BIT_ULL(62)
222cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_VALID_S 63
223777e472cSBartosz Sobczak #define IRDMAQPSQ_VALID BIT_ULL(63)
224cdcd52d4SBartosz Sobczak 
225cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_FRAG_TO_S IRDMA_CQPHC_QPCTX_S
226777e472cSBartosz Sobczak #define IRDMAQPSQ_FRAG_TO IRDMA_CQPHC_QPCTX
227cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_FRAG_VALID_S 63
228777e472cSBartosz Sobczak #define IRDMAQPSQ_FRAG_VALID BIT_ULL(63)
229cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_FRAG_LEN_S 32
230777e472cSBartosz Sobczak #define IRDMAQPSQ_FRAG_LEN GENMASK_ULL(62, 32)
231cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_FRAG_STAG_S 0
232777e472cSBartosz Sobczak #define IRDMAQPSQ_FRAG_STAG GENMASK_ULL(31, 0)
233cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_GEN1_FRAG_LEN_S 0
234777e472cSBartosz Sobczak #define IRDMAQPSQ_GEN1_FRAG_LEN GENMASK_ULL(31, 0)
235cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_GEN1_FRAG_STAG_S 32
236777e472cSBartosz Sobczak #define IRDMAQPSQ_GEN1_FRAG_STAG GENMASK_ULL(63, 32)
237cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_REMSTAGINV_S 0
238777e472cSBartosz Sobczak #define IRDMAQPSQ_REMSTAGINV GENMASK_ULL(31, 0)
239cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_DESTQKEY_S 0
240777e472cSBartosz Sobczak #define IRDMAQPSQ_DESTQKEY GENMASK_ULL(31, 0)
241cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_DESTQPN_S 32
242777e472cSBartosz Sobczak #define IRDMAQPSQ_DESTQPN GENMASK_ULL(55, 32)
243cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_AHID_S 0
244777e472cSBartosz Sobczak #define IRDMAQPSQ_AHID GENMASK_ULL(16, 0)
245cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_INLINEDATAFLAG_S 57
246777e472cSBartosz Sobczak #define IRDMAQPSQ_INLINEDATAFLAG BIT_ULL(57)
247cdcd52d4SBartosz Sobczak 
248cdcd52d4SBartosz Sobczak #define IRDMA_INLINE_VALID_S 7
249cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_INLINEDATALEN_S 48
250777e472cSBartosz Sobczak #define IRDMAQPSQ_INLINEDATALEN GENMASK_ULL(55, 48)
251cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_IMMDATAFLAG_S 47
252777e472cSBartosz Sobczak #define IRDMAQPSQ_IMMDATAFLAG BIT_ULL(47)
253cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_REPORTRTT_S 46
254777e472cSBartosz Sobczak #define IRDMAQPSQ_REPORTRTT BIT_ULL(46)
255cdcd52d4SBartosz Sobczak 
256cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_IMMDATA_S 0
257777e472cSBartosz Sobczak #define IRDMAQPSQ_IMMDATA GENMASK_ULL(63, 0)
258cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_REMSTAG_S 0
259777e472cSBartosz Sobczak #define IRDMAQPSQ_REMSTAG GENMASK_ULL(31, 0)
260cdcd52d4SBartosz Sobczak 
261cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_REMTO_S IRDMA_CQPHC_QPCTX_S
262777e472cSBartosz Sobczak #define IRDMAQPSQ_REMTO IRDMA_CQPHC_QPCTX
263cdcd52d4SBartosz Sobczak 
264cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_STAGRIGHTS_S 48
265777e472cSBartosz Sobczak #define IRDMAQPSQ_STAGRIGHTS GENMASK_ULL(52, 48)
266cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_VABASEDTO_S 53
267777e472cSBartosz Sobczak #define IRDMAQPSQ_VABASEDTO BIT_ULL(53)
268cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_MEMWINDOWTYPE_S 54
269777e472cSBartosz Sobczak #define IRDMAQPSQ_MEMWINDOWTYPE BIT_ULL(54)
270cdcd52d4SBartosz Sobczak 
271cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_MWLEN_S IRDMA_CQPHC_QPCTX_S
272777e472cSBartosz Sobczak #define IRDMAQPSQ_MWLEN IRDMA_CQPHC_QPCTX
273cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_PARENTMRSTAG_S 32
274777e472cSBartosz Sobczak #define IRDMAQPSQ_PARENTMRSTAG GENMASK_ULL(63, 32)
275cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_MWSTAG_S 0
276777e472cSBartosz Sobczak #define IRDMAQPSQ_MWSTAG GENMASK_ULL(31, 0)
277cdcd52d4SBartosz Sobczak 
278cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_BASEVA_TO_FBO_S IRDMA_CQPHC_QPCTX_S
279777e472cSBartosz Sobczak #define IRDMAQPSQ_BASEVA_TO_FBO IRDMA_CQPHC_QPCTX
280cdcd52d4SBartosz Sobczak 
281cdcd52d4SBartosz Sobczak #define IRDMAQPSQ_LOCSTAG_S 0
282777e472cSBartosz Sobczak #define IRDMAQPSQ_LOCSTAG GENMASK_ULL(31, 0)
283cdcd52d4SBartosz Sobczak 
284cdcd52d4SBartosz Sobczak /* iwarp QP RQ WQE common fields */
285cdcd52d4SBartosz Sobczak #define IRDMAQPRQ_ADDFRAGCNT_S IRDMAQPSQ_ADDFRAGCNT_S
286777e472cSBartosz Sobczak #define IRDMAQPRQ_ADDFRAGCNT IRDMAQPSQ_ADDFRAGCNT
287cdcd52d4SBartosz Sobczak 
288cdcd52d4SBartosz Sobczak #define IRDMAQPRQ_VALID_S IRDMAQPSQ_VALID_S
289777e472cSBartosz Sobczak #define IRDMAQPRQ_VALID IRDMAQPSQ_VALID
290cdcd52d4SBartosz Sobczak 
291cdcd52d4SBartosz Sobczak #define IRDMAQPRQ_COMPLCTX_S IRDMA_CQPHC_QPCTX_S
292777e472cSBartosz Sobczak #define IRDMAQPRQ_COMPLCTX IRDMA_CQPHC_QPCTX
293cdcd52d4SBartosz Sobczak 
294cdcd52d4SBartosz Sobczak #define IRDMAQPRQ_FRAG_LEN_S IRDMAQPSQ_FRAG_LEN_S
295777e472cSBartosz Sobczak #define IRDMAQPRQ_FRAG_LEN IRDMAQPSQ_FRAG_LEN
296cdcd52d4SBartosz Sobczak 
297cdcd52d4SBartosz Sobczak #define IRDMAQPRQ_STAG_S IRDMAQPSQ_FRAG_STAG_S
298777e472cSBartosz Sobczak #define IRDMAQPRQ_STAG IRDMAQPSQ_FRAG_STAG
299cdcd52d4SBartosz Sobczak 
300cdcd52d4SBartosz Sobczak #define IRDMAQPRQ_TO_S IRDMAQPSQ_FRAG_TO_S
301777e472cSBartosz Sobczak #define IRDMAQPRQ_TO IRDMAQPSQ_FRAG_TO
302cdcd52d4SBartosz Sobczak 
303cdcd52d4SBartosz Sobczak #define IRDMAPFINT_OICR_HMC_ERR_M BIT(26)
304cdcd52d4SBartosz Sobczak #define IRDMAPFINT_OICR_PE_PUSH_M BIT(27)
305cdcd52d4SBartosz Sobczak #define IRDMAPFINT_OICR_PE_CRITERR_M BIT(28)
306cdcd52d4SBartosz Sobczak 
30735105900SBartosz Sobczak #define IRDMA_GET_RING_OFFSET(_ring, _i) \
30835105900SBartosz Sobczak 	( \
30935105900SBartosz Sobczak 		((_ring).head + (_i)) % (_ring).size \
31035105900SBartosz Sobczak 	)
31135105900SBartosz Sobczak 
31235105900SBartosz Sobczak #define IRDMA_GET_CQ_ELEM_AT_OFFSET(_cq, _i, _cqe) \
31335105900SBartosz Sobczak 	{ \
314*01fbb869SBartosz Sobczak 		__u32 offset; \
31535105900SBartosz Sobczak 		offset = IRDMA_GET_RING_OFFSET((_cq)->cq_ring, _i); \
31635105900SBartosz Sobczak 		(_cqe) = (_cq)->cq_base[offset].buf; \
31735105900SBartosz Sobczak 	}
318cdcd52d4SBartosz Sobczak #define IRDMA_GET_CURRENT_CQ_ELEM(_cq) \
319cdcd52d4SBartosz Sobczak 	( \
320cdcd52d4SBartosz Sobczak 		(_cq)->cq_base[IRDMA_RING_CURRENT_HEAD((_cq)->cq_ring)].buf  \
321cdcd52d4SBartosz Sobczak 	)
322cdcd52d4SBartosz Sobczak #define IRDMA_GET_CURRENT_EXTENDED_CQ_ELEM(_cq) \
323cdcd52d4SBartosz Sobczak 	( \
324cdcd52d4SBartosz Sobczak 		((struct irdma_extended_cqe *) \
325cdcd52d4SBartosz Sobczak 		((_cq)->cq_base))[IRDMA_RING_CURRENT_HEAD((_cq)->cq_ring)].buf \
326cdcd52d4SBartosz Sobczak 	)
327cdcd52d4SBartosz Sobczak 
328cdcd52d4SBartosz Sobczak #define IRDMA_RING_INIT(_ring, _size) \
329cdcd52d4SBartosz Sobczak 	{ \
330cdcd52d4SBartosz Sobczak 		(_ring).head = 0; \
331cdcd52d4SBartosz Sobczak 		(_ring).tail = 0; \
332cdcd52d4SBartosz Sobczak 		(_ring).size = (_size); \
333cdcd52d4SBartosz Sobczak 	}
334cdcd52d4SBartosz Sobczak #define IRDMA_RING_SIZE(_ring) ((_ring).size)
335cdcd52d4SBartosz Sobczak #define IRDMA_RING_CURRENT_HEAD(_ring) ((_ring).head)
336cdcd52d4SBartosz Sobczak #define IRDMA_RING_CURRENT_TAIL(_ring) ((_ring).tail)
337cdcd52d4SBartosz Sobczak 
338cdcd52d4SBartosz Sobczak #define IRDMA_RING_MOVE_HEAD(_ring, _retcode) \
339cdcd52d4SBartosz Sobczak 	{ \
340*01fbb869SBartosz Sobczak 		u32 size; \
341cdcd52d4SBartosz Sobczak 		size = (_ring).size;  \
342cdcd52d4SBartosz Sobczak 		if (!IRDMA_RING_FULL_ERR(_ring)) { \
343cdcd52d4SBartosz Sobczak 			(_ring).head = ((_ring).head + 1) % size; \
344cdcd52d4SBartosz Sobczak 			(_retcode) = 0; \
345cdcd52d4SBartosz Sobczak 		} else { \
346cdcd52d4SBartosz Sobczak 			(_retcode) = ENOSPC; \
347cdcd52d4SBartosz Sobczak 		} \
348cdcd52d4SBartosz Sobczak 	}
349cdcd52d4SBartosz Sobczak #define IRDMA_RING_MOVE_HEAD_BY_COUNT(_ring, _count, _retcode) \
350cdcd52d4SBartosz Sobczak 	{ \
351*01fbb869SBartosz Sobczak 		u32 size; \
352cdcd52d4SBartosz Sobczak 		size = (_ring).size; \
353cdcd52d4SBartosz Sobczak 		if ((IRDMA_RING_USED_QUANTA(_ring) + (_count)) < size) { \
354cdcd52d4SBartosz Sobczak 			(_ring).head = ((_ring).head + (_count)) % size; \
355cdcd52d4SBartosz Sobczak 			(_retcode) = 0; \
356cdcd52d4SBartosz Sobczak 		} else { \
357cdcd52d4SBartosz Sobczak 			(_retcode) = ENOSPC; \
358cdcd52d4SBartosz Sobczak 		} \
359cdcd52d4SBartosz Sobczak 	}
360cdcd52d4SBartosz Sobczak #define IRDMA_SQ_RING_MOVE_HEAD(_ring, _retcode) \
361cdcd52d4SBartosz Sobczak 	{ \
362*01fbb869SBartosz Sobczak 		u32 size; \
363cdcd52d4SBartosz Sobczak 		size = (_ring).size;  \
364cdcd52d4SBartosz Sobczak 		if (!IRDMA_SQ_RING_FULL_ERR(_ring)) { \
365cdcd52d4SBartosz Sobczak 			(_ring).head = ((_ring).head + 1) % size; \
366cdcd52d4SBartosz Sobczak 			(_retcode) = 0; \
367cdcd52d4SBartosz Sobczak 		} else { \
368cdcd52d4SBartosz Sobczak 			(_retcode) = ENOSPC; \
369cdcd52d4SBartosz Sobczak 		} \
370cdcd52d4SBartosz Sobczak 	}
371cdcd52d4SBartosz Sobczak #define IRDMA_SQ_RING_MOVE_HEAD_BY_COUNT(_ring, _count, _retcode) \
372cdcd52d4SBartosz Sobczak 	{ \
373*01fbb869SBartosz Sobczak 		u32 size; \
374cdcd52d4SBartosz Sobczak 		size = (_ring).size; \
375cdcd52d4SBartosz Sobczak 		if ((IRDMA_RING_USED_QUANTA(_ring) + (_count)) < (size - 256)) { \
376cdcd52d4SBartosz Sobczak 			(_ring).head = ((_ring).head + (_count)) % size; \
377cdcd52d4SBartosz Sobczak 			(_retcode) = 0; \
378cdcd52d4SBartosz Sobczak 		} else { \
379cdcd52d4SBartosz Sobczak 			(_retcode) = ENOSPC; \
380cdcd52d4SBartosz Sobczak 		} \
381cdcd52d4SBartosz Sobczak 	}
382cdcd52d4SBartosz Sobczak #define IRDMA_RING_MOVE_HEAD_BY_COUNT_NOCHECK(_ring, _count) \
383cdcd52d4SBartosz Sobczak 	(_ring).head = ((_ring).head + (_count)) % (_ring).size
384cdcd52d4SBartosz Sobczak 
385cdcd52d4SBartosz Sobczak #define IRDMA_RING_MOVE_TAIL(_ring) \
386cdcd52d4SBartosz Sobczak 	(_ring).tail = ((_ring).tail + 1) % (_ring).size
387cdcd52d4SBartosz Sobczak 
388cdcd52d4SBartosz Sobczak #define IRDMA_RING_MOVE_HEAD_NOCHECK(_ring) \
389cdcd52d4SBartosz Sobczak 	(_ring).head = ((_ring).head + 1) % (_ring).size
390cdcd52d4SBartosz Sobczak 
391cdcd52d4SBartosz Sobczak #define IRDMA_RING_MOVE_TAIL_BY_COUNT(_ring, _count) \
392cdcd52d4SBartosz Sobczak 	(_ring).tail = ((_ring).tail + (_count)) % (_ring).size
393cdcd52d4SBartosz Sobczak 
394cdcd52d4SBartosz Sobczak #define IRDMA_RING_SET_TAIL(_ring, _pos) \
395cdcd52d4SBartosz Sobczak 	(_ring).tail = (_pos) % (_ring).size
396cdcd52d4SBartosz Sobczak 
397cdcd52d4SBartosz Sobczak #define IRDMA_RING_FULL_ERR(_ring) \
398cdcd52d4SBartosz Sobczak 	( \
399cdcd52d4SBartosz Sobczak 		(IRDMA_RING_USED_QUANTA(_ring) == ((_ring).size - 1))  \
400cdcd52d4SBartosz Sobczak 	)
401cdcd52d4SBartosz Sobczak 
402cdcd52d4SBartosz Sobczak #define IRDMA_ERR_RING_FULL2(_ring) \
403cdcd52d4SBartosz Sobczak 	( \
404cdcd52d4SBartosz Sobczak 		(IRDMA_RING_USED_QUANTA(_ring) == ((_ring).size - 2))  \
405cdcd52d4SBartosz Sobczak 	)
406cdcd52d4SBartosz Sobczak 
407cdcd52d4SBartosz Sobczak #define IRDMA_ERR_RING_FULL3(_ring) \
408cdcd52d4SBartosz Sobczak 	( \
409cdcd52d4SBartosz Sobczak 		(IRDMA_RING_USED_QUANTA(_ring) == ((_ring).size - 3))  \
410cdcd52d4SBartosz Sobczak 	)
411cdcd52d4SBartosz Sobczak 
412cdcd52d4SBartosz Sobczak #define IRDMA_SQ_RING_FULL_ERR(_ring) \
413cdcd52d4SBartosz Sobczak 	( \
414cdcd52d4SBartosz Sobczak 		(IRDMA_RING_USED_QUANTA(_ring) == ((_ring).size - 257))  \
415cdcd52d4SBartosz Sobczak 	)
416cdcd52d4SBartosz Sobczak 
417cdcd52d4SBartosz Sobczak #define IRDMA_ERR_SQ_RING_FULL2(_ring) \
418cdcd52d4SBartosz Sobczak 	( \
419cdcd52d4SBartosz Sobczak 		(IRDMA_RING_USED_QUANTA(_ring) == ((_ring).size - 258))  \
420cdcd52d4SBartosz Sobczak 	)
421cdcd52d4SBartosz Sobczak #define IRDMA_ERR_SQ_RING_FULL3(_ring) \
422cdcd52d4SBartosz Sobczak 	( \
423cdcd52d4SBartosz Sobczak 		(IRDMA_RING_USED_QUANTA(_ring) == ((_ring).size - 259))  \
424cdcd52d4SBartosz Sobczak 	)
425cdcd52d4SBartosz Sobczak #define IRDMA_RING_MORE_WORK(_ring) \
426cdcd52d4SBartosz Sobczak 	( \
427cdcd52d4SBartosz Sobczak 		(IRDMA_RING_USED_QUANTA(_ring) != 0) \
428cdcd52d4SBartosz Sobczak 	)
429cdcd52d4SBartosz Sobczak 
430cdcd52d4SBartosz Sobczak #define IRDMA_RING_USED_QUANTA(_ring) \
431cdcd52d4SBartosz Sobczak 	( \
432cdcd52d4SBartosz Sobczak 		(((_ring).head + (_ring).size - (_ring).tail) % (_ring).size) \
433cdcd52d4SBartosz Sobczak 	)
434cdcd52d4SBartosz Sobczak 
435cdcd52d4SBartosz Sobczak #define IRDMA_RING_FREE_QUANTA(_ring) \
436cdcd52d4SBartosz Sobczak 	( \
437cdcd52d4SBartosz Sobczak 		((_ring).size - IRDMA_RING_USED_QUANTA(_ring) - 1) \
438cdcd52d4SBartosz Sobczak 	)
439cdcd52d4SBartosz Sobczak 
440cdcd52d4SBartosz Sobczak #define IRDMA_SQ_RING_FREE_QUANTA(_ring) \
441cdcd52d4SBartosz Sobczak 	( \
442cdcd52d4SBartosz Sobczak 		((_ring).size - IRDMA_RING_USED_QUANTA(_ring) - 257) \
443cdcd52d4SBartosz Sobczak 	)
444cdcd52d4SBartosz Sobczak 
445cdcd52d4SBartosz Sobczak #define IRDMA_ATOMIC_RING_MOVE_HEAD(_ring, index, _retcode) \
446cdcd52d4SBartosz Sobczak 	{ \
447cdcd52d4SBartosz Sobczak 		index = IRDMA_RING_CURRENT_HEAD(_ring); \
448cdcd52d4SBartosz Sobczak 		IRDMA_RING_MOVE_HEAD(_ring, _retcode); \
449cdcd52d4SBartosz Sobczak 	}
450cdcd52d4SBartosz Sobczak 
451cdcd52d4SBartosz Sobczak enum irdma_qp_wqe_size {
452cdcd52d4SBartosz Sobczak 	IRDMA_WQE_SIZE_32  = 32,
453cdcd52d4SBartosz Sobczak 	IRDMA_WQE_SIZE_64  = 64,
454cdcd52d4SBartosz Sobczak 	IRDMA_WQE_SIZE_96  = 96,
455cdcd52d4SBartosz Sobczak 	IRDMA_WQE_SIZE_128 = 128,
456cdcd52d4SBartosz Sobczak 	IRDMA_WQE_SIZE_256 = 256,
457cdcd52d4SBartosz Sobczak };
458cdcd52d4SBartosz Sobczak 
459cdcd52d4SBartosz Sobczak /**
460cdcd52d4SBartosz Sobczak  * set_64bit_val - set 64 bit value to hw wqe
461cdcd52d4SBartosz Sobczak  * @wqe_words: wqe addr to write
462cdcd52d4SBartosz Sobczak  * @byte_index: index in wqe
463cdcd52d4SBartosz Sobczak  * @val: value to write
464cdcd52d4SBartosz Sobczak  **/
set_64bit_val(__le64 * wqe_words,u32 byte_index,u64 val)465cdcd52d4SBartosz Sobczak static inline void set_64bit_val(__le64 *wqe_words, u32 byte_index, u64 val)
466cdcd52d4SBartosz Sobczak {
467cdcd52d4SBartosz Sobczak 	wqe_words[byte_index >> 3] = htole64(val);
468cdcd52d4SBartosz Sobczak }
469cdcd52d4SBartosz Sobczak 
470cdcd52d4SBartosz Sobczak /**
471cdcd52d4SBartosz Sobczak  * set_32bit_val - set 32 bit value to hw wqe
472cdcd52d4SBartosz Sobczak  * @wqe_words: wqe addr to write
473cdcd52d4SBartosz Sobczak  * @byte_index: index in wqe
474cdcd52d4SBartosz Sobczak  * @val: value to write
475cdcd52d4SBartosz Sobczak  **/
set_32bit_val(__le32 * wqe_words,u32 byte_index,u32 val)476cdcd52d4SBartosz Sobczak static inline void set_32bit_val(__le32 *wqe_words, u32 byte_index, u32 val)
477cdcd52d4SBartosz Sobczak {
478cdcd52d4SBartosz Sobczak 	wqe_words[byte_index >> 2] = htole32(val);
479cdcd52d4SBartosz Sobczak }
480cdcd52d4SBartosz Sobczak 
481cdcd52d4SBartosz Sobczak /**
482cdcd52d4SBartosz Sobczak  * get_64bit_val - read 64 bit value from wqe
483cdcd52d4SBartosz Sobczak  * @wqe_words: wqe addr
484cdcd52d4SBartosz Sobczak  * @byte_index: index to read from
485cdcd52d4SBartosz Sobczak  * @val: read value
486cdcd52d4SBartosz Sobczak  **/
get_64bit_val(__le64 * wqe_words,u32 byte_index,u64 * val)487cdcd52d4SBartosz Sobczak static inline void get_64bit_val(__le64 *wqe_words, u32 byte_index, u64 *val)
488cdcd52d4SBartosz Sobczak {
489cdcd52d4SBartosz Sobczak 	*val = le64toh(wqe_words[byte_index >> 3]);
490cdcd52d4SBartosz Sobczak }
491cdcd52d4SBartosz Sobczak 
492cdcd52d4SBartosz Sobczak /**
493cdcd52d4SBartosz Sobczak  * get_32bit_val - read 32 bit value from wqe
494cdcd52d4SBartosz Sobczak  * @wqe_words: wqe addr
495cdcd52d4SBartosz Sobczak  * @byte_index: index to reaad from
496cdcd52d4SBartosz Sobczak  * @val: return 32 bit value
497cdcd52d4SBartosz Sobczak  **/
get_32bit_val(__le32 * wqe_words,u32 byte_index,u32 * val)498cdcd52d4SBartosz Sobczak static inline void get_32bit_val(__le32 *wqe_words, u32 byte_index, u32 *val)
499cdcd52d4SBartosz Sobczak {
500cdcd52d4SBartosz Sobczak 	*val = le32toh(wqe_words[byte_index >> 2]);
501cdcd52d4SBartosz Sobczak }
502cdcd52d4SBartosz Sobczak #endif /* IRDMA_DEFS_H */
503