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