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