xref: /freebsd/sys/dev/mlx5/qp.h (revision e23731db48ef9c6568d4768b1f87d48514339faa)
1dc7e38acSHans Petter Selasky /*-
27b9b93a8SHans Petter Selasky  * Copyright (c) 2013-2017, Mellanox Technologies, Ltd.  All rights reserved.
3dc7e38acSHans Petter Selasky  *
4dc7e38acSHans Petter Selasky  * Redistribution and use in source and binary forms, with or without
5dc7e38acSHans Petter Selasky  * modification, are permitted provided that the following conditions
6dc7e38acSHans Petter Selasky  * are met:
7dc7e38acSHans Petter Selasky  * 1. Redistributions of source code must retain the above copyright
8dc7e38acSHans Petter Selasky  *    notice, this list of conditions and the following disclaimer.
9dc7e38acSHans Petter Selasky  * 2. Redistributions in binary form must reproduce the above copyright
10dc7e38acSHans Petter Selasky  *    notice, this list of conditions and the following disclaimer in the
11dc7e38acSHans Petter Selasky  *    documentation and/or other materials provided with the distribution.
12dc7e38acSHans Petter Selasky  *
13dc7e38acSHans Petter Selasky  * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS `AS IS' AND
14dc7e38acSHans Petter Selasky  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15dc7e38acSHans Petter Selasky  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16dc7e38acSHans Petter Selasky  * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
17dc7e38acSHans Petter Selasky  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18dc7e38acSHans Petter Selasky  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19dc7e38acSHans Petter Selasky  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20dc7e38acSHans Petter Selasky  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21dc7e38acSHans Petter Selasky  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22dc7e38acSHans Petter Selasky  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23dc7e38acSHans Petter Selasky  * SUCH DAMAGE.
24dc7e38acSHans Petter Selasky  */
25dc7e38acSHans Petter Selasky 
26dc7e38acSHans Petter Selasky #ifndef MLX5_QP_H
27dc7e38acSHans Petter Selasky #define MLX5_QP_H
28dc7e38acSHans Petter Selasky 
29dc7e38acSHans Petter Selasky #include <dev/mlx5/driver.h>
30dc7e38acSHans Petter Selasky 
31dc7e38acSHans Petter Selasky #define MLX5_INVALID_LKEY	0x100
32dc7e38acSHans Petter Selasky #define MLX5_SIG_WQE_SIZE	(MLX5_SEND_WQE_BB * 5)
33dc7e38acSHans Petter Selasky #define MLX5_DIF_SIZE		8
34dc7e38acSHans Petter Selasky #define MLX5_STRIDE_BLOCK_OP	0x400
35dc7e38acSHans Petter Selasky #define MLX5_CPY_GRD_MASK	0xc0
36dc7e38acSHans Petter Selasky #define MLX5_CPY_APP_MASK	0x30
37dc7e38acSHans Petter Selasky #define MLX5_CPY_REF_MASK	0x0f
38dc7e38acSHans Petter Selasky #define MLX5_BSF_INC_REFTAG	(1 << 6)
39dc7e38acSHans Petter Selasky #define MLX5_BSF_INL_VALID	(1 << 15)
40dc7e38acSHans Petter Selasky #define MLX5_BSF_REFRESH_DIF	(1 << 14)
41dc7e38acSHans Petter Selasky #define MLX5_BSF_REPEAT_BLOCK	(1 << 7)
42dc7e38acSHans Petter Selasky #define MLX5_BSF_APPTAG_ESCAPE	0x1
43dc7e38acSHans Petter Selasky #define MLX5_BSF_APPREF_ESCAPE	0x2
444b109912SHans Petter Selasky #define MLX5_WQE_DS_UNITS 16
45dc7e38acSHans Petter Selasky 
46dc7e38acSHans Petter Selasky enum mlx5_qp_optpar {
47dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_ALT_ADDR_PATH		= 1 << 0,
48dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_RRE			= 1 << 1,
49dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_RAE			= 1 << 2,
50dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_RWE			= 1 << 3,
51dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_PKEY_INDEX		= 1 << 4,
52dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_Q_KEY			= 1 << 5,
53dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_RNR_TIMEOUT		= 1 << 6,
54dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_PRIMARY_ADDR_PATH	= 1 << 7,
55dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_SRA_MAX			= 1 << 8,
56dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_RRA_MAX			= 1 << 9,
57dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_PM_STATE			= 1 << 10,
58dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_RETRY_COUNT		= 1 << 12,
59dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_RNR_RETRY		= 1 << 13,
60dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_ACK_TIMEOUT		= 1 << 14,
61dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_PRI_PORT			= 1 << 16,
62dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_SRQN			= 1 << 18,
63dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_CQN_RCV			= 1 << 19,
64dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_DC_HS			= 1 << 20,
65dc7e38acSHans Petter Selasky 	MLX5_QP_OPTPAR_DC_KEY			= 1 << 21,
66dc7e38acSHans Petter Selasky };
67dc7e38acSHans Petter Selasky 
68dc7e38acSHans Petter Selasky enum mlx5_qp_state {
69dc7e38acSHans Petter Selasky 	MLX5_QP_STATE_RST			= 0,
70dc7e38acSHans Petter Selasky 	MLX5_QP_STATE_INIT			= 1,
71dc7e38acSHans Petter Selasky 	MLX5_QP_STATE_RTR			= 2,
72dc7e38acSHans Petter Selasky 	MLX5_QP_STATE_RTS			= 3,
73dc7e38acSHans Petter Selasky 	MLX5_QP_STATE_SQER			= 4,
74dc7e38acSHans Petter Selasky 	MLX5_QP_STATE_SQD			= 5,
75dc7e38acSHans Petter Selasky 	MLX5_QP_STATE_ERR			= 6,
76dc7e38acSHans Petter Selasky 	MLX5_QP_STATE_SQ_DRAINING		= 7,
77dc7e38acSHans Petter Selasky 	MLX5_QP_STATE_SUSPENDED			= 9,
784b109912SHans Petter Selasky 	MLX5_QP_NUM_STATE,
794b109912SHans Petter Selasky 	MLX5_QP_STATE,
804b109912SHans Petter Selasky 	MLX5_QP_STATE_BAD,
814b109912SHans Petter Selasky };
824b109912SHans Petter Selasky 
834b109912SHans Petter Selasky enum {
844b109912SHans Petter Selasky 	MLX5_SQ_STATE_NA	= MLX5_SQC_STATE_ERR + 1,
854b109912SHans Petter Selasky 	MLX5_SQ_NUM_STATE	= MLX5_SQ_STATE_NA + 1,
864b109912SHans Petter Selasky 	MLX5_RQ_STATE_NA	= MLX5_RQC_STATE_ERR + 1,
874b109912SHans Petter Selasky 	MLX5_RQ_NUM_STATE	= MLX5_RQ_STATE_NA + 1,
88dc7e38acSHans Petter Selasky };
89dc7e38acSHans Petter Selasky 
90dc7e38acSHans Petter Selasky enum {
91dc7e38acSHans Petter Selasky 	MLX5_QP_ST_RC				= 0x0,
92dc7e38acSHans Petter Selasky 	MLX5_QP_ST_UC				= 0x1,
93dc7e38acSHans Petter Selasky 	MLX5_QP_ST_UD				= 0x2,
94dc7e38acSHans Petter Selasky 	MLX5_QP_ST_XRC				= 0x3,
95dc7e38acSHans Petter Selasky 	MLX5_QP_ST_MLX				= 0x4,
96dc7e38acSHans Petter Selasky 	MLX5_QP_ST_DCI				= 0x5,
97dc7e38acSHans Petter Selasky 	MLX5_QP_ST_DCT				= 0x6,
98dc7e38acSHans Petter Selasky 	MLX5_QP_ST_QP0				= 0x7,
99dc7e38acSHans Petter Selasky 	MLX5_QP_ST_QP1				= 0x8,
100dc7e38acSHans Petter Selasky 	MLX5_QP_ST_RAW_ETHERTYPE		= 0x9,
101dc7e38acSHans Petter Selasky 	MLX5_QP_ST_RAW_IPV6			= 0xa,
102dc7e38acSHans Petter Selasky 	MLX5_QP_ST_SNIFFER			= 0xb,
103dc7e38acSHans Petter Selasky 	MLX5_QP_ST_SYNC_UMR			= 0xe,
104dc7e38acSHans Petter Selasky 	MLX5_QP_ST_PTP_1588			= 0xd,
105dc7e38acSHans Petter Selasky 	MLX5_QP_ST_REG_UMR			= 0xc,
106cb4e4a6eSHans Petter Selasky 	MLX5_QP_ST_SW_CNAK			= 0x10,
107dc7e38acSHans Petter Selasky 	MLX5_QP_ST_MAX
108dc7e38acSHans Petter Selasky };
109dc7e38acSHans Petter Selasky 
110dc7e38acSHans Petter Selasky enum {
111059ecd56SHans Petter Selasky 	MLX5_NON_ZERO_RQ	= 0x0,
112059ecd56SHans Petter Selasky 	MLX5_SRQ_RQ		= 0x1,
113059ecd56SHans Petter Selasky 	MLX5_CRQ_RQ		= 0x2,
114059ecd56SHans Petter Selasky 	MLX5_ZERO_LEN_RQ	= 0x3
115dc7e38acSHans Petter Selasky };
116dc7e38acSHans Petter Selasky 
117dc7e38acSHans Petter Selasky enum {
118dc7e38acSHans Petter Selasky 	/* params1 */
119dc7e38acSHans Petter Selasky 	MLX5_QP_BIT_SRE				= 1 << 15,
120dc7e38acSHans Petter Selasky 	MLX5_QP_BIT_SWE				= 1 << 14,
121dc7e38acSHans Petter Selasky 	MLX5_QP_BIT_SAE				= 1 << 13,
122dc7e38acSHans Petter Selasky 	/* params2 */
123dc7e38acSHans Petter Selasky 	MLX5_QP_BIT_RRE				= 1 << 15,
124dc7e38acSHans Petter Selasky 	MLX5_QP_BIT_RWE				= 1 << 14,
125dc7e38acSHans Petter Selasky 	MLX5_QP_BIT_RAE				= 1 << 13,
126dc7e38acSHans Petter Selasky 	MLX5_QP_BIT_RIC				= 1 <<	4,
127cb4e4a6eSHans Petter Selasky 	MLX5_QP_BIT_COLL_SYNC_RQ                = 1 << 2,
128cb4e4a6eSHans Petter Selasky 	MLX5_QP_BIT_COLL_SYNC_SQ                = 1 << 1,
129cb4e4a6eSHans Petter Selasky 	MLX5_QP_BIT_COLL_MASTER                 = 1 << 0
130cb4e4a6eSHans Petter Selasky };
131cb4e4a6eSHans Petter Selasky 
132cb4e4a6eSHans Petter Selasky enum {
133cb4e4a6eSHans Petter Selasky 	MLX5_DCT_BIT_RRE		= 1 << 19,
134cb4e4a6eSHans Petter Selasky 	MLX5_DCT_BIT_RWE		= 1 << 18,
135cb4e4a6eSHans Petter Selasky 	MLX5_DCT_BIT_RAE		= 1 << 17,
136dc7e38acSHans Petter Selasky };
137dc7e38acSHans Petter Selasky 
138dc7e38acSHans Petter Selasky enum {
139dc7e38acSHans Petter Selasky 	MLX5_WQE_CTRL_CQ_UPDATE		= 2 << 2,
140dc7e38acSHans Petter Selasky 	MLX5_WQE_CTRL_CQ_UPDATE_AND_EQE	= 3 << 2,
141dc7e38acSHans Petter Selasky 	MLX5_WQE_CTRL_SOLICITED		= 1 << 1,
142dc7e38acSHans Petter Selasky };
143dc7e38acSHans Petter Selasky 
1440a833dffSHans Petter Selasky #define	MLX5_SEND_WQE_DS	16
1450a833dffSHans Petter Selasky #define	MLX5_SEND_WQE_BB	64
146dc7e38acSHans Petter Selasky #define MLX5_SEND_WQEBB_NUM_DS	(MLX5_SEND_WQE_BB / MLX5_SEND_WQE_DS)
147*e23731dbSKonstantin Belousov #define MLX5_WQE_CTRL_QPN_SHIFT 8
148*e23731dbSKonstantin Belousov #define MLX5_WQE_CTRL_WQE_INDEX_SHIFT 8
149dc7e38acSHans Petter Selasky 
150dc7e38acSHans Petter Selasky enum {
151dc7e38acSHans Petter Selasky 	MLX5_SEND_WQE_MAX_WQEBBS	= 16,
152dc7e38acSHans Petter Selasky };
153dc7e38acSHans Petter Selasky 
154dc7e38acSHans Petter Selasky enum {
155dc7e38acSHans Petter Selasky 	MLX5_WQE_FMR_PERM_LOCAL_READ	= 1 << 27,
156dc7e38acSHans Petter Selasky 	MLX5_WQE_FMR_PERM_LOCAL_WRITE	= 1 << 28,
157dc7e38acSHans Petter Selasky 	MLX5_WQE_FMR_PERM_REMOTE_READ	= 1 << 29,
158dc7e38acSHans Petter Selasky 	MLX5_WQE_FMR_PERM_REMOTE_WRITE	= 1 << 30,
15902ca39cfSEitan Adler 	MLX5_WQE_FMR_PERM_ATOMIC	= 1U << 31
160dc7e38acSHans Petter Selasky };
161dc7e38acSHans Petter Selasky 
162dc7e38acSHans Petter Selasky enum {
163dc7e38acSHans Petter Selasky 	MLX5_FENCE_MODE_NONE			= 0 << 5,
164dc7e38acSHans Petter Selasky 	MLX5_FENCE_MODE_INITIATOR_SMALL		= 1 << 5,
1654b109912SHans Petter Selasky 	MLX5_FENCE_MODE_FENCE			= 2 << 5,
166dc7e38acSHans Petter Selasky 	MLX5_FENCE_MODE_STRONG_ORDERING		= 3 << 5,
167dc7e38acSHans Petter Selasky 	MLX5_FENCE_MODE_SMALL_AND_FENCE		= 4 << 5,
168dc7e38acSHans Petter Selasky };
169dc7e38acSHans Petter Selasky 
170dc7e38acSHans Petter Selasky enum {
171dc7e38acSHans Petter Selasky 	MLX5_RCV_DBR	= 0,
172dc7e38acSHans Petter Selasky 	MLX5_SND_DBR	= 1,
173dc7e38acSHans Petter Selasky };
174dc7e38acSHans Petter Selasky 
175dc7e38acSHans Petter Selasky enum {
176dc7e38acSHans Petter Selasky 	MLX5_FLAGS_INLINE	= 1<<7,
177dc7e38acSHans Petter Selasky 	MLX5_FLAGS_CHECK_FREE   = 1<<5,
178dc7e38acSHans Petter Selasky };
179dc7e38acSHans Petter Selasky 
180dc7e38acSHans Petter Selasky struct mlx5_wqe_fmr_seg {
181dc7e38acSHans Petter Selasky 	__be32			flags;
182dc7e38acSHans Petter Selasky 	__be32			mem_key;
183dc7e38acSHans Petter Selasky 	__be64			buf_list;
184dc7e38acSHans Petter Selasky 	__be64			start_addr;
185dc7e38acSHans Petter Selasky 	__be64			reg_len;
186dc7e38acSHans Petter Selasky 	__be32			offset;
187dc7e38acSHans Petter Selasky 	__be32			page_size;
188dc7e38acSHans Petter Selasky 	u32			reserved[2];
189dc7e38acSHans Petter Selasky };
190dc7e38acSHans Petter Selasky 
191dc7e38acSHans Petter Selasky struct mlx5_wqe_ctrl_seg {
192dc7e38acSHans Petter Selasky 	__be32			opmod_idx_opcode;
193dc7e38acSHans Petter Selasky 	__be32			qpn_ds;
194dc7e38acSHans Petter Selasky 	u8			signature;
195dc7e38acSHans Petter Selasky 	u8			rsvd[2];
196dc7e38acSHans Petter Selasky 	u8			fm_ce_se;
197*e23731dbSKonstantin Belousov 	union {
198dc7e38acSHans Petter Selasky 		__be32		imm;
199*e23731dbSKonstantin Belousov 		__be32          general_id;
200*e23731dbSKonstantin Belousov 	};
201dc7e38acSHans Petter Selasky };
202dc7e38acSHans Petter Selasky 
2034b109912SHans Petter Selasky #define MLX5_WQE_CTRL_DS_MASK 0x3f
2044b109912SHans Petter Selasky 
205dc7e38acSHans Petter Selasky enum {
206cb4e4a6eSHans Petter Selasky 	MLX5_MLX_FLAG_MASK_VL15 = 0x40,
207cb4e4a6eSHans Petter Selasky 	MLX5_MLX_FLAG_MASK_SLR	= 0x20,
208cb4e4a6eSHans Petter Selasky 	MLX5_MLX_FLAG_MASK_ICRC = 0x8,
209cb4e4a6eSHans Petter Selasky 	MLX5_MLX_FLAG_MASK_FL	= 4
210cb4e4a6eSHans Petter Selasky };
211cb4e4a6eSHans Petter Selasky 
212cb4e4a6eSHans Petter Selasky struct mlx5_mlx_seg {
213cb4e4a6eSHans Petter Selasky 	__be32		rsvd0;
214cb4e4a6eSHans Petter Selasky 	u8		flags;
215cb4e4a6eSHans Petter Selasky 	u8		stat_rate_sl;
216cb4e4a6eSHans Petter Selasky 	u8		rsvd1[8];
217cb4e4a6eSHans Petter Selasky 	__be16		dlid;
218cb4e4a6eSHans Petter Selasky };
219cb4e4a6eSHans Petter Selasky 
220cb4e4a6eSHans Petter Selasky enum {
221dc7e38acSHans Petter Selasky 	MLX5_ETH_WQE_L3_INNER_CSUM	= 1 << 4,
222dc7e38acSHans Petter Selasky 	MLX5_ETH_WQE_L4_INNER_CSUM	= 1 << 5,
223dc7e38acSHans Petter Selasky 	MLX5_ETH_WQE_L3_CSUM		= 1 << 6,
224dc7e38acSHans Petter Selasky 	MLX5_ETH_WQE_L4_CSUM		= 1 << 7,
225dc7e38acSHans Petter Selasky };
226dc7e38acSHans Petter Selasky 
227cb022443SHans Petter Selasky enum {
2284b109912SHans Petter Selasky 	MLX5_ETH_WQE_SWP_INNER_L3_TYPE = 1 << 0,
2294b109912SHans Petter Selasky 	MLX5_ETH_WQE_SWP_INNER_L4_TYPE = 1 << 1,
2304b109912SHans Petter Selasky 	MLX5_ETH_WQE_SWP_OUTER_L3_TYPE = 1 << 4,
2314b109912SHans Petter Selasky 	MLX5_ETH_WQE_SWP_OUTER_L4_TYPE = 1 << 5,
232cb022443SHans Petter Selasky };
233cb022443SHans Petter Selasky 
234*e23731dbSKonstantin Belousov enum {
235*e23731dbSKonstantin Belousov 	MLX5_ETH_WQE_FT_META_IPSEC = BIT(0),
236*e23731dbSKonstantin Belousov };
237*e23731dbSKonstantin Belousov 
238dc7e38acSHans Petter Selasky struct mlx5_wqe_eth_seg {
239cb022443SHans Petter Selasky 	u8              swp_outer_l4_offset;
240cb022443SHans Petter Selasky 	u8		swp_outer_l3_offset;
241cb022443SHans Petter Selasky 	u8		swp_inner_l4_offset;
242cb022443SHans Petter Selasky 	u8		swp_inner_l3_offset;
243dc7e38acSHans Petter Selasky 	u8		cs_flags;
244cb022443SHans Petter Selasky 	u8		swp_flags;
245dc7e38acSHans Petter Selasky 	__be16		mss;
246*e23731dbSKonstantin Belousov 	__be32		flow_table_metadata;
24705399002SHans Petter Selasky 	union {
24805399002SHans Petter Selasky 		struct {
249dc7e38acSHans Petter Selasky 			__be16		inline_hdr_sz;
250dc7e38acSHans Petter Selasky 			u8		inline_hdr_start[2];
251dc7e38acSHans Petter Selasky 		};
25205399002SHans Petter Selasky 		struct {
25305399002SHans Petter Selasky 			__be16		vlan_cmd;
25405399002SHans Petter Selasky 			__be16		vlan_hdr;
25505399002SHans Petter Selasky 		};
25605399002SHans Petter Selasky 	};
25705399002SHans Petter Selasky };
258dc7e38acSHans Petter Selasky 
259dc7e38acSHans Petter Selasky struct mlx5_wqe_xrc_seg {
260dc7e38acSHans Petter Selasky 	__be32			xrc_srqn;
261dc7e38acSHans Petter Selasky 	u8			rsvd[12];
262dc7e38acSHans Petter Selasky };
263dc7e38acSHans Petter Selasky 
264dc7e38acSHans Petter Selasky struct mlx5_wqe_masked_atomic_seg {
265dc7e38acSHans Petter Selasky 	__be64			swap_add;
266dc7e38acSHans Petter Selasky 	__be64			compare;
267dc7e38acSHans Petter Selasky 	__be64			swap_add_mask;
268dc7e38acSHans Petter Selasky 	__be64			compare_mask;
269dc7e38acSHans Petter Selasky };
270dc7e38acSHans Petter Selasky 
271dc7e38acSHans Petter Selasky struct mlx5_av {
272dc7e38acSHans Petter Selasky 	union {
273dc7e38acSHans Petter Selasky 		struct {
274dc7e38acSHans Petter Selasky 			__be32	qkey;
275dc7e38acSHans Petter Selasky 			__be32	reserved;
276dc7e38acSHans Petter Selasky 		} qkey;
277dc7e38acSHans Petter Selasky 		__be64	dc_key;
278dc7e38acSHans Petter Selasky 	} key;
279dc7e38acSHans Petter Selasky 	__be32	dqp_dct;
280dc7e38acSHans Petter Selasky 	u8	stat_rate_sl;
281dc7e38acSHans Petter Selasky 	u8	fl_mlid;
282dc7e38acSHans Petter Selasky 	union {
283dc7e38acSHans Petter Selasky 		__be16	rlid;
284dc7e38acSHans Petter Selasky 		__be16  udp_sport;
285dc7e38acSHans Petter Selasky 	};
286dc7e38acSHans Petter Selasky 	u8	reserved0[4];
287dc7e38acSHans Petter Selasky 	u8	rmac[6];
288dc7e38acSHans Petter Selasky 	u8	tclass;
289dc7e38acSHans Petter Selasky 	u8	hop_limit;
290dc7e38acSHans Petter Selasky 	__be32	grh_gid_fl;
291dc7e38acSHans Petter Selasky 	u8	rgid[16];
292dc7e38acSHans Petter Selasky };
293dc7e38acSHans Petter Selasky 
294dc7e38acSHans Petter Selasky struct mlx5_wqe_datagram_seg {
295dc7e38acSHans Petter Selasky 	struct mlx5_av	av;
296dc7e38acSHans Petter Selasky };
297dc7e38acSHans Petter Selasky 
298dc7e38acSHans Petter Selasky struct mlx5_wqe_raddr_seg {
299dc7e38acSHans Petter Selasky 	__be64			raddr;
300dc7e38acSHans Petter Selasky 	__be32			rkey;
301dc7e38acSHans Petter Selasky 	u32			reserved;
302dc7e38acSHans Petter Selasky };
303dc7e38acSHans Petter Selasky 
304dc7e38acSHans Petter Selasky struct mlx5_wqe_atomic_seg {
305dc7e38acSHans Petter Selasky 	__be64			swap_add;
306dc7e38acSHans Petter Selasky 	__be64			compare;
307dc7e38acSHans Petter Selasky };
308dc7e38acSHans Petter Selasky 
309dc7e38acSHans Petter Selasky struct mlx5_wqe_data_seg {
310dc7e38acSHans Petter Selasky 	__be32			byte_count;
311dc7e38acSHans Petter Selasky 	__be32			lkey;
312dc7e38acSHans Petter Selasky 	__be64			addr;
313dc7e38acSHans Petter Selasky };
314dc7e38acSHans Petter Selasky 
315dc7e38acSHans Petter Selasky struct mlx5_wqe_umr_ctrl_seg {
316dc7e38acSHans Petter Selasky 	u8		flags;
317dc7e38acSHans Petter Selasky 	u8		rsvd0[3];
318dc7e38acSHans Petter Selasky 	__be16		klm_octowords;
319dc7e38acSHans Petter Selasky 	__be16		bsf_octowords;
320dc7e38acSHans Petter Selasky 	__be64		mkey_mask;
321dc7e38acSHans Petter Selasky 	u8		rsvd1[32];
322dc7e38acSHans Petter Selasky };
323dc7e38acSHans Petter Selasky 
324dc7e38acSHans Petter Selasky struct mlx5_seg_set_psv {
325dc7e38acSHans Petter Selasky 	__be32		psv_num;
326dc7e38acSHans Petter Selasky 	__be16		syndrome;
327dc7e38acSHans Petter Selasky 	__be16		status;
328dc7e38acSHans Petter Selasky 	__be32		transient_sig;
329dc7e38acSHans Petter Selasky 	__be32		ref_tag;
330dc7e38acSHans Petter Selasky };
331dc7e38acSHans Petter Selasky 
332266c81aaSHans Petter Selasky struct mlx5_wqe_qos_remap_seg {
333266c81aaSHans Petter Selasky 	u8		rsvd0[4];
334266c81aaSHans Petter Selasky 	u8		rsvd1[4];
335266c81aaSHans Petter Selasky 	__be32		qos_handle;
336266c81aaSHans Petter Selasky 	__be32		queue_handle;
337266c81aaSHans Petter Selasky };
338266c81aaSHans Petter Selasky 
339dc7e38acSHans Petter Selasky struct mlx5_seg_get_psv {
340dc7e38acSHans Petter Selasky 	u8		rsvd[19];
341dc7e38acSHans Petter Selasky 	u8		num_psv;
342dc7e38acSHans Petter Selasky 	__be32		l_key;
343dc7e38acSHans Petter Selasky 	__be64		va;
344dc7e38acSHans Petter Selasky 	__be32		psv_index[4];
345dc7e38acSHans Petter Selasky };
346dc7e38acSHans Petter Selasky 
347dc7e38acSHans Petter Selasky struct mlx5_seg_check_psv {
348dc7e38acSHans Petter Selasky 	u8		rsvd0[2];
349dc7e38acSHans Petter Selasky 	__be16		err_coalescing_op;
350dc7e38acSHans Petter Selasky 	u8		rsvd1[2];
351dc7e38acSHans Petter Selasky 	__be16		xport_err_op;
352dc7e38acSHans Petter Selasky 	u8		rsvd2[2];
353dc7e38acSHans Petter Selasky 	__be16		xport_err_mask;
354dc7e38acSHans Petter Selasky 	u8		rsvd3[7];
355dc7e38acSHans Petter Selasky 	u8		num_psv;
356dc7e38acSHans Petter Selasky 	__be32		l_key;
357dc7e38acSHans Petter Selasky 	__be64		va;
358dc7e38acSHans Petter Selasky 	__be32		psv_index[4];
359dc7e38acSHans Petter Selasky };
360dc7e38acSHans Petter Selasky 
361dc7e38acSHans Petter Selasky struct mlx5_rwqe_sig {
362dc7e38acSHans Petter Selasky 	u8	rsvd0[4];
363dc7e38acSHans Petter Selasky 	u8	signature;
364dc7e38acSHans Petter Selasky 	u8	rsvd1[11];
365dc7e38acSHans Petter Selasky };
366dc7e38acSHans Petter Selasky 
367dc7e38acSHans Petter Selasky struct mlx5_wqe_signature_seg {
368dc7e38acSHans Petter Selasky 	u8	rsvd0[4];
369dc7e38acSHans Petter Selasky 	u8	signature;
370dc7e38acSHans Petter Selasky 	u8	rsvd1[11];
371dc7e38acSHans Petter Selasky };
372dc7e38acSHans Petter Selasky 
373dc7e38acSHans Petter Selasky struct mlx5_wqe_inline_seg {
374dc7e38acSHans Petter Selasky 	__be32	byte_count;
375dc7e38acSHans Petter Selasky };
376dc7e38acSHans Petter Selasky 
377dc7e38acSHans Petter Selasky enum mlx5_sig_type {
378dc7e38acSHans Petter Selasky 	MLX5_DIF_CRC = 0x1,
379dc7e38acSHans Petter Selasky 	MLX5_DIF_IPCS = 0x2,
380dc7e38acSHans Petter Selasky };
381dc7e38acSHans Petter Selasky 
382dc7e38acSHans Petter Selasky struct mlx5_bsf_inl {
383dc7e38acSHans Petter Selasky 	__be16		vld_refresh;
384dc7e38acSHans Petter Selasky 	__be16		dif_apptag;
385dc7e38acSHans Petter Selasky 	__be32		dif_reftag;
386dc7e38acSHans Petter Selasky 	u8		sig_type;
387dc7e38acSHans Petter Selasky 	u8		rp_inv_seed;
388dc7e38acSHans Petter Selasky 	u8		rsvd[3];
389dc7e38acSHans Petter Selasky 	u8		dif_inc_ref_guard_check;
390dc7e38acSHans Petter Selasky 	__be16		dif_app_bitmask_check;
391dc7e38acSHans Petter Selasky };
392dc7e38acSHans Petter Selasky 
393dc7e38acSHans Petter Selasky struct mlx5_bsf {
394dc7e38acSHans Petter Selasky 	struct mlx5_bsf_basic {
395dc7e38acSHans Petter Selasky 		u8		bsf_size_sbs;
396dc7e38acSHans Petter Selasky 		u8		check_byte_mask;
397dc7e38acSHans Petter Selasky 		union {
398dc7e38acSHans Petter Selasky 			u8	copy_byte_mask;
399dc7e38acSHans Petter Selasky 			u8	bs_selector;
400dc7e38acSHans Petter Selasky 			u8	rsvd_wflags;
401dc7e38acSHans Petter Selasky 		} wire;
402dc7e38acSHans Petter Selasky 		union {
403dc7e38acSHans Petter Selasky 			u8	bs_selector;
404dc7e38acSHans Petter Selasky 			u8	rsvd_mflags;
405dc7e38acSHans Petter Selasky 		} mem;
406dc7e38acSHans Petter Selasky 		__be32		raw_data_size;
407dc7e38acSHans Petter Selasky 		__be32		w_bfs_psv;
408dc7e38acSHans Petter Selasky 		__be32		m_bfs_psv;
409dc7e38acSHans Petter Selasky 	} basic;
410dc7e38acSHans Petter Selasky 	struct mlx5_bsf_ext {
411dc7e38acSHans Petter Selasky 		__be32		t_init_gen_pro_size;
412dc7e38acSHans Petter Selasky 		__be32		rsvd_epi_size;
413dc7e38acSHans Petter Selasky 		__be32		w_tfs_psv;
414dc7e38acSHans Petter Selasky 		__be32		m_tfs_psv;
415dc7e38acSHans Petter Selasky 	} ext;
416dc7e38acSHans Petter Selasky 	struct mlx5_bsf_inl	w_inl;
417dc7e38acSHans Petter Selasky 	struct mlx5_bsf_inl	m_inl;
418dc7e38acSHans Petter Selasky };
419dc7e38acSHans Petter Selasky 
420dc7e38acSHans Petter Selasky struct mlx5_klm {
421dc7e38acSHans Petter Selasky 	__be32		bcount;
422dc7e38acSHans Petter Selasky 	__be32		key;
423dc7e38acSHans Petter Selasky 	__be64		va;
424dc7e38acSHans Petter Selasky };
425dc7e38acSHans Petter Selasky 
426dc7e38acSHans Petter Selasky struct mlx5_stride_block_entry {
427dc7e38acSHans Petter Selasky 	__be16		stride;
428dc7e38acSHans Petter Selasky 	__be16		bcount;
429dc7e38acSHans Petter Selasky 	__be32		key;
430dc7e38acSHans Petter Selasky 	__be64		va;
431dc7e38acSHans Petter Selasky };
432dc7e38acSHans Petter Selasky 
433dc7e38acSHans Petter Selasky struct mlx5_stride_block_ctrl_seg {
434dc7e38acSHans Petter Selasky 	__be32		bcount_per_cycle;
435dc7e38acSHans Petter Selasky 	__be32		op;
436dc7e38acSHans Petter Selasky 	__be32		repeat_count;
437dc7e38acSHans Petter Selasky 	u16		rsvd;
438dc7e38acSHans Petter Selasky 	__be16		num_entries;
439dc7e38acSHans Petter Selasky };
440dc7e38acSHans Petter Selasky 
4414b109912SHans Petter Selasky enum mlx5_pagefault_flags {
4424b109912SHans Petter Selasky 	MLX5_PFAULT_REQUESTOR = 1 << 0,
4434b109912SHans Petter Selasky 	MLX5_PFAULT_WRITE     = 1 << 1,
4444b109912SHans Petter Selasky 	MLX5_PFAULT_RDMA      = 1 << 2,
4454b109912SHans Petter Selasky };
4464b109912SHans Petter Selasky 
4474b109912SHans Petter Selasky /* Contains the details of a pagefault. */
4484b109912SHans Petter Selasky struct mlx5_pagefault {
4494b109912SHans Petter Selasky 	u32			bytes_committed;
4504b109912SHans Petter Selasky 	u8			event_subtype;
4514b109912SHans Petter Selasky 	enum mlx5_pagefault_flags flags;
4524b109912SHans Petter Selasky 	union {
4534b109912SHans Petter Selasky 		/* Initiator or send message responder pagefault details. */
4544b109912SHans Petter Selasky 		struct {
4554b109912SHans Petter Selasky 			/* Received packet size, only valid for responders. */
4564b109912SHans Petter Selasky 			u32	packet_size;
4574b109912SHans Petter Selasky 			/*
4584b109912SHans Petter Selasky 			 * WQE index. Refers to either the send queue or
4594b109912SHans Petter Selasky 			 * receive queue, according to event_subtype.
4604b109912SHans Petter Selasky 			 */
4614b109912SHans Petter Selasky 			u16	wqe_index;
4624b109912SHans Petter Selasky 		} wqe;
4634b109912SHans Petter Selasky 		/* RDMA responder pagefault details */
4644b109912SHans Petter Selasky 		struct {
4654b109912SHans Petter Selasky 			u32	r_key;
4664b109912SHans Petter Selasky 			/*
4674b109912SHans Petter Selasky 			 * Received packet size, minimal size page fault
4684b109912SHans Petter Selasky 			 * resolution required for forward progress.
4694b109912SHans Petter Selasky 			 */
4704b109912SHans Petter Selasky 			u32	packet_size;
4714b109912SHans Petter Selasky 			u32	rdma_op_len;
4724b109912SHans Petter Selasky 			u64	rdma_va;
4734b109912SHans Petter Selasky 		} rdma;
4744b109912SHans Petter Selasky 	};
4754b109912SHans Petter Selasky };
4764b109912SHans Petter Selasky 
477dc7e38acSHans Petter Selasky struct mlx5_core_qp {
478dc7e38acSHans Petter Selasky 	struct mlx5_core_rsc_common	common; /* must be first */
479dc7e38acSHans Petter Selasky 	void (*event)		(struct mlx5_core_qp *, int);
480dc7e38acSHans Petter Selasky 	int			qpn;
481dc7e38acSHans Petter Selasky 	struct mlx5_rsc_debug	*dbg;
482dc7e38acSHans Petter Selasky 	int			pid;
483cbf6911eSHans Petter Selasky 	u16			uid;
484dc7e38acSHans Petter Selasky };
485dc7e38acSHans Petter Selasky 
486dc7e38acSHans Petter Selasky struct mlx5_qp_path {
487dc7e38acSHans Petter Selasky 	u8			fl_free_ar;
488dc7e38acSHans Petter Selasky 	u8			rsvd3;
489dc7e38acSHans Petter Selasky 	__be16			pkey_index;
490dc7e38acSHans Petter Selasky 	u8			rsvd0;
491dc7e38acSHans Petter Selasky 	u8			grh_mlid;
492dc7e38acSHans Petter Selasky 	__be16			rlid;
493dc7e38acSHans Petter Selasky 	u8			ackto_lt;
494dc7e38acSHans Petter Selasky 	u8			mgid_index;
495dc7e38acSHans Petter Selasky 	u8			static_rate;
496dc7e38acSHans Petter Selasky 	u8			hop_limit;
497dc7e38acSHans Petter Selasky 	__be32			tclass_flowlabel;
498dc7e38acSHans Petter Selasky 	union {
499dc7e38acSHans Petter Selasky 		u8		rgid[16];
500dc7e38acSHans Petter Selasky 		u8		rip[16];
501dc7e38acSHans Petter Selasky 	};
502dc7e38acSHans Petter Selasky 	u8			f_dscp_ecn_prio;
503dc7e38acSHans Petter Selasky 	u8			ecn_dscp;
504dc7e38acSHans Petter Selasky 	__be16			udp_sport;
505dc7e38acSHans Petter Selasky 	u8			dci_cfi_prio_sl;
506dc7e38acSHans Petter Selasky 	u8			port;
507dc7e38acSHans Petter Selasky 	u8			rmac[6];
508dc7e38acSHans Petter Selasky };
509dc7e38acSHans Petter Selasky 
510dc7e38acSHans Petter Selasky struct mlx5_qp_context {
511dc7e38acSHans Petter Selasky 	__be32			flags;
512dc7e38acSHans Petter Selasky 	__be32			flags_pd;
513dc7e38acSHans Petter Selasky 	u8			mtu_msgmax;
514dc7e38acSHans Petter Selasky 	u8			rq_size_stride;
515dc7e38acSHans Petter Selasky 	__be16			sq_crq_size;
516dc7e38acSHans Petter Selasky 	__be32			qp_counter_set_usr_page;
517dc7e38acSHans Petter Selasky 	__be32			wire_qpn;
518dc7e38acSHans Petter Selasky 	__be32			log_pg_sz_remote_qpn;
519dc7e38acSHans Petter Selasky 	struct			mlx5_qp_path pri_path;
520dc7e38acSHans Petter Selasky 	struct			mlx5_qp_path alt_path;
521dc7e38acSHans Petter Selasky 	__be32			params1;
522dc7e38acSHans Petter Selasky 	u8			reserved2[4];
523dc7e38acSHans Petter Selasky 	__be32			next_send_psn;
524dc7e38acSHans Petter Selasky 	__be32			cqn_send;
5254b109912SHans Petter Selasky 	__be32			deth_sqpn;
5264b109912SHans Petter Selasky 	u8			reserved3[4];
527dc7e38acSHans Petter Selasky 	__be32			last_acked_psn;
528dc7e38acSHans Petter Selasky 	__be32			ssn;
529dc7e38acSHans Petter Selasky 	__be32			params2;
530dc7e38acSHans Petter Selasky 	__be32			rnr_nextrecvpsn;
531dc7e38acSHans Petter Selasky 	__be32			xrcd;
532dc7e38acSHans Petter Selasky 	__be32			cqn_recv;
533dc7e38acSHans Petter Selasky 	__be64			db_rec_addr;
534dc7e38acSHans Petter Selasky 	__be32			qkey;
535dc7e38acSHans Petter Selasky 	__be32			rq_type_srqn;
536dc7e38acSHans Petter Selasky 	__be32			rmsn;
537dc7e38acSHans Petter Selasky 	__be16			hw_sq_wqe_counter;
538dc7e38acSHans Petter Selasky 	__be16			sw_sq_wqe_counter;
539dc7e38acSHans Petter Selasky 	__be16			hw_rcyclic_byte_counter;
540dc7e38acSHans Petter Selasky 	__be16			hw_rq_counter;
541dc7e38acSHans Petter Selasky 	__be16			sw_rcyclic_byte_counter;
542dc7e38acSHans Petter Selasky 	__be16			sw_rq_counter;
543dc7e38acSHans Petter Selasky 	u8			rsvd0[5];
544dc7e38acSHans Petter Selasky 	u8			cgs;
545dc7e38acSHans Petter Selasky 	u8			cs_req;
546dc7e38acSHans Petter Selasky 	u8			cs_res;
547dc7e38acSHans Petter Selasky 	__be64			dc_access_key;
548dc7e38acSHans Petter Selasky 	u8			rsvd1[24];
549dc7e38acSHans Petter Selasky };
550dc7e38acSHans Petter Selasky 
551cb4e4a6eSHans Petter Selasky struct mlx5_dct_context {
552cb4e4a6eSHans Petter Selasky 	u8			state;
553cb4e4a6eSHans Petter Selasky 	u8			rsvd0[7];
554cb4e4a6eSHans Petter Selasky 	__be32			cqn;
555cb4e4a6eSHans Petter Selasky 	__be32			flags;
556cb4e4a6eSHans Petter Selasky 	u8			rsvd1;
557cb4e4a6eSHans Petter Selasky 	u8			cs_res;
558cb4e4a6eSHans Petter Selasky 	u8			min_rnr;
559cb4e4a6eSHans Petter Selasky 	u8			rsvd2;
560cb4e4a6eSHans Petter Selasky 	__be32			srqn;
561cb4e4a6eSHans Petter Selasky 	__be32			pdn;
562cb4e4a6eSHans Petter Selasky 	__be32			tclass_flow_label;
563cb4e4a6eSHans Petter Selasky 	__be64			access_key;
564cb4e4a6eSHans Petter Selasky 	u8			mtu;
565cb4e4a6eSHans Petter Selasky 	u8			port;
566cb4e4a6eSHans Petter Selasky 	__be16			pkey_index;
567cb4e4a6eSHans Petter Selasky 	u8			rsvd4;
568cb4e4a6eSHans Petter Selasky 	u8			mgid_index;
569cb4e4a6eSHans Petter Selasky 	u8			rsvd5;
570cb4e4a6eSHans Petter Selasky 	u8			hop_limit;
571cb4e4a6eSHans Petter Selasky 	__be32			access_violations;
572cb4e4a6eSHans Petter Selasky 	u8			rsvd[12];
573cb4e4a6eSHans Petter Selasky };
574cb4e4a6eSHans Petter Selasky 
575dc7e38acSHans Petter Selasky static inline struct mlx5_core_qp *__mlx5_qp_lookup(struct mlx5_core_dev *dev, u32 qpn)
576dc7e38acSHans Petter Selasky {
577dc7e38acSHans Petter Selasky 	return radix_tree_lookup(&dev->priv.qp_table.tree, qpn);
578dc7e38acSHans Petter Selasky }
579dc7e38acSHans Petter Selasky 
580b633e08cSHans Petter Selasky static inline struct mlx5_core_mkey *__mlx5_mr_lookup(struct mlx5_core_dev *dev, u32 key)
581dc7e38acSHans Petter Selasky {
582dc7e38acSHans Petter Selasky 	return radix_tree_lookup(&dev->priv.mr_table.tree, key);
583dc7e38acSHans Petter Selasky }
584dc7e38acSHans Petter Selasky 
585dc7e38acSHans Petter Selasky int mlx5_core_create_qp(struct mlx5_core_dev *dev,
586dc7e38acSHans Petter Selasky 			struct mlx5_core_qp *qp,
587788333d9SHans Petter Selasky 			u32 *in,
588dc7e38acSHans Petter Selasky 			int inlen);
589788333d9SHans Petter Selasky int mlx5_core_qp_modify(struct mlx5_core_dev *dev, u16 opcode,
590788333d9SHans Petter Selasky 			u32 opt_param_mask, void *qpc,
591dc7e38acSHans Petter Selasky 			struct mlx5_core_qp *qp);
592dc7e38acSHans Petter Selasky int mlx5_core_destroy_qp(struct mlx5_core_dev *dev,
593dc7e38acSHans Petter Selasky 			 struct mlx5_core_qp *qp);
594dc7e38acSHans Petter Selasky int mlx5_core_qp_query(struct mlx5_core_dev *dev, struct mlx5_core_qp *qp,
595788333d9SHans Petter Selasky 		       u32 *out, int outlen);
596cb4e4a6eSHans Petter Selasky int mlx5_core_dct_query(struct mlx5_core_dev *dev, struct mlx5_core_dct *dct,
597788333d9SHans Petter Selasky 			u32 *out, int outlen);
598cb4e4a6eSHans Petter Selasky int mlx5_core_arm_dct(struct mlx5_core_dev *dev, struct mlx5_core_dct *dct);
599dc7e38acSHans Petter Selasky 
600dc7e38acSHans Petter Selasky int mlx5_core_xrcd_alloc(struct mlx5_core_dev *dev, u32 *xrcdn);
601dc7e38acSHans Petter Selasky int mlx5_core_xrcd_dealloc(struct mlx5_core_dev *dev, u32 xrcdn);
602cb4e4a6eSHans Petter Selasky int mlx5_core_create_dct(struct mlx5_core_dev *dev,
603cb4e4a6eSHans Petter Selasky 			 struct mlx5_core_dct *dct,
6044a64b690SHans Petter Selasky 			 u32 *in, int inlen,
6054a64b690SHans Petter Selasky 			 u32 *out, int outlen);
606cb4e4a6eSHans Petter Selasky int mlx5_core_destroy_dct(struct mlx5_core_dev *dev,
607cb4e4a6eSHans Petter Selasky 			  struct mlx5_core_dct *dct);
608cb4e4a6eSHans Petter Selasky int mlx5_core_create_rq_tracked(struct mlx5_core_dev *dev, u32 *in, int inlen,
609cb4e4a6eSHans Petter Selasky 				struct mlx5_core_qp *rq);
610cb4e4a6eSHans Petter Selasky void mlx5_core_destroy_rq_tracked(struct mlx5_core_dev *dev,
611cb4e4a6eSHans Petter Selasky 				  struct mlx5_core_qp *rq);
612cb4e4a6eSHans Petter Selasky int mlx5_core_create_sq_tracked(struct mlx5_core_dev *dev, u32 *in, int inlen,
613cb4e4a6eSHans Petter Selasky 				struct mlx5_core_qp *sq);
614cb4e4a6eSHans Petter Selasky void mlx5_core_destroy_sq_tracked(struct mlx5_core_dev *dev,
615cb4e4a6eSHans Petter Selasky 				  struct mlx5_core_qp *sq);
616dc7e38acSHans Petter Selasky void mlx5_init_qp_table(struct mlx5_core_dev *dev);
617dc7e38acSHans Petter Selasky void mlx5_cleanup_qp_table(struct mlx5_core_dev *dev);
618dc7e38acSHans Petter Selasky int mlx5_debug_qp_add(struct mlx5_core_dev *dev, struct mlx5_core_qp *qp);
619dc7e38acSHans Petter Selasky void mlx5_debug_qp_remove(struct mlx5_core_dev *dev, struct mlx5_core_qp *qp);
620dc7e38acSHans Petter Selasky 
621dc7e38acSHans Petter Selasky static inline const char *mlx5_qp_type_str(int type)
622dc7e38acSHans Petter Selasky {
623dc7e38acSHans Petter Selasky 	switch (type) {
624dc7e38acSHans Petter Selasky 	case MLX5_QP_ST_RC: return "RC";
625dc7e38acSHans Petter Selasky 	case MLX5_QP_ST_UC: return "C";
626dc7e38acSHans Petter Selasky 	case MLX5_QP_ST_UD: return "UD";
627dc7e38acSHans Petter Selasky 	case MLX5_QP_ST_XRC: return "XRC";
628dc7e38acSHans Petter Selasky 	case MLX5_QP_ST_MLX: return "MLX";
629cb4e4a6eSHans Petter Selasky 	case MLX5_QP_ST_DCI: return "DCI";
630dc7e38acSHans Petter Selasky 	case MLX5_QP_ST_QP0: return "QP0";
631dc7e38acSHans Petter Selasky 	case MLX5_QP_ST_QP1: return "QP1";
632dc7e38acSHans Petter Selasky 	case MLX5_QP_ST_RAW_ETHERTYPE: return "RAW_ETHERTYPE";
633dc7e38acSHans Petter Selasky 	case MLX5_QP_ST_RAW_IPV6: return "RAW_IPV6";
634dc7e38acSHans Petter Selasky 	case MLX5_QP_ST_SNIFFER: return "SNIFFER";
635dc7e38acSHans Petter Selasky 	case MLX5_QP_ST_SYNC_UMR: return "SYNC_UMR";
636dc7e38acSHans Petter Selasky 	case MLX5_QP_ST_PTP_1588: return "PTP_1588";
637dc7e38acSHans Petter Selasky 	case MLX5_QP_ST_REG_UMR: return "REG_UMR";
638cb4e4a6eSHans Petter Selasky 	case MLX5_QP_ST_SW_CNAK: return "DC_CNAK";
639dc7e38acSHans Petter Selasky 	default: return "Invalid transport type";
640dc7e38acSHans Petter Selasky 	}
641dc7e38acSHans Petter Selasky }
642dc7e38acSHans Petter Selasky 
643dc7e38acSHans Petter Selasky static inline const char *mlx5_qp_state_str(int state)
644dc7e38acSHans Petter Selasky {
645dc7e38acSHans Petter Selasky 	switch (state) {
646dc7e38acSHans Petter Selasky 	case MLX5_QP_STATE_RST:
647dc7e38acSHans Petter Selasky 	return "RST";
648dc7e38acSHans Petter Selasky 	case MLX5_QP_STATE_INIT:
649dc7e38acSHans Petter Selasky 	return "INIT";
650dc7e38acSHans Petter Selasky 	case MLX5_QP_STATE_RTR:
651dc7e38acSHans Petter Selasky 	return "RTR";
652dc7e38acSHans Petter Selasky 	case MLX5_QP_STATE_RTS:
653dc7e38acSHans Petter Selasky 	return "RTS";
654dc7e38acSHans Petter Selasky 	case MLX5_QP_STATE_SQER:
655dc7e38acSHans Petter Selasky 	return "SQER";
656dc7e38acSHans Petter Selasky 	case MLX5_QP_STATE_SQD:
657dc7e38acSHans Petter Selasky 	return "SQD";
658dc7e38acSHans Petter Selasky 	case MLX5_QP_STATE_ERR:
659dc7e38acSHans Petter Selasky 	return "ERR";
660dc7e38acSHans Petter Selasky 	case MLX5_QP_STATE_SQ_DRAINING:
661dc7e38acSHans Petter Selasky 	return "SQ_DRAINING";
662dc7e38acSHans Petter Selasky 	case MLX5_QP_STATE_SUSPENDED:
663dc7e38acSHans Petter Selasky 	return "SUSPENDED";
664dc7e38acSHans Petter Selasky 	default: return "Invalid QP state";
665dc7e38acSHans Petter Selasky 	}
666dc7e38acSHans Petter Selasky }
667dc7e38acSHans Petter Selasky 
668dc7e38acSHans Petter Selasky #endif /* MLX5_QP_H */
669