xref: /freebsd/sys/dev/irdma/irdma_user.h (revision 01fbb86991d524288a785b544c29d9c5ea1b61fb)
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_USER_H
36cdcd52d4SBartosz Sobczak #define IRDMA_USER_H
37cdcd52d4SBartosz Sobczak 
38cdcd52d4SBartosz Sobczak #define irdma_handle void *
39cdcd52d4SBartosz Sobczak #define irdma_adapter_handle irdma_handle
40cdcd52d4SBartosz Sobczak #define irdma_qp_handle irdma_handle
41cdcd52d4SBartosz Sobczak #define irdma_cq_handle irdma_handle
42cdcd52d4SBartosz Sobczak #define irdma_pd_id irdma_handle
43cdcd52d4SBartosz Sobczak #define irdma_stag_handle irdma_handle
44cdcd52d4SBartosz Sobczak #define irdma_stag_index u32
45cdcd52d4SBartosz Sobczak #define irdma_stag u32
46cdcd52d4SBartosz Sobczak #define irdma_stag_key u8
47cdcd52d4SBartosz Sobczak #define irdma_tagged_offset u64
48cdcd52d4SBartosz Sobczak #define irdma_access_privileges u32
49cdcd52d4SBartosz Sobczak #define irdma_physical_fragment u64
50cdcd52d4SBartosz Sobczak #define irdma_address_list u64 *
51cdcd52d4SBartosz Sobczak #define irdma_sgl struct irdma_sge *
52cdcd52d4SBartosz Sobczak 
53cdcd52d4SBartosz Sobczak #define IRDMA_MAX_MR_SIZE	0x200000000000ULL
54cdcd52d4SBartosz Sobczak 
55cdcd52d4SBartosz Sobczak #define IRDMA_ACCESS_FLAGS_LOCALREAD		0x01
56cdcd52d4SBartosz Sobczak #define IRDMA_ACCESS_FLAGS_LOCALWRITE		0x02
57cdcd52d4SBartosz Sobczak #define IRDMA_ACCESS_FLAGS_REMOTEREAD_ONLY	0x04
58cdcd52d4SBartosz Sobczak #define IRDMA_ACCESS_FLAGS_REMOTEREAD		0x05
59cdcd52d4SBartosz Sobczak #define IRDMA_ACCESS_FLAGS_REMOTEWRITE_ONLY	0x08
60cdcd52d4SBartosz Sobczak #define IRDMA_ACCESS_FLAGS_REMOTEWRITE		0x0a
61cdcd52d4SBartosz Sobczak #define IRDMA_ACCESS_FLAGS_BIND_WINDOW		0x10
62cdcd52d4SBartosz Sobczak #define IRDMA_ACCESS_FLAGS_ZERO_BASED		0x20
63cdcd52d4SBartosz Sobczak #define IRDMA_ACCESS_FLAGS_ALL			0x3f
64cdcd52d4SBartosz Sobczak 
65cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_RDMA_WRITE		0x00
66cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_RDMA_READ			0x01
67cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_SEND			0x03
68cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_SEND_INV			0x04
69cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_SEND_SOL			0x05
70cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_SEND_SOL_INV		0x06
71cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_RDMA_WRITE_SOL		0x0d
72cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_BIND_MW			0x08
73cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_FAST_REG_NSMR		0x09
74cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_INV_STAG			0x0a
75cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_RDMA_READ_INV_STAG	0x0b
76cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_NOP			0x0c
77cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_REC	0x3e
78cdcd52d4SBartosz Sobczak #define IRDMA_OP_TYPE_REC_IMM	0x3f
79cdcd52d4SBartosz Sobczak 
80cdcd52d4SBartosz Sobczak #define IRDMA_FLUSH_MAJOR_ERR 1
81777e472cSBartosz Sobczak #define IRDMA_SRQFLUSH_RSVD_MAJOR_ERR 0xfffe
82777e472cSBartosz Sobczak 
83777e472cSBartosz Sobczak /* Async Events codes */
84777e472cSBartosz Sobczak #define IRDMA_AE_AMP_UNALLOCATED_STAG					0x0102
85777e472cSBartosz Sobczak #define IRDMA_AE_AMP_INVALID_STAG					0x0103
86777e472cSBartosz Sobczak #define IRDMA_AE_AMP_BAD_QP						0x0104
87777e472cSBartosz Sobczak #define IRDMA_AE_AMP_BAD_PD						0x0105
88777e472cSBartosz Sobczak #define IRDMA_AE_AMP_BAD_STAG_KEY					0x0106
89777e472cSBartosz Sobczak #define IRDMA_AE_AMP_BAD_STAG_INDEX					0x0107
90777e472cSBartosz Sobczak #define IRDMA_AE_AMP_BOUNDS_VIOLATION					0x0108
91777e472cSBartosz Sobczak #define IRDMA_AE_AMP_RIGHTS_VIOLATION					0x0109
92777e472cSBartosz Sobczak #define IRDMA_AE_AMP_TO_WRAP						0x010a
93777e472cSBartosz Sobczak #define IRDMA_AE_AMP_FASTREG_VALID_STAG					0x010c
94777e472cSBartosz Sobczak #define IRDMA_AE_AMP_FASTREG_MW_STAG					0x010d
95777e472cSBartosz Sobczak #define IRDMA_AE_AMP_FASTREG_INVALID_RIGHTS				0x010e
96777e472cSBartosz Sobczak #define IRDMA_AE_AMP_FASTREG_INVALID_LENGTH				0x0110
97777e472cSBartosz Sobczak #define IRDMA_AE_AMP_INVALIDATE_SHARED					0x0111
98777e472cSBartosz Sobczak #define IRDMA_AE_AMP_INVALIDATE_NO_REMOTE_ACCESS_RIGHTS			0x0112
99777e472cSBartosz Sobczak #define IRDMA_AE_AMP_INVALIDATE_MR_WITH_BOUND_WINDOWS			0x0113
100777e472cSBartosz Sobczak #define IRDMA_AE_AMP_MWBIND_VALID_STAG					0x0114
101777e472cSBartosz Sobczak #define IRDMA_AE_AMP_MWBIND_OF_MR_STAG					0x0115
102777e472cSBartosz Sobczak #define IRDMA_AE_AMP_MWBIND_TO_ZERO_BASED_STAG				0x0116
103777e472cSBartosz Sobczak #define IRDMA_AE_AMP_MWBIND_TO_MW_STAG					0x0117
104777e472cSBartosz Sobczak #define IRDMA_AE_AMP_MWBIND_INVALID_RIGHTS				0x0118
105777e472cSBartosz Sobczak #define IRDMA_AE_AMP_MWBIND_INVALID_BOUNDS				0x0119
106777e472cSBartosz Sobczak #define IRDMA_AE_AMP_MWBIND_TO_INVALID_PARENT				0x011a
107777e472cSBartosz Sobczak #define IRDMA_AE_AMP_MWBIND_BIND_DISABLED				0x011b
108777e472cSBartosz Sobczak #define IRDMA_AE_PRIV_OPERATION_DENIED					0x011c
109777e472cSBartosz Sobczak #define IRDMA_AE_AMP_INVALIDATE_TYPE1_MW				0x011d
110777e472cSBartosz Sobczak #define IRDMA_AE_AMP_MWBIND_ZERO_BASED_TYPE1_MW				0x011e
111777e472cSBartosz Sobczak #define IRDMA_AE_AMP_FASTREG_INVALID_PBL_HPS_CFG			0x011f
112777e472cSBartosz Sobczak #define IRDMA_AE_AMP_MWBIND_WRONG_TYPE					0x0120
113777e472cSBartosz Sobczak #define IRDMA_AE_AMP_FASTREG_PBLE_MISMATCH				0x0121
114777e472cSBartosz Sobczak #define IRDMA_AE_UDA_XMIT_DGRAM_TOO_LONG				0x0132
115777e472cSBartosz Sobczak #define IRDMA_AE_UDA_XMIT_BAD_PD					0x0133
116777e472cSBartosz Sobczak #define IRDMA_AE_UDA_XMIT_DGRAM_TOO_SHORT				0x0134
117777e472cSBartosz Sobczak #define IRDMA_AE_UDA_L4LEN_INVALID					0x0135
118777e472cSBartosz Sobczak #define IRDMA_AE_BAD_CLOSE						0x0201
119777e472cSBartosz Sobczak #define IRDMA_AE_RDMAP_ROE_BAD_LLP_CLOSE				0x0202
120777e472cSBartosz Sobczak #define IRDMA_AE_CQ_OPERATION_ERROR					0x0203
121777e472cSBartosz Sobczak #define IRDMA_AE_RDMA_READ_WHILE_ORD_ZERO				0x0205
122777e472cSBartosz Sobczak #define IRDMA_AE_STAG_ZERO_INVALID					0x0206
123777e472cSBartosz Sobczak #define IRDMA_AE_IB_RREQ_AND_Q1_FULL					0x0207
124777e472cSBartosz Sobczak #define IRDMA_AE_IB_INVALID_REQUEST					0x0208
125777e472cSBartosz Sobczak #define IRDMA_AE_WQE_UNEXPECTED_OPCODE					0x020a
126777e472cSBartosz Sobczak #define IRDMA_AE_WQE_INVALID_PARAMETER					0x020b
127777e472cSBartosz Sobczak #define IRDMA_AE_WQE_INVALID_FRAG_DATA					0x020c
128777e472cSBartosz Sobczak #define IRDMA_AE_IB_REMOTE_ACCESS_ERROR					0x020d
129777e472cSBartosz Sobczak #define IRDMA_AE_IB_REMOTE_OP_ERROR					0x020e
130777e472cSBartosz Sobczak #define IRDMA_AE_WQE_LSMM_TOO_LONG					0x0220
131777e472cSBartosz Sobczak #define IRDMA_AE_DDP_INVALID_MSN_GAP_IN_MSN				0x0301
132777e472cSBartosz Sobczak #define IRDMA_AE_DDP_UBE_DDP_MESSAGE_TOO_LONG_FOR_AVAILABLE_BUFFER	0x0303
133777e472cSBartosz Sobczak #define IRDMA_AE_DDP_UBE_INVALID_DDP_VERSION				0x0304
134777e472cSBartosz Sobczak #define IRDMA_AE_DDP_UBE_INVALID_MO					0x0305
135777e472cSBartosz Sobczak #define IRDMA_AE_DDP_UBE_INVALID_MSN_NO_BUFFER_AVAILABLE		0x0306
136777e472cSBartosz Sobczak #define IRDMA_AE_DDP_UBE_INVALID_QN					0x0307
137777e472cSBartosz Sobczak #define IRDMA_AE_DDP_NO_L_BIT						0x0308
138777e472cSBartosz Sobczak #define IRDMA_AE_RDMAP_ROE_INVALID_RDMAP_VERSION			0x0311
139777e472cSBartosz Sobczak #define IRDMA_AE_RDMAP_ROE_UNEXPECTED_OPCODE				0x0312
140777e472cSBartosz Sobczak #define IRDMA_AE_ROE_INVALID_RDMA_READ_REQUEST				0x0313
141777e472cSBartosz Sobczak #define IRDMA_AE_ROE_INVALID_RDMA_WRITE_OR_READ_RESP			0x0314
142777e472cSBartosz Sobczak #define IRDMA_AE_ROCE_RSP_LENGTH_ERROR					0x0316
143777e472cSBartosz Sobczak #define IRDMA_AE_ROCE_EMPTY_MCG						0x0380
144777e472cSBartosz Sobczak #define IRDMA_AE_ROCE_BAD_MC_IP_ADDR					0x0381
145777e472cSBartosz Sobczak #define IRDMA_AE_ROCE_BAD_MC_QPID					0x0382
146777e472cSBartosz Sobczak #define IRDMA_AE_MCG_QP_PROTOCOL_MISMATCH				0x0383
147777e472cSBartosz Sobczak #define IRDMA_AE_INVALID_ARP_ENTRY					0x0401
148777e472cSBartosz Sobczak #define IRDMA_AE_INVALID_TCP_OPTION_RCVD				0x0402
149777e472cSBartosz Sobczak #define IRDMA_AE_STALE_ARP_ENTRY					0x0403
150777e472cSBartosz Sobczak #define IRDMA_AE_INVALID_AH_ENTRY					0x0406
151777e472cSBartosz Sobczak #define IRDMA_AE_LLP_CLOSE_COMPLETE					0x0501
152777e472cSBartosz Sobczak #define IRDMA_AE_LLP_CONNECTION_RESET					0x0502
153777e472cSBartosz Sobczak #define IRDMA_AE_LLP_FIN_RECEIVED					0x0503
154777e472cSBartosz Sobczak #define IRDMA_AE_LLP_RECEIVED_MARKER_AND_LENGTH_FIELDS_DONT_MATCH	0x0504
155777e472cSBartosz Sobczak #define IRDMA_AE_LLP_RECEIVED_MPA_CRC_ERROR				0x0505
156777e472cSBartosz Sobczak #define IRDMA_AE_LLP_SEGMENT_TOO_SMALL					0x0507
157777e472cSBartosz Sobczak #define IRDMA_AE_LLP_SYN_RECEIVED					0x0508
158777e472cSBartosz Sobczak #define IRDMA_AE_LLP_TERMINATE_RECEIVED					0x0509
159777e472cSBartosz Sobczak #define IRDMA_AE_LLP_TOO_MANY_RETRIES					0x050a
160777e472cSBartosz Sobczak #define IRDMA_AE_LLP_TOO_MANY_KEEPALIVE_RETRIES				0x050b
161777e472cSBartosz Sobczak #define IRDMA_AE_LLP_DOUBT_REACHABILITY					0x050c
162777e472cSBartosz Sobczak #define IRDMA_AE_LLP_CONNECTION_ESTABLISHED				0x050e
163777e472cSBartosz Sobczak #define IRDMA_AE_RESOURCE_EXHAUSTION					0x0520
164777e472cSBartosz Sobczak #define IRDMA_AE_RESET_SENT						0x0601
165777e472cSBartosz Sobczak #define IRDMA_AE_TERMINATE_SENT						0x0602
166777e472cSBartosz Sobczak #define IRDMA_AE_RESET_NOT_SENT						0x0603
167777e472cSBartosz Sobczak #define IRDMA_AE_LCE_QP_CATASTROPHIC					0x0700
168777e472cSBartosz Sobczak #define IRDMA_AE_LCE_FUNCTION_CATASTROPHIC				0x0701
169777e472cSBartosz Sobczak #define IRDMA_AE_LCE_CQ_CATASTROPHIC					0x0702
170777e472cSBartosz Sobczak #define IRDMA_AE_QP_SUSPEND_COMPLETE					0x0900
171cdcd52d4SBartosz Sobczak 
172cdcd52d4SBartosz Sobczak enum irdma_device_caps_const {
173cdcd52d4SBartosz Sobczak 	IRDMA_WQE_SIZE =			4,
174cdcd52d4SBartosz Sobczak 	IRDMA_CQP_WQE_SIZE =			8,
175cdcd52d4SBartosz Sobczak 	IRDMA_CQE_SIZE =			4,
176cdcd52d4SBartosz Sobczak 	IRDMA_EXTENDED_CQE_SIZE =		8,
177cdcd52d4SBartosz Sobczak 	IRDMA_AEQE_SIZE =			2,
178cdcd52d4SBartosz Sobczak 	IRDMA_CEQE_SIZE =			1,
179cdcd52d4SBartosz Sobczak 	IRDMA_CQP_CTX_SIZE =			8,
180cdcd52d4SBartosz Sobczak 	IRDMA_SHADOW_AREA_SIZE =		8,
181cdcd52d4SBartosz Sobczak 	IRDMA_GATHER_STATS_BUF_SIZE =		1024,
182cdcd52d4SBartosz Sobczak 	IRDMA_MIN_IW_QP_ID =			0,
183cdcd52d4SBartosz Sobczak 	IRDMA_QUERY_FPM_BUF_SIZE =		176,
184cdcd52d4SBartosz Sobczak 	IRDMA_COMMIT_FPM_BUF_SIZE =		176,
185cdcd52d4SBartosz Sobczak 	IRDMA_MAX_IW_QP_ID =			262143,
186cdcd52d4SBartosz Sobczak 	IRDMA_MIN_CEQID =			0,
187cdcd52d4SBartosz Sobczak 	IRDMA_MAX_CEQID =			1023,
188cdcd52d4SBartosz Sobczak 	IRDMA_CEQ_MAX_COUNT =			IRDMA_MAX_CEQID + 1,
189cdcd52d4SBartosz Sobczak 	IRDMA_MIN_CQID =			0,
190cdcd52d4SBartosz Sobczak 	IRDMA_MAX_CQID =			524287,
191cdcd52d4SBartosz Sobczak 	IRDMA_MIN_AEQ_ENTRIES =			1,
192cdcd52d4SBartosz Sobczak 	IRDMA_MAX_AEQ_ENTRIES =			524287,
193cdcd52d4SBartosz Sobczak 	IRDMA_MIN_CEQ_ENTRIES =			1,
194cdcd52d4SBartosz Sobczak 	IRDMA_MAX_CEQ_ENTRIES =			262143,
195cdcd52d4SBartosz Sobczak 	IRDMA_MIN_CQ_SIZE =			1,
196cdcd52d4SBartosz Sobczak 	IRDMA_MAX_CQ_SIZE =			1048575,
197cdcd52d4SBartosz Sobczak 	IRDMA_DB_ID_ZERO =			0,
198cdcd52d4SBartosz Sobczak 	/* 64K + 1 */
199cdcd52d4SBartosz Sobczak 	IRDMA_MAX_OUTBOUND_MSG_SIZE =		65537,
200cdcd52d4SBartosz Sobczak 	/* 64K +1 */
201cdcd52d4SBartosz Sobczak 	IRDMA_MAX_INBOUND_MSG_SIZE =		65537,
202cdcd52d4SBartosz Sobczak 	IRDMA_MAX_PUSH_PAGE_COUNT =		1024,
203cdcd52d4SBartosz Sobczak 	IRDMA_MAX_PE_ENA_VF_COUNT =		32,
204cdcd52d4SBartosz Sobczak 	IRDMA_MAX_VF_FPM_ID =			47,
205cdcd52d4SBartosz Sobczak 	IRDMA_MAX_SQ_PAYLOAD_SIZE =		2145386496,
206cdcd52d4SBartosz Sobczak 	IRDMA_MAX_INLINE_DATA_SIZE =		101,
207cdcd52d4SBartosz Sobczak 	IRDMA_MAX_WQ_ENTRIES =			32768,
208cdcd52d4SBartosz Sobczak 	IRDMA_Q2_BUF_SIZE =			256,
209cdcd52d4SBartosz Sobczak 	IRDMA_QP_CTX_SIZE =			256,
210cdcd52d4SBartosz Sobczak 	IRDMA_MAX_PDS =				262144,
211cdcd52d4SBartosz Sobczak };
212cdcd52d4SBartosz Sobczak 
213cdcd52d4SBartosz Sobczak enum irdma_addressing_type {
214cdcd52d4SBartosz Sobczak 	IRDMA_ADDR_TYPE_ZERO_BASED = 0,
215cdcd52d4SBartosz Sobczak 	IRDMA_ADDR_TYPE_VA_BASED   = 1,
216cdcd52d4SBartosz Sobczak };
217cdcd52d4SBartosz Sobczak 
218cdcd52d4SBartosz Sobczak enum irdma_flush_opcode {
219cdcd52d4SBartosz Sobczak 	FLUSH_INVALID = 0,
220cdcd52d4SBartosz Sobczak 	FLUSH_GENERAL_ERR,
221cdcd52d4SBartosz Sobczak 	FLUSH_PROT_ERR,
222cdcd52d4SBartosz Sobczak 	FLUSH_REM_ACCESS_ERR,
223cdcd52d4SBartosz Sobczak 	FLUSH_LOC_QP_OP_ERR,
224cdcd52d4SBartosz Sobczak 	FLUSH_REM_OP_ERR,
225cdcd52d4SBartosz Sobczak 	FLUSH_LOC_LEN_ERR,
226cdcd52d4SBartosz Sobczak 	FLUSH_FATAL_ERR,
227777e472cSBartosz Sobczak 	FLUSH_RETRY_EXC_ERR,
228cdcd52d4SBartosz Sobczak 	FLUSH_MW_BIND_ERR,
229cdcd52d4SBartosz Sobczak 	FLUSH_REM_INV_REQ_ERR,
230777e472cSBartosz Sobczak };
231777e472cSBartosz Sobczak 
232777e472cSBartosz Sobczak enum irdma_qp_event_type {
233777e472cSBartosz Sobczak 	IRDMA_QP_EVENT_CATASTROPHIC,
234777e472cSBartosz Sobczak 	IRDMA_QP_EVENT_ACCESS_ERR,
235777e472cSBartosz Sobczak 	IRDMA_QP_EVENT_REQ_ERR,
236cdcd52d4SBartosz Sobczak };
237cdcd52d4SBartosz Sobczak 
238cdcd52d4SBartosz Sobczak enum irdma_cmpl_status {
239cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_SUCCESS = 0,
240cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_FLUSHED,
241cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_INVALID_WQE,
242cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_QP_CATASTROPHIC,
243cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_REMOTE_TERMINATION,
244cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_INVALID_STAG,
245cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_BASE_BOUND_VIOLATION,
246cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_ACCESS_VIOLATION,
247cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_INVALID_PD_ID,
248cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_WRAP_ERROR,
249cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_STAG_INVALID_PDID,
250cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_RDMA_READ_ZERO_ORD,
251cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_QP_NOT_PRIVLEDGED,
252cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_STAG_NOT_INVALID,
253cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_INVALID_PHYS_BUF_SIZE,
254cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_INVALID_PHYS_BUF_ENTRY,
255cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_INVALID_FBO,
256cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_INVALID_LEN,
257cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_INVALID_ACCESS,
258cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_PHYS_BUF_LIST_TOO_LONG,
259cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_INVALID_VIRT_ADDRESS,
260cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_INVALID_REGION,
261cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_INVALID_WINDOW,
262cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_INVALID_TOTAL_LEN,
263cdcd52d4SBartosz Sobczak 	IRDMA_COMPL_STATUS_UNKNOWN,
264cdcd52d4SBartosz Sobczak };
265cdcd52d4SBartosz Sobczak 
266cdcd52d4SBartosz Sobczak enum irdma_cmpl_notify {
267cdcd52d4SBartosz Sobczak 	IRDMA_CQ_COMPL_EVENT     = 0,
268cdcd52d4SBartosz Sobczak 	IRDMA_CQ_COMPL_SOLICITED = 1,
269cdcd52d4SBartosz Sobczak };
270cdcd52d4SBartosz Sobczak 
271cdcd52d4SBartosz Sobczak enum irdma_qp_caps {
272cdcd52d4SBartosz Sobczak 	IRDMA_WRITE_WITH_IMM = 1,
273cdcd52d4SBartosz Sobczak 	IRDMA_SEND_WITH_IMM  = 2,
274cdcd52d4SBartosz Sobczak 	IRDMA_ROCE	     = 4,
275cdcd52d4SBartosz Sobczak 	IRDMA_PUSH_MODE      = 8,
276cdcd52d4SBartosz Sobczak };
277cdcd52d4SBartosz Sobczak 
278cdcd52d4SBartosz Sobczak struct irdma_qp_uk;
279cdcd52d4SBartosz Sobczak struct irdma_cq_uk;
280cdcd52d4SBartosz Sobczak struct irdma_qp_uk_init_info;
281cdcd52d4SBartosz Sobczak struct irdma_cq_uk_init_info;
282cdcd52d4SBartosz Sobczak 
283cdcd52d4SBartosz Sobczak struct irdma_sge {
284cdcd52d4SBartosz Sobczak 	irdma_tagged_offset tag_off;
285cdcd52d4SBartosz Sobczak 	u32 len;
286cdcd52d4SBartosz Sobczak 	irdma_stag stag;
287cdcd52d4SBartosz Sobczak };
288cdcd52d4SBartosz Sobczak 
289cdcd52d4SBartosz Sobczak struct irdma_ring {
290cdcd52d4SBartosz Sobczak 	volatile u32 head;
291777e472cSBartosz Sobczak 	volatile u32 tail;	/* effective tail */
292cdcd52d4SBartosz Sobczak 	u32 size;
293cdcd52d4SBartosz Sobczak };
294cdcd52d4SBartosz Sobczak 
295cdcd52d4SBartosz Sobczak struct irdma_cqe {
296cdcd52d4SBartosz Sobczak 	__le64 buf[IRDMA_CQE_SIZE];
297cdcd52d4SBartosz Sobczak };
298cdcd52d4SBartosz Sobczak 
299cdcd52d4SBartosz Sobczak struct irdma_extended_cqe {
300cdcd52d4SBartosz Sobczak 	__le64 buf[IRDMA_EXTENDED_CQE_SIZE];
301cdcd52d4SBartosz Sobczak };
302cdcd52d4SBartosz Sobczak 
303cdcd52d4SBartosz Sobczak struct irdma_post_send {
304cdcd52d4SBartosz Sobczak 	irdma_sgl sg_list;
305cdcd52d4SBartosz Sobczak 	u32 num_sges;
306cdcd52d4SBartosz Sobczak 	u32 qkey;
307cdcd52d4SBartosz Sobczak 	u32 dest_qp;
308cdcd52d4SBartosz Sobczak 	u32 ah_id;
309cdcd52d4SBartosz Sobczak };
310cdcd52d4SBartosz Sobczak 
311cdcd52d4SBartosz Sobczak struct irdma_post_rq_info {
312cdcd52d4SBartosz Sobczak 	u64 wr_id;
313cdcd52d4SBartosz Sobczak 	irdma_sgl sg_list;
314cdcd52d4SBartosz Sobczak 	u32 num_sges;
315cdcd52d4SBartosz Sobczak };
316cdcd52d4SBartosz Sobczak 
317cdcd52d4SBartosz Sobczak struct irdma_rdma_write {
318cdcd52d4SBartosz Sobczak 	irdma_sgl lo_sg_list;
319cdcd52d4SBartosz Sobczak 	u32 num_lo_sges;
320cdcd52d4SBartosz Sobczak 	struct irdma_sge rem_addr;
321cdcd52d4SBartosz Sobczak };
322cdcd52d4SBartosz Sobczak 
323cdcd52d4SBartosz Sobczak struct irdma_rdma_read {
324cdcd52d4SBartosz Sobczak 	irdma_sgl lo_sg_list;
325cdcd52d4SBartosz Sobczak 	u32 num_lo_sges;
326cdcd52d4SBartosz Sobczak 	struct irdma_sge rem_addr;
327cdcd52d4SBartosz Sobczak };
328cdcd52d4SBartosz Sobczak 
329cdcd52d4SBartosz Sobczak struct irdma_bind_window {
330cdcd52d4SBartosz Sobczak 	irdma_stag mr_stag;
331cdcd52d4SBartosz Sobczak 	u64 bind_len;
332cdcd52d4SBartosz Sobczak 	void *va;
333cdcd52d4SBartosz Sobczak 	enum irdma_addressing_type addressing_type;
334cdcd52d4SBartosz Sobczak 	bool ena_reads:1;
335cdcd52d4SBartosz Sobczak 	bool ena_writes:1;
336cdcd52d4SBartosz Sobczak 	irdma_stag mw_stag;
337cdcd52d4SBartosz Sobczak 	bool mem_window_type_1:1;
338cdcd52d4SBartosz Sobczak };
339cdcd52d4SBartosz Sobczak 
340cdcd52d4SBartosz Sobczak struct irdma_inv_local_stag {
341cdcd52d4SBartosz Sobczak 	irdma_stag target_stag;
342cdcd52d4SBartosz Sobczak };
343cdcd52d4SBartosz Sobczak 
344cdcd52d4SBartosz Sobczak struct irdma_post_sq_info {
345cdcd52d4SBartosz Sobczak 	u64 wr_id;
346cdcd52d4SBartosz Sobczak 	u8 op_type;
347cdcd52d4SBartosz Sobczak 	u8 l4len;
348cdcd52d4SBartosz Sobczak 	bool signaled:1;
349cdcd52d4SBartosz Sobczak 	bool read_fence:1;
350cdcd52d4SBartosz Sobczak 	bool local_fence:1;
351cdcd52d4SBartosz Sobczak 	bool inline_data:1;
352cdcd52d4SBartosz Sobczak 	bool imm_data_valid:1;
353cdcd52d4SBartosz Sobczak 	bool push_wqe:1;
354cdcd52d4SBartosz Sobczak 	bool report_rtt:1;
355cdcd52d4SBartosz Sobczak 	bool udp_hdr:1;
356cdcd52d4SBartosz Sobczak 	bool defer_flag:1;
357cdcd52d4SBartosz Sobczak 	u32 imm_data;
358cdcd52d4SBartosz Sobczak 	u32 stag_to_inv;
359cdcd52d4SBartosz Sobczak 	union {
360cdcd52d4SBartosz Sobczak 		struct irdma_post_send send;
361cdcd52d4SBartosz Sobczak 		struct irdma_rdma_write rdma_write;
362cdcd52d4SBartosz Sobczak 		struct irdma_rdma_read rdma_read;
363cdcd52d4SBartosz Sobczak 		struct irdma_bind_window bind_window;
364cdcd52d4SBartosz Sobczak 		struct irdma_inv_local_stag inv_local_stag;
365cdcd52d4SBartosz Sobczak 	} op;
366cdcd52d4SBartosz Sobczak };
367cdcd52d4SBartosz Sobczak 
368cdcd52d4SBartosz Sobczak struct irdma_cq_poll_info {
369cdcd52d4SBartosz Sobczak 	u64 wr_id;
370cdcd52d4SBartosz Sobczak 	irdma_qp_handle qp_handle;
371cdcd52d4SBartosz Sobczak 	u32 bytes_xfered;
372cdcd52d4SBartosz Sobczak 	u32 qp_id;
373cdcd52d4SBartosz Sobczak 	u32 ud_src_qpn;
374cdcd52d4SBartosz Sobczak 	u32 imm_data;
375cdcd52d4SBartosz Sobczak 	irdma_stag inv_stag; /* or L_R_Key */
376cdcd52d4SBartosz Sobczak 	enum irdma_cmpl_status comp_status;
377cdcd52d4SBartosz Sobczak 	u16 major_err;
378cdcd52d4SBartosz Sobczak 	u16 minor_err;
379cdcd52d4SBartosz Sobczak 	u16 ud_vlan;
380cdcd52d4SBartosz Sobczak 	u8 ud_smac[6];
381cdcd52d4SBartosz Sobczak 	u8 op_type;
382777e472cSBartosz Sobczak 	u8 q_type;
383cdcd52d4SBartosz Sobczak 	bool stag_invalid_set:1; /* or L_R_Key set */
384cdcd52d4SBartosz Sobczak 	bool push_dropped:1;
385cdcd52d4SBartosz Sobczak 	bool error:1;
386cdcd52d4SBartosz Sobczak 	bool solicited_event:1;
387cdcd52d4SBartosz Sobczak 	bool ipv4:1;
388cdcd52d4SBartosz Sobczak 	bool ud_vlan_valid:1;
389cdcd52d4SBartosz Sobczak 	bool ud_smac_valid:1;
390cdcd52d4SBartosz Sobczak 	bool imm_valid:1;
391cdcd52d4SBartosz Sobczak 	bool signaled:1;
392777e472cSBartosz Sobczak 	union {
393777e472cSBartosz Sobczak 		u32 tcp_sqn;
394777e472cSBartosz Sobczak 		u32 roce_psn;
395777e472cSBartosz Sobczak 		u32 rtt;
396777e472cSBartosz Sobczak 		u32 raw;
397777e472cSBartosz Sobczak 	} stat;
398777e472cSBartosz Sobczak };
399777e472cSBartosz Sobczak 
400777e472cSBartosz Sobczak struct qp_err_code {
401777e472cSBartosz Sobczak 	enum irdma_flush_opcode flush_code;
402777e472cSBartosz Sobczak 	enum irdma_qp_event_type event_type;
403cdcd52d4SBartosz Sobczak };
404cdcd52d4SBartosz Sobczak 
405cdcd52d4SBartosz Sobczak int irdma_uk_inline_rdma_write(struct irdma_qp_uk *qp,
406cdcd52d4SBartosz Sobczak 			       struct irdma_post_sq_info *info, bool post_sq);
407cdcd52d4SBartosz Sobczak int irdma_uk_inline_send(struct irdma_qp_uk *qp,
408cdcd52d4SBartosz Sobczak 			 struct irdma_post_sq_info *info, bool post_sq);
409cdcd52d4SBartosz Sobczak int irdma_uk_post_nop(struct irdma_qp_uk *qp, u64 wr_id, bool signaled,
410cdcd52d4SBartosz Sobczak 		      bool post_sq);
411cdcd52d4SBartosz Sobczak int irdma_uk_post_receive(struct irdma_qp_uk *qp,
412cdcd52d4SBartosz Sobczak 			  struct irdma_post_rq_info *info);
413cdcd52d4SBartosz Sobczak void irdma_uk_qp_post_wr(struct irdma_qp_uk *qp);
414cdcd52d4SBartosz Sobczak int irdma_uk_rdma_read(struct irdma_qp_uk *qp, struct irdma_post_sq_info *info,
415cdcd52d4SBartosz Sobczak 		       bool inv_stag, bool post_sq);
416cdcd52d4SBartosz Sobczak int irdma_uk_rdma_write(struct irdma_qp_uk *qp, struct irdma_post_sq_info *info,
417cdcd52d4SBartosz Sobczak 			bool post_sq);
418cdcd52d4SBartosz Sobczak int irdma_uk_send(struct irdma_qp_uk *qp, struct irdma_post_sq_info *info,
419cdcd52d4SBartosz Sobczak 		  bool post_sq);
420cdcd52d4SBartosz Sobczak int irdma_uk_stag_local_invalidate(struct irdma_qp_uk *qp,
421cdcd52d4SBartosz Sobczak 				   struct irdma_post_sq_info *info,
422cdcd52d4SBartosz Sobczak 				   bool post_sq);
423cdcd52d4SBartosz Sobczak 
424cdcd52d4SBartosz Sobczak struct irdma_wqe_uk_ops {
425777e472cSBartosz Sobczak 	void (*iw_copy_inline_data)(u8 *dest, struct irdma_sge *sge_list, u32 num_sges, u8 polarity);
426cdcd52d4SBartosz Sobczak 	u16 (*iw_inline_data_size_to_quanta)(u32 data_size);
427cdcd52d4SBartosz Sobczak 	void (*iw_set_fragment)(__le64 *wqe, u32 offset, struct irdma_sge *sge,
428cdcd52d4SBartosz Sobczak 				u8 valid);
429cdcd52d4SBartosz Sobczak 	void (*iw_set_mw_bind_wqe)(__le64 *wqe,
430cdcd52d4SBartosz Sobczak 				   struct irdma_bind_window *op_info);
431cdcd52d4SBartosz Sobczak };
432cdcd52d4SBartosz Sobczak 
433cdcd52d4SBartosz Sobczak int irdma_uk_cq_poll_cmpl(struct irdma_cq_uk *cq,
434cdcd52d4SBartosz Sobczak 			  struct irdma_cq_poll_info *info);
435cdcd52d4SBartosz Sobczak void irdma_uk_cq_request_notification(struct irdma_cq_uk *cq,
436cdcd52d4SBartosz Sobczak 				      enum irdma_cmpl_notify cq_notify);
437cdcd52d4SBartosz Sobczak void irdma_uk_cq_resize(struct irdma_cq_uk *cq, void *cq_base, int size);
438cdcd52d4SBartosz Sobczak void irdma_uk_cq_set_resized_cnt(struct irdma_cq_uk *qp, u16 cnt);
439cdcd52d4SBartosz Sobczak int irdma_uk_cq_init(struct irdma_cq_uk *cq,
440cdcd52d4SBartosz Sobczak 		     struct irdma_cq_uk_init_info *info);
441cdcd52d4SBartosz Sobczak int irdma_uk_qp_init(struct irdma_qp_uk *qp,
442cdcd52d4SBartosz Sobczak 		     struct irdma_qp_uk_init_info *info);
443777e472cSBartosz Sobczak void irdma_uk_calc_shift_wq(struct irdma_qp_uk_init_info *ukinfo, u8 *sq_shift,
444777e472cSBartosz Sobczak 			    u8 *rq_shift);
445777e472cSBartosz Sobczak int irdma_uk_calc_depth_shift_sq(struct irdma_qp_uk_init_info *ukinfo,
446777e472cSBartosz Sobczak 				 u32 *sq_depth, u8 *sq_shift);
447777e472cSBartosz Sobczak int irdma_uk_calc_depth_shift_rq(struct irdma_qp_uk_init_info *ukinfo,
448777e472cSBartosz Sobczak 				 u32 *rq_depth, u8 *rq_shift);
449cdcd52d4SBartosz Sobczak struct irdma_sq_uk_wr_trk_info {
450cdcd52d4SBartosz Sobczak 	u64 wrid;
451cdcd52d4SBartosz Sobczak 	u32 wr_len;
452cdcd52d4SBartosz Sobczak 	u16 quanta;
453cdcd52d4SBartosz Sobczak 	u8 signaled;
454cdcd52d4SBartosz Sobczak 	u8 reserved[1];
455cdcd52d4SBartosz Sobczak };
456cdcd52d4SBartosz Sobczak 
457cdcd52d4SBartosz Sobczak struct irdma_qp_quanta {
458cdcd52d4SBartosz Sobczak 	__le64 elem[IRDMA_WQE_SIZE];
459cdcd52d4SBartosz Sobczak };
460cdcd52d4SBartosz Sobczak 
461cdcd52d4SBartosz Sobczak struct irdma_qp_uk {
462cdcd52d4SBartosz Sobczak 	struct irdma_qp_quanta *sq_base;
463cdcd52d4SBartosz Sobczak 	struct irdma_qp_quanta *rq_base;
464cdcd52d4SBartosz Sobczak 	struct irdma_uk_attrs *uk_attrs;
465cdcd52d4SBartosz Sobczak 	u32 IOMEM *wqe_alloc_db;
466cdcd52d4SBartosz Sobczak 	struct irdma_sq_uk_wr_trk_info *sq_wrtrk_array;
467cdcd52d4SBartosz Sobczak 	struct irdma_sig_wr_trk_info *sq_sigwrtrk_array;
468cdcd52d4SBartosz Sobczak 	u64 *rq_wrid_array;
469cdcd52d4SBartosz Sobczak 	__le64 *shadow_area;
470cdcd52d4SBartosz Sobczak 	__le32 *push_db;
471cdcd52d4SBartosz Sobczak 	__le64 *push_wqe;
472cdcd52d4SBartosz Sobczak 	struct irdma_ring sq_ring;
473cdcd52d4SBartosz Sobczak 	struct irdma_ring sq_sig_ring;
474cdcd52d4SBartosz Sobczak 	struct irdma_ring rq_ring;
475cdcd52d4SBartosz Sobczak 	struct irdma_ring initial_ring;
476cdcd52d4SBartosz Sobczak 	u32 qp_id;
477cdcd52d4SBartosz Sobczak 	u32 qp_caps;
478cdcd52d4SBartosz Sobczak 	u32 sq_size;
479cdcd52d4SBartosz Sobczak 	u32 rq_size;
480cdcd52d4SBartosz Sobczak 	u32 max_sq_frag_cnt;
481cdcd52d4SBartosz Sobczak 	u32 max_rq_frag_cnt;
482cdcd52d4SBartosz Sobczak 	u32 max_inline_data;
483cdcd52d4SBartosz Sobczak 	u32 last_rx_cmpl_idx;
484cdcd52d4SBartosz Sobczak 	u32 last_tx_cmpl_idx;
485cdcd52d4SBartosz Sobczak 	struct irdma_wqe_uk_ops wqe_ops;
486cdcd52d4SBartosz Sobczak 	u16 conn_wqes;
487cdcd52d4SBartosz Sobczak 	u8 qp_type;
488cdcd52d4SBartosz Sobczak 	u8 swqe_polarity;
489cdcd52d4SBartosz Sobczak 	u8 swqe_polarity_deferred;
490cdcd52d4SBartosz Sobczak 	u8 rwqe_polarity;
491cdcd52d4SBartosz Sobczak 	u8 rq_wqe_size;
492cdcd52d4SBartosz Sobczak 	u8 rq_wqe_size_multiplier;
493cdcd52d4SBartosz Sobczak 	bool deferred_flag:1;
494cdcd52d4SBartosz Sobczak 	bool push_mode:1; /* whether the last post wqe was pushed */
495cdcd52d4SBartosz Sobczak 	bool push_dropped:1;
496cdcd52d4SBartosz Sobczak 	bool first_sq_wq:1;
497cdcd52d4SBartosz Sobczak 	bool sq_flush_complete:1; /* Indicates flush was seen and SQ was empty after the flush */
498cdcd52d4SBartosz Sobczak 	bool rq_flush_complete:1; /* Indicates flush was seen and RQ was empty after the flush */
499cdcd52d4SBartosz Sobczak 	bool destroy_pending:1; /* Indicates the QP is being destroyed */
500cdcd52d4SBartosz Sobczak 	void *back_qp;
501cdcd52d4SBartosz Sobczak 	spinlock_t *lock;
502cdcd52d4SBartosz Sobczak 	u8 dbg_rq_flushed;
503cdcd52d4SBartosz Sobczak 	u16 ord_cnt;
504cdcd52d4SBartosz Sobczak 	u8 sq_flush_seen;
505cdcd52d4SBartosz Sobczak 	u8 rq_flush_seen;
506cdcd52d4SBartosz Sobczak 	u8 rd_fence_rate;
507cdcd52d4SBartosz Sobczak };
508cdcd52d4SBartosz Sobczak 
509cdcd52d4SBartosz Sobczak struct irdma_cq_uk {
510cdcd52d4SBartosz Sobczak 	struct irdma_cqe *cq_base;
511cdcd52d4SBartosz Sobczak 	u32 IOMEM *cqe_alloc_db;
512cdcd52d4SBartosz Sobczak 	u32 IOMEM *cq_ack_db;
513cdcd52d4SBartosz Sobczak 	__le64 *shadow_area;
514cdcd52d4SBartosz Sobczak 	u32 cq_id;
515cdcd52d4SBartosz Sobczak 	u32 cq_size;
516cdcd52d4SBartosz Sobczak 	struct irdma_ring cq_ring;
517cdcd52d4SBartosz Sobczak 	u8 polarity;
518cdcd52d4SBartosz Sobczak 	bool avoid_mem_cflct:1;
519cdcd52d4SBartosz Sobczak };
520cdcd52d4SBartosz Sobczak 
521cdcd52d4SBartosz Sobczak struct irdma_qp_uk_init_info {
522cdcd52d4SBartosz Sobczak 	struct irdma_qp_quanta *sq;
523cdcd52d4SBartosz Sobczak 	struct irdma_qp_quanta *rq;
524cdcd52d4SBartosz Sobczak 	struct irdma_uk_attrs *uk_attrs;
525cdcd52d4SBartosz Sobczak 	u32 IOMEM *wqe_alloc_db;
526cdcd52d4SBartosz Sobczak 	__le64 *shadow_area;
527cdcd52d4SBartosz Sobczak 	struct irdma_sq_uk_wr_trk_info *sq_wrtrk_array;
528cdcd52d4SBartosz Sobczak 	struct irdma_sig_wr_trk_info *sq_sigwrtrk_array;
529cdcd52d4SBartosz Sobczak 	u64 *rq_wrid_array;
530cdcd52d4SBartosz Sobczak 	u32 qp_id;
531cdcd52d4SBartosz Sobczak 	u32 qp_caps;
532cdcd52d4SBartosz Sobczak 	u32 sq_size;
533cdcd52d4SBartosz Sobczak 	u32 rq_size;
534cdcd52d4SBartosz Sobczak 	u32 max_sq_frag_cnt;
535cdcd52d4SBartosz Sobczak 	u32 max_rq_frag_cnt;
536cdcd52d4SBartosz Sobczak 	u32 max_inline_data;
537777e472cSBartosz Sobczak 	u32 sq_depth;
538777e472cSBartosz Sobczak 	u32 rq_depth;
539cdcd52d4SBartosz Sobczak 	u8 first_sq_wq;
540cdcd52d4SBartosz Sobczak 	u8 type;
541777e472cSBartosz Sobczak 	u8 sq_shift;
542777e472cSBartosz Sobczak 	u8 rq_shift;
543cdcd52d4SBartosz Sobczak 	u8 rd_fence_rate;
544cdcd52d4SBartosz Sobczak 	int abi_ver;
545cdcd52d4SBartosz Sobczak 	bool legacy_mode;
546cdcd52d4SBartosz Sobczak };
547cdcd52d4SBartosz Sobczak 
548cdcd52d4SBartosz Sobczak struct irdma_cq_uk_init_info {
549cdcd52d4SBartosz Sobczak 	u32 IOMEM *cqe_alloc_db;
550cdcd52d4SBartosz Sobczak 	u32 IOMEM *cq_ack_db;
551cdcd52d4SBartosz Sobczak 	struct irdma_cqe *cq_base;
552cdcd52d4SBartosz Sobczak 	__le64 *shadow_area;
553cdcd52d4SBartosz Sobczak 	u32 cq_size;
554cdcd52d4SBartosz Sobczak 	u32 cq_id;
555cdcd52d4SBartosz Sobczak 	bool avoid_mem_cflct;
556cdcd52d4SBartosz Sobczak };
557cdcd52d4SBartosz Sobczak 
558cdcd52d4SBartosz Sobczak __le64 *irdma_qp_get_next_send_wqe(struct irdma_qp_uk *qp, u32 *wqe_idx,
559777e472cSBartosz Sobczak 				   u16 *quanta, u32 total_size,
560cdcd52d4SBartosz Sobczak 				   struct irdma_post_sq_info *info);
561cdcd52d4SBartosz Sobczak __le64 *irdma_qp_get_next_recv_wqe(struct irdma_qp_uk *qp, u32 *wqe_idx);
562cdcd52d4SBartosz Sobczak int irdma_uk_clean_cq(void *q, struct irdma_cq_uk *cq);
563cdcd52d4SBartosz Sobczak int irdma_nop(struct irdma_qp_uk *qp, u64 wr_id, bool signaled, bool post_sq);
564cdcd52d4SBartosz Sobczak int irdma_fragcnt_to_quanta_sq(u32 frag_cnt, u16 *quanta);
565cdcd52d4SBartosz Sobczak int irdma_fragcnt_to_wqesize_rq(u32 frag_cnt, u16 *wqe_size);
566cdcd52d4SBartosz Sobczak void irdma_get_wqe_shift(struct irdma_uk_attrs *uk_attrs, u32 sge,
567cdcd52d4SBartosz Sobczak 			 u32 inline_data, u8 *shift);
568777e472cSBartosz Sobczak int irdma_get_sqdepth(struct irdma_uk_attrs *uk_attrs, u32 sq_size, u8 shift, u32 *sqdepth);
569777e472cSBartosz Sobczak int irdma_get_rqdepth(struct irdma_uk_attrs *uk_attrs, u32 rq_size, u8 shift, u32 *rqdepth);
570cdcd52d4SBartosz Sobczak void irdma_qp_push_wqe(struct irdma_qp_uk *qp, __le64 *wqe, u16 quanta,
571cdcd52d4SBartosz Sobczak 		       u32 wqe_idx, bool post_sq);
572cdcd52d4SBartosz Sobczak void irdma_clr_wqes(struct irdma_qp_uk *qp, u32 qp_wqe_idx);
573777e472cSBartosz Sobczak 
574777e472cSBartosz Sobczak static inline struct qp_err_code irdma_ae_to_qp_err_code(u16 ae_id)
575777e472cSBartosz Sobczak {
576777e472cSBartosz Sobczak 	struct qp_err_code qp_err = { 0 };
577777e472cSBartosz Sobczak 
578777e472cSBartosz Sobczak 	switch (ae_id) {
579777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_BOUNDS_VIOLATION:
580777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_INVALID_STAG:
581777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_RIGHTS_VIOLATION:
582777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_UNALLOCATED_STAG:
583777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_BAD_PD:
584777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_BAD_QP:
585777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_BAD_STAG_KEY:
586777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_BAD_STAG_INDEX:
587777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_TO_WRAP:
588777e472cSBartosz Sobczak 	case IRDMA_AE_PRIV_OPERATION_DENIED:
589777e472cSBartosz Sobczak 		qp_err.flush_code = FLUSH_PROT_ERR;
590777e472cSBartosz Sobczak 		qp_err.event_type = IRDMA_QP_EVENT_ACCESS_ERR;
591777e472cSBartosz Sobczak 		break;
592777e472cSBartosz Sobczak 	case IRDMA_AE_UDA_XMIT_BAD_PD:
593777e472cSBartosz Sobczak 	case IRDMA_AE_WQE_UNEXPECTED_OPCODE:
594777e472cSBartosz Sobczak 		qp_err.flush_code = FLUSH_LOC_QP_OP_ERR;
595777e472cSBartosz Sobczak 		qp_err.event_type = IRDMA_QP_EVENT_CATASTROPHIC;
596777e472cSBartosz Sobczak 		break;
597777e472cSBartosz Sobczak 	case IRDMA_AE_UDA_XMIT_DGRAM_TOO_SHORT:
598777e472cSBartosz Sobczak 	case IRDMA_AE_UDA_XMIT_DGRAM_TOO_LONG:
599777e472cSBartosz Sobczak 	case IRDMA_AE_UDA_L4LEN_INVALID:
600777e472cSBartosz Sobczak 	case IRDMA_AE_DDP_UBE_INVALID_MO:
601777e472cSBartosz Sobczak 	case IRDMA_AE_DDP_UBE_DDP_MESSAGE_TOO_LONG_FOR_AVAILABLE_BUFFER:
602777e472cSBartosz Sobczak 		qp_err.flush_code = FLUSH_LOC_LEN_ERR;
603777e472cSBartosz Sobczak 		qp_err.event_type = IRDMA_QP_EVENT_CATASTROPHIC;
604777e472cSBartosz Sobczak 		break;
605777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_INVALIDATE_NO_REMOTE_ACCESS_RIGHTS:
606777e472cSBartosz Sobczak 	case IRDMA_AE_IB_REMOTE_ACCESS_ERROR:
607777e472cSBartosz Sobczak 		qp_err.flush_code = FLUSH_REM_ACCESS_ERR;
608777e472cSBartosz Sobczak 		qp_err.event_type = IRDMA_QP_EVENT_ACCESS_ERR;
609777e472cSBartosz Sobczak 		break;
610777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_MWBIND_INVALID_RIGHTS:
611777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_MWBIND_BIND_DISABLED:
612777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_MWBIND_INVALID_BOUNDS:
613777e472cSBartosz Sobczak 	case IRDMA_AE_AMP_MWBIND_VALID_STAG:
614777e472cSBartosz Sobczak 		qp_err.flush_code = FLUSH_MW_BIND_ERR;
615777e472cSBartosz Sobczak 		qp_err.event_type = IRDMA_QP_EVENT_ACCESS_ERR;
616777e472cSBartosz Sobczak 		break;
617777e472cSBartosz Sobczak 	case IRDMA_AE_LLP_TOO_MANY_RETRIES:
618777e472cSBartosz Sobczak 		qp_err.flush_code = FLUSH_RETRY_EXC_ERR;
619777e472cSBartosz Sobczak 		qp_err.event_type = IRDMA_QP_EVENT_CATASTROPHIC;
620777e472cSBartosz Sobczak 		break;
621777e472cSBartosz Sobczak 	case IRDMA_AE_IB_INVALID_REQUEST:
622777e472cSBartosz Sobczak 		qp_err.flush_code = FLUSH_REM_INV_REQ_ERR;
623777e472cSBartosz Sobczak 		qp_err.event_type = IRDMA_QP_EVENT_REQ_ERR;
624777e472cSBartosz Sobczak 		break;
625777e472cSBartosz Sobczak 	case IRDMA_AE_LLP_SEGMENT_TOO_SMALL:
626777e472cSBartosz Sobczak 	case IRDMA_AE_LLP_RECEIVED_MPA_CRC_ERROR:
627777e472cSBartosz Sobczak 	case IRDMA_AE_ROCE_RSP_LENGTH_ERROR:
628777e472cSBartosz Sobczak 	case IRDMA_AE_IB_REMOTE_OP_ERROR:
629777e472cSBartosz Sobczak 		qp_err.flush_code = FLUSH_REM_OP_ERR;
630777e472cSBartosz Sobczak 		qp_err.event_type = IRDMA_QP_EVENT_CATASTROPHIC;
631777e472cSBartosz Sobczak 		break;
632777e472cSBartosz Sobczak 	case IRDMA_AE_LCE_QP_CATASTROPHIC:
633777e472cSBartosz Sobczak 		qp_err.flush_code = FLUSH_FATAL_ERR;
634777e472cSBartosz Sobczak 		qp_err.event_type = IRDMA_QP_EVENT_CATASTROPHIC;
635777e472cSBartosz Sobczak 		break;
636777e472cSBartosz Sobczak 	default:
637777e472cSBartosz Sobczak 		qp_err.flush_code = FLUSH_GENERAL_ERR;
638777e472cSBartosz Sobczak 		qp_err.event_type = IRDMA_QP_EVENT_CATASTROPHIC;
639777e472cSBartosz Sobczak 		break;
640777e472cSBartosz Sobczak 	}
641777e472cSBartosz Sobczak 
642777e472cSBartosz Sobczak 	return qp_err;
643777e472cSBartosz Sobczak }
644cdcd52d4SBartosz Sobczak #endif /* IRDMA_USER_H */
645