Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
0002 
0003 /* Authors: Cheng Xu <chengyou@linux.alibaba.com> */
0004 /*          Kai Shen <kaishen@linux.alibaba.com> */
0005 /* Copyright (c) 2020-2022, Alibaba Group. */
0006 
0007 #ifndef __ERDMA_HW_H__
0008 #define __ERDMA_HW_H__
0009 
0010 #include <linux/kernel.h>
0011 #include <linux/types.h>
0012 
0013 /* PCIe device related definition. */
0014 #define PCI_VENDOR_ID_ALIBABA 0x1ded
0015 
0016 #define ERDMA_PCI_WIDTH 64
0017 #define ERDMA_FUNC_BAR 0
0018 #define ERDMA_MISX_BAR 2
0019 
0020 #define ERDMA_BAR_MASK (BIT(ERDMA_FUNC_BAR) | BIT(ERDMA_MISX_BAR))
0021 
0022 /* MSI-X related. */
0023 #define ERDMA_NUM_MSIX_VEC 32U
0024 #define ERDMA_MSIX_VECTOR_CMDQ 0
0025 
0026 /* PCIe Bar0 Registers. */
0027 #define ERDMA_REGS_VERSION_REG 0x0
0028 #define ERDMA_REGS_DEV_CTRL_REG 0x10
0029 #define ERDMA_REGS_DEV_ST_REG 0x14
0030 #define ERDMA_REGS_NETDEV_MAC_L_REG 0x18
0031 #define ERDMA_REGS_NETDEV_MAC_H_REG 0x1C
0032 #define ERDMA_REGS_CMDQ_SQ_ADDR_L_REG 0x20
0033 #define ERDMA_REGS_CMDQ_SQ_ADDR_H_REG 0x24
0034 #define ERDMA_REGS_CMDQ_CQ_ADDR_L_REG 0x28
0035 #define ERDMA_REGS_CMDQ_CQ_ADDR_H_REG 0x2C
0036 #define ERDMA_REGS_CMDQ_DEPTH_REG 0x30
0037 #define ERDMA_REGS_CMDQ_EQ_DEPTH_REG 0x34
0038 #define ERDMA_REGS_CMDQ_EQ_ADDR_L_REG 0x38
0039 #define ERDMA_REGS_CMDQ_EQ_ADDR_H_REG 0x3C
0040 #define ERDMA_REGS_AEQ_ADDR_L_REG 0x40
0041 #define ERDMA_REGS_AEQ_ADDR_H_REG 0x44
0042 #define ERDMA_REGS_AEQ_DEPTH_REG 0x48
0043 #define ERDMA_REGS_GRP_NUM_REG 0x4c
0044 #define ERDMA_REGS_AEQ_DB_REG 0x50
0045 #define ERDMA_CMDQ_SQ_DB_HOST_ADDR_REG 0x60
0046 #define ERDMA_CMDQ_CQ_DB_HOST_ADDR_REG 0x68
0047 #define ERDMA_CMDQ_EQ_DB_HOST_ADDR_REG 0x70
0048 #define ERDMA_AEQ_DB_HOST_ADDR_REG 0x78
0049 #define ERDMA_REGS_STATS_TSO_IN_PKTS_REG 0x80
0050 #define ERDMA_REGS_STATS_TSO_OUT_PKTS_REG 0x88
0051 #define ERDMA_REGS_STATS_TSO_OUT_BYTES_REG 0x90
0052 #define ERDMA_REGS_STATS_TX_DROP_PKTS_REG 0x98
0053 #define ERDMA_REGS_STATS_TX_BPS_METER_DROP_PKTS_REG 0xa0
0054 #define ERDMA_REGS_STATS_TX_PPS_METER_DROP_PKTS_REG 0xa8
0055 #define ERDMA_REGS_STATS_RX_PKTS_REG 0xc0
0056 #define ERDMA_REGS_STATS_RX_BYTES_REG 0xc8
0057 #define ERDMA_REGS_STATS_RX_DROP_PKTS_REG 0xd0
0058 #define ERDMA_REGS_STATS_RX_BPS_METER_DROP_PKTS_REG 0xd8
0059 #define ERDMA_REGS_STATS_RX_PPS_METER_DROP_PKTS_REG 0xe0
0060 #define ERDMA_REGS_CEQ_DB_BASE_REG 0x100
0061 #define ERDMA_CMDQ_SQDB_REG 0x200
0062 #define ERDMA_CMDQ_CQDB_REG 0x300
0063 
0064 /* DEV_CTRL_REG details. */
0065 #define ERDMA_REG_DEV_CTRL_RESET_MASK 0x00000001
0066 #define ERDMA_REG_DEV_CTRL_INIT_MASK 0x00000002
0067 
0068 /* DEV_ST_REG details. */
0069 #define ERDMA_REG_DEV_ST_RESET_DONE_MASK 0x00000001U
0070 #define ERDMA_REG_DEV_ST_INIT_DONE_MASK 0x00000002U
0071 
0072 /* eRDMA PCIe DBs definition. */
0073 #define ERDMA_BAR_DB_SPACE_BASE 4096
0074 
0075 #define ERDMA_BAR_SQDB_SPACE_OFFSET ERDMA_BAR_DB_SPACE_BASE
0076 #define ERDMA_BAR_SQDB_SPACE_SIZE (384 * 1024)
0077 
0078 #define ERDMA_BAR_RQDB_SPACE_OFFSET \
0079     (ERDMA_BAR_SQDB_SPACE_OFFSET + ERDMA_BAR_SQDB_SPACE_SIZE)
0080 #define ERDMA_BAR_RQDB_SPACE_SIZE (96 * 1024)
0081 
0082 #define ERDMA_BAR_CQDB_SPACE_OFFSET \
0083     (ERDMA_BAR_RQDB_SPACE_OFFSET + ERDMA_BAR_RQDB_SPACE_SIZE)
0084 
0085 /* Doorbell page resources related. */
0086 /*
0087  * Max # of parallelly issued directSQE is 3072 per device,
0088  * hardware organizes this into 24 group, per group has 128 credits.
0089  */
0090 #define ERDMA_DWQE_MAX_GRP_CNT 24
0091 #define ERDMA_DWQE_NUM_PER_GRP 128
0092 
0093 #define ERDMA_DWQE_TYPE0_CNT 64
0094 #define ERDMA_DWQE_TYPE1_CNT 496
0095 /* type1 DB contains 2 DBs, takes 256Byte. */
0096 #define ERDMA_DWQE_TYPE1_CNT_PER_PAGE 16
0097 
0098 #define ERDMA_SDB_SHARED_PAGE_INDEX 95
0099 
0100 /* Doorbell related. */
0101 #define ERDMA_DB_SIZE 8
0102 
0103 #define ERDMA_CQDB_IDX_MASK GENMASK_ULL(63, 56)
0104 #define ERDMA_CQDB_CQN_MASK GENMASK_ULL(55, 32)
0105 #define ERDMA_CQDB_ARM_MASK BIT_ULL(31)
0106 #define ERDMA_CQDB_SOL_MASK BIT_ULL(30)
0107 #define ERDMA_CQDB_CMDSN_MASK GENMASK_ULL(29, 28)
0108 #define ERDMA_CQDB_CI_MASK GENMASK_ULL(23, 0)
0109 
0110 #define ERDMA_EQDB_ARM_MASK BIT(31)
0111 #define ERDMA_EQDB_CI_MASK GENMASK_ULL(23, 0)
0112 
0113 #define ERDMA_PAGE_SIZE_SUPPORT 0x7FFFF000
0114 
0115 /* WQE related. */
0116 #define EQE_SIZE 16
0117 #define EQE_SHIFT 4
0118 #define RQE_SIZE 32
0119 #define RQE_SHIFT 5
0120 #define CQE_SIZE 32
0121 #define CQE_SHIFT 5
0122 #define SQEBB_SIZE 32
0123 #define SQEBB_SHIFT 5
0124 #define SQEBB_MASK (~(SQEBB_SIZE - 1))
0125 #define SQEBB_ALIGN(size) ((size + SQEBB_SIZE - 1) & SQEBB_MASK)
0126 #define SQEBB_COUNT(size) (SQEBB_ALIGN(size) >> SQEBB_SHIFT)
0127 
0128 #define ERDMA_MAX_SQE_SIZE 128
0129 #define ERDMA_MAX_WQEBB_PER_SQE 4
0130 
0131 /* CMDQ related. */
0132 #define ERDMA_CMDQ_MAX_OUTSTANDING 128
0133 #define ERDMA_CMDQ_SQE_SIZE 64
0134 
0135 /* cmdq sub module definition. */
0136 enum CMDQ_WQE_SUB_MOD {
0137     CMDQ_SUBMOD_RDMA = 0,
0138     CMDQ_SUBMOD_COMMON = 1
0139 };
0140 
0141 enum CMDQ_RDMA_OPCODE {
0142     CMDQ_OPCODE_QUERY_DEVICE = 0,
0143     CMDQ_OPCODE_CREATE_QP = 1,
0144     CMDQ_OPCODE_DESTROY_QP = 2,
0145     CMDQ_OPCODE_MODIFY_QP = 3,
0146     CMDQ_OPCODE_CREATE_CQ = 4,
0147     CMDQ_OPCODE_DESTROY_CQ = 5,
0148     CMDQ_OPCODE_REG_MR = 8,
0149     CMDQ_OPCODE_DEREG_MR = 9
0150 };
0151 
0152 enum CMDQ_COMMON_OPCODE {
0153     CMDQ_OPCODE_CREATE_EQ = 0,
0154     CMDQ_OPCODE_DESTROY_EQ = 1,
0155     CMDQ_OPCODE_QUERY_FW_INFO = 2,
0156 };
0157 
0158 /* cmdq-SQE HDR */
0159 #define ERDMA_CMD_HDR_WQEBB_CNT_MASK GENMASK_ULL(54, 52)
0160 #define ERDMA_CMD_HDR_CONTEXT_COOKIE_MASK GENMASK_ULL(47, 32)
0161 #define ERDMA_CMD_HDR_SUB_MOD_MASK GENMASK_ULL(25, 24)
0162 #define ERDMA_CMD_HDR_OPCODE_MASK GENMASK_ULL(23, 16)
0163 #define ERDMA_CMD_HDR_WQEBB_INDEX_MASK GENMASK_ULL(15, 0)
0164 
0165 struct erdma_cmdq_destroy_cq_req {
0166     u64 hdr;
0167     u32 cqn;
0168 };
0169 
0170 #define ERDMA_EQ_TYPE_AEQ 0
0171 #define ERDMA_EQ_TYPE_CEQ 1
0172 
0173 struct erdma_cmdq_create_eq_req {
0174     u64 hdr;
0175     u64 qbuf_addr;
0176     u8 vector_idx;
0177     u8 eqn;
0178     u8 depth;
0179     u8 qtype;
0180     u32 db_dma_addr_l;
0181     u32 db_dma_addr_h;
0182 };
0183 
0184 struct erdma_cmdq_destroy_eq_req {
0185     u64 hdr;
0186     u64 rsvd0;
0187     u8 vector_idx;
0188     u8 eqn;
0189     u8 rsvd1;
0190     u8 qtype;
0191 };
0192 
0193 /* create_cq cfg0 */
0194 #define ERDMA_CMD_CREATE_CQ_DEPTH_MASK GENMASK(31, 24)
0195 #define ERDMA_CMD_CREATE_CQ_PAGESIZE_MASK GENMASK(23, 20)
0196 #define ERDMA_CMD_CREATE_CQ_CQN_MASK GENMASK(19, 0)
0197 
0198 /* create_cq cfg1 */
0199 #define ERDMA_CMD_CREATE_CQ_MTT_CNT_MASK GENMASK(31, 16)
0200 #define ERDMA_CMD_CREATE_CQ_MTT_TYPE_MASK BIT(15)
0201 #define ERDMA_CMD_CREATE_CQ_EQN_MASK GENMASK(9, 0)
0202 
0203 struct erdma_cmdq_create_cq_req {
0204     u64 hdr;
0205     u32 cfg0;
0206     u32 qbuf_addr_l;
0207     u32 qbuf_addr_h;
0208     u32 cfg1;
0209     u64 cq_db_info_addr;
0210     u32 first_page_offset;
0211 };
0212 
0213 /* regmr/deregmr cfg0 */
0214 #define ERDMA_CMD_MR_VALID_MASK BIT(31)
0215 #define ERDMA_CMD_MR_KEY_MASK GENMASK(27, 20)
0216 #define ERDMA_CMD_MR_MPT_IDX_MASK GENMASK(19, 0)
0217 
0218 /* regmr cfg1 */
0219 #define ERDMA_CMD_REGMR_PD_MASK GENMASK(31, 12)
0220 #define ERDMA_CMD_REGMR_TYPE_MASK GENMASK(7, 6)
0221 #define ERDMA_CMD_REGMR_RIGHT_MASK GENMASK(5, 2)
0222 #define ERDMA_CMD_REGMR_ACC_MODE_MASK GENMASK(1, 0)
0223 
0224 /* regmr cfg2 */
0225 #define ERDMA_CMD_REGMR_PAGESIZE_MASK GENMASK(31, 27)
0226 #define ERDMA_CMD_REGMR_MTT_TYPE_MASK GENMASK(21, 20)
0227 #define ERDMA_CMD_REGMR_MTT_CNT_MASK GENMASK(19, 0)
0228 
0229 struct erdma_cmdq_reg_mr_req {
0230     u64 hdr;
0231     u32 cfg0;
0232     u32 cfg1;
0233     u64 start_va;
0234     u32 size;
0235     u32 cfg2;
0236     u64 phy_addr[4];
0237 };
0238 
0239 struct erdma_cmdq_dereg_mr_req {
0240     u64 hdr;
0241     u32 cfg;
0242 };
0243 
0244 /* modify qp cfg */
0245 #define ERDMA_CMD_MODIFY_QP_STATE_MASK GENMASK(31, 24)
0246 #define ERDMA_CMD_MODIFY_QP_CC_MASK GENMASK(23, 20)
0247 #define ERDMA_CMD_MODIFY_QP_QPN_MASK GENMASK(19, 0)
0248 
0249 struct erdma_cmdq_modify_qp_req {
0250     u64 hdr;
0251     u32 cfg;
0252     u32 cookie;
0253     __be32 dip;
0254     __be32 sip;
0255     __be16 sport;
0256     __be16 dport;
0257     u32 send_nxt;
0258     u32 recv_nxt;
0259 };
0260 
0261 /* create qp cfg0 */
0262 #define ERDMA_CMD_CREATE_QP_SQ_DEPTH_MASK GENMASK(31, 20)
0263 #define ERDMA_CMD_CREATE_QP_QPN_MASK GENMASK(19, 0)
0264 
0265 /* create qp cfg1 */
0266 #define ERDMA_CMD_CREATE_QP_RQ_DEPTH_MASK GENMASK(31, 20)
0267 #define ERDMA_CMD_CREATE_QP_PD_MASK GENMASK(19, 0)
0268 
0269 /* create qp cqn_mtt_cfg */
0270 #define ERDMA_CMD_CREATE_QP_PAGE_SIZE_MASK GENMASK(31, 28)
0271 #define ERDMA_CMD_CREATE_QP_CQN_MASK GENMASK(23, 0)
0272 
0273 /* create qp mtt_cfg */
0274 #define ERDMA_CMD_CREATE_QP_PAGE_OFFSET_MASK GENMASK(31, 12)
0275 #define ERDMA_CMD_CREATE_QP_MTT_CNT_MASK GENMASK(11, 1)
0276 #define ERDMA_CMD_CREATE_QP_MTT_TYPE_MASK BIT(0)
0277 
0278 #define ERDMA_CMDQ_CREATE_QP_RESP_COOKIE_MASK GENMASK_ULL(31, 0)
0279 
0280 struct erdma_cmdq_create_qp_req {
0281     u64 hdr;
0282     u32 cfg0;
0283     u32 cfg1;
0284     u32 sq_cqn_mtt_cfg;
0285     u32 rq_cqn_mtt_cfg;
0286     u64 sq_buf_addr;
0287     u64 rq_buf_addr;
0288     u32 sq_mtt_cfg;
0289     u32 rq_mtt_cfg;
0290     u64 sq_db_info_dma_addr;
0291     u64 rq_db_info_dma_addr;
0292 };
0293 
0294 struct erdma_cmdq_destroy_qp_req {
0295     u64 hdr;
0296     u32 qpn;
0297 };
0298 
0299 /* cap qword 0 definition */
0300 #define ERDMA_CMD_DEV_CAP_MAX_CQE_MASK GENMASK_ULL(47, 40)
0301 #define ERDMA_CMD_DEV_CAP_MAX_RECV_WR_MASK GENMASK_ULL(23, 16)
0302 #define ERDMA_CMD_DEV_CAP_MAX_MR_SIZE_MASK GENMASK_ULL(7, 0)
0303 
0304 /* cap qword 1 definition */
0305 #define ERDMA_CMD_DEV_CAP_DMA_LOCAL_KEY_MASK GENMASK_ULL(63, 32)
0306 #define ERDMA_CMD_DEV_CAP_DEFAULT_CC_MASK GENMASK_ULL(31, 28)
0307 #define ERDMA_CMD_DEV_CAP_QBLOCK_MASK GENMASK_ULL(27, 16)
0308 #define ERDMA_CMD_DEV_CAP_MAX_MW_MASK GENMASK_ULL(7, 0)
0309 
0310 #define ERDMA_NQP_PER_QBLOCK 1024
0311 
0312 #define ERDMA_CMD_INFO0_FW_VER_MASK GENMASK_ULL(31, 0)
0313 
0314 /* CQE hdr */
0315 #define ERDMA_CQE_HDR_OWNER_MASK BIT(31)
0316 #define ERDMA_CQE_HDR_OPCODE_MASK GENMASK(23, 16)
0317 #define ERDMA_CQE_HDR_QTYPE_MASK GENMASK(15, 8)
0318 #define ERDMA_CQE_HDR_SYNDROME_MASK GENMASK(7, 0)
0319 
0320 #define ERDMA_CQE_QTYPE_SQ 0
0321 #define ERDMA_CQE_QTYPE_RQ 1
0322 #define ERDMA_CQE_QTYPE_CMDQ 2
0323 
0324 struct erdma_cqe {
0325     __be32 hdr;
0326     __be32 qe_idx;
0327     __be32 qpn;
0328     union {
0329         __le32 imm_data;
0330         __be32 inv_rkey;
0331     };
0332     __be32 size;
0333     __be32 rsvd[3];
0334 };
0335 
0336 struct erdma_sge {
0337     __aligned_le64 laddr;
0338     __le32 length;
0339     __le32 lkey;
0340 };
0341 
0342 /* Receive Queue Element */
0343 struct erdma_rqe {
0344     __le16 qe_idx;
0345     __le16 rsvd0;
0346     __le32 qpn;
0347     __le32 rsvd1;
0348     __le32 rsvd2;
0349     __le64 to;
0350     __le32 length;
0351     __le32 stag;
0352 };
0353 
0354 /* SQE */
0355 #define ERDMA_SQE_HDR_SGL_LEN_MASK GENMASK_ULL(63, 56)
0356 #define ERDMA_SQE_HDR_WQEBB_CNT_MASK GENMASK_ULL(54, 52)
0357 #define ERDMA_SQE_HDR_QPN_MASK GENMASK_ULL(51, 32)
0358 #define ERDMA_SQE_HDR_OPCODE_MASK GENMASK_ULL(31, 27)
0359 #define ERDMA_SQE_HDR_DWQE_MASK BIT_ULL(26)
0360 #define ERDMA_SQE_HDR_INLINE_MASK BIT_ULL(25)
0361 #define ERDMA_SQE_HDR_FENCE_MASK BIT_ULL(24)
0362 #define ERDMA_SQE_HDR_SE_MASK BIT_ULL(23)
0363 #define ERDMA_SQE_HDR_CE_MASK BIT_ULL(22)
0364 #define ERDMA_SQE_HDR_WQEBB_INDEX_MASK GENMASK_ULL(15, 0)
0365 
0366 /* REG MR attrs */
0367 #define ERDMA_SQE_MR_MODE_MASK GENMASK(1, 0)
0368 #define ERDMA_SQE_MR_ACCESS_MASK GENMASK(5, 2)
0369 #define ERDMA_SQE_MR_MTT_TYPE_MASK GENMASK(7, 6)
0370 #define ERDMA_SQE_MR_MTT_CNT_MASK GENMASK(31, 12)
0371 
0372 struct erdma_write_sqe {
0373     __le64 hdr;
0374     __be32 imm_data;
0375     __le32 length;
0376 
0377     __le32 sink_stag;
0378     __le32 sink_to_l;
0379     __le32 sink_to_h;
0380 
0381     __le32 rsvd;
0382 
0383     struct erdma_sge sgl[0];
0384 };
0385 
0386 struct erdma_send_sqe {
0387     __le64 hdr;
0388     union {
0389         __be32 imm_data;
0390         __le32 invalid_stag;
0391     };
0392 
0393     __le32 length;
0394     struct erdma_sge sgl[0];
0395 };
0396 
0397 struct erdma_readreq_sqe {
0398     __le64 hdr;
0399     __le32 invalid_stag;
0400     __le32 length;
0401     __le32 sink_stag;
0402     __le32 sink_to_l;
0403     __le32 sink_to_h;
0404     __le32 rsvd;
0405 };
0406 
0407 struct erdma_reg_mr_sqe {
0408     __le64 hdr;
0409     __le64 addr;
0410     __le32 length;
0411     __le32 stag;
0412     __le32 attrs;
0413     __le32 rsvd;
0414 };
0415 
0416 /* EQ related. */
0417 #define ERDMA_DEFAULT_EQ_DEPTH 256
0418 
0419 /* ceqe */
0420 #define ERDMA_CEQE_HDR_DB_MASK BIT_ULL(63)
0421 #define ERDMA_CEQE_HDR_PI_MASK GENMASK_ULL(55, 32)
0422 #define ERDMA_CEQE_HDR_O_MASK BIT_ULL(31)
0423 #define ERDMA_CEQE_HDR_CQN_MASK GENMASK_ULL(19, 0)
0424 
0425 /* aeqe */
0426 #define ERDMA_AEQE_HDR_O_MASK BIT(31)
0427 #define ERDMA_AEQE_HDR_TYPE_MASK GENMASK(23, 16)
0428 #define ERDMA_AEQE_HDR_SUBTYPE_MASK GENMASK(7, 0)
0429 
0430 #define ERDMA_AE_TYPE_QP_FATAL_EVENT 0
0431 #define ERDMA_AE_TYPE_QP_ERQ_ERR_EVENT 1
0432 #define ERDMA_AE_TYPE_ACC_ERR_EVENT 2
0433 #define ERDMA_AE_TYPE_CQ_ERR 3
0434 #define ERDMA_AE_TYPE_OTHER_ERROR 4
0435 
0436 struct erdma_aeqe {
0437     __le32 hdr;
0438     __le32 event_data0;
0439     __le32 event_data1;
0440     __le32 rsvd;
0441 };
0442 
0443 enum erdma_opcode {
0444     ERDMA_OP_WRITE = 0,
0445     ERDMA_OP_READ = 1,
0446     ERDMA_OP_SEND = 2,
0447     ERDMA_OP_SEND_WITH_IMM = 3,
0448 
0449     ERDMA_OP_RECEIVE = 4,
0450     ERDMA_OP_RECV_IMM = 5,
0451     ERDMA_OP_RECV_INV = 6,
0452 
0453     ERDMA_OP_REQ_ERR = 7,
0454     ERDMA_OP_READ_RESPONSE = 8,
0455     ERDMA_OP_WRITE_WITH_IMM = 9,
0456 
0457     ERDMA_OP_RECV_ERR = 10,
0458 
0459     ERDMA_OP_INVALIDATE = 11,
0460     ERDMA_OP_RSP_SEND_IMM = 12,
0461     ERDMA_OP_SEND_WITH_INV = 13,
0462 
0463     ERDMA_OP_REG_MR = 14,
0464     ERDMA_OP_LOCAL_INV = 15,
0465     ERDMA_OP_READ_WITH_INV = 16,
0466     ERDMA_NUM_OPCODES = 17,
0467     ERDMA_OP_INVALID = ERDMA_NUM_OPCODES + 1
0468 };
0469 
0470 enum erdma_wc_status {
0471     ERDMA_WC_SUCCESS = 0,
0472     ERDMA_WC_GENERAL_ERR = 1,
0473     ERDMA_WC_RECV_WQE_FORMAT_ERR = 2,
0474     ERDMA_WC_RECV_STAG_INVALID_ERR = 3,
0475     ERDMA_WC_RECV_ADDR_VIOLATION_ERR = 4,
0476     ERDMA_WC_RECV_RIGHT_VIOLATION_ERR = 5,
0477     ERDMA_WC_RECV_PDID_ERR = 6,
0478     ERDMA_WC_RECV_WARRPING_ERR = 7,
0479     ERDMA_WC_SEND_WQE_FORMAT_ERR = 8,
0480     ERDMA_WC_SEND_WQE_ORD_EXCEED = 9,
0481     ERDMA_WC_SEND_STAG_INVALID_ERR = 10,
0482     ERDMA_WC_SEND_ADDR_VIOLATION_ERR = 11,
0483     ERDMA_WC_SEND_RIGHT_VIOLATION_ERR = 12,
0484     ERDMA_WC_SEND_PDID_ERR = 13,
0485     ERDMA_WC_SEND_WARRPING_ERR = 14,
0486     ERDMA_WC_FLUSH_ERR = 15,
0487     ERDMA_WC_RETRY_EXC_ERR = 16,
0488     ERDMA_NUM_WC_STATUS
0489 };
0490 
0491 enum erdma_vendor_err {
0492     ERDMA_WC_VENDOR_NO_ERR = 0,
0493     ERDMA_WC_VENDOR_INVALID_RQE = 1,
0494     ERDMA_WC_VENDOR_RQE_INVALID_STAG = 2,
0495     ERDMA_WC_VENDOR_RQE_ADDR_VIOLATION = 3,
0496     ERDMA_WC_VENDOR_RQE_ACCESS_RIGHT_ERR = 4,
0497     ERDMA_WC_VENDOR_RQE_INVALID_PD = 5,
0498     ERDMA_WC_VENDOR_RQE_WRAP_ERR = 6,
0499     ERDMA_WC_VENDOR_INVALID_SQE = 0x20,
0500     ERDMA_WC_VENDOR_ZERO_ORD = 0x21,
0501     ERDMA_WC_VENDOR_SQE_INVALID_STAG = 0x30,
0502     ERDMA_WC_VENDOR_SQE_ADDR_VIOLATION = 0x31,
0503     ERDMA_WC_VENDOR_SQE_ACCESS_ERR = 0x32,
0504     ERDMA_WC_VENDOR_SQE_INVALID_PD = 0x33,
0505     ERDMA_WC_VENDOR_SQE_WARP_ERR = 0x34
0506 };
0507 
0508 #endif