1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2 3/* Authors: Cheng Xu <chengyou@linux.alibaba.com> */ 4/* Kai Shen <kaishen@linux.alibaba.com> */ 5/* Copyright (c) 2020-2022, Alibaba Group. */ 6 7#ifndef __ERDMA_HW_H__ 8#define __ERDMA_HW_H__ 9 10#include <linux/kernel.h> 11#include <linux/types.h> 12 13/* PCIe device related definition. */ 14#define PCI_VENDOR_ID_ALIBABA 0x1ded 15 16#define ERDMA_PCI_WIDTH 64 17#define ERDMA_FUNC_BAR 0 18#define ERDMA_MISX_BAR 2 19 20#define ERDMA_BAR_MASK (BIT(ERDMA_FUNC_BAR) | BIT(ERDMA_MISX_BAR)) 21 22/* MSI-X related. */ 23#define ERDMA_NUM_MSIX_VEC 32U 24#define ERDMA_MSIX_VECTOR_CMDQ 0 25 26/* PCIe Bar0 Registers. */ 27#define ERDMA_REGS_VERSION_REG 0x0 28#define ERDMA_REGS_DEV_CTRL_REG 0x10 29#define ERDMA_REGS_DEV_ST_REG 0x14 30#define ERDMA_REGS_NETDEV_MAC_L_REG 0x18 31#define ERDMA_REGS_NETDEV_MAC_H_REG 0x1C 32#define ERDMA_REGS_CMDQ_SQ_ADDR_L_REG 0x20 33#define ERDMA_REGS_CMDQ_SQ_ADDR_H_REG 0x24 34#define ERDMA_REGS_CMDQ_CQ_ADDR_L_REG 0x28 35#define ERDMA_REGS_CMDQ_CQ_ADDR_H_REG 0x2C 36#define ERDMA_REGS_CMDQ_DEPTH_REG 0x30 37#define ERDMA_REGS_CMDQ_EQ_DEPTH_REG 0x34 38#define ERDMA_REGS_CMDQ_EQ_ADDR_L_REG 0x38 39#define ERDMA_REGS_CMDQ_EQ_ADDR_H_REG 0x3C 40#define ERDMA_REGS_AEQ_ADDR_L_REG 0x40 41#define ERDMA_REGS_AEQ_ADDR_H_REG 0x44 42#define ERDMA_REGS_AEQ_DEPTH_REG 0x48 43#define ERDMA_REGS_GRP_NUM_REG 0x4c 44#define ERDMA_REGS_AEQ_DB_REG 0x50 45#define ERDMA_CMDQ_SQ_DB_HOST_ADDR_REG 0x60 46#define ERDMA_CMDQ_CQ_DB_HOST_ADDR_REG 0x68 47#define ERDMA_CMDQ_EQ_DB_HOST_ADDR_REG 0x70 48#define ERDMA_AEQ_DB_HOST_ADDR_REG 0x78 49#define ERDMA_REGS_STATS_TSO_IN_PKTS_REG 0x80 50#define ERDMA_REGS_STATS_TSO_OUT_PKTS_REG 0x88 51#define ERDMA_REGS_STATS_TSO_OUT_BYTES_REG 0x90 52#define ERDMA_REGS_STATS_TX_DROP_PKTS_REG 0x98 53#define ERDMA_REGS_STATS_TX_BPS_METER_DROP_PKTS_REG 0xa0 54#define ERDMA_REGS_STATS_TX_PPS_METER_DROP_PKTS_REG 0xa8 55#define ERDMA_REGS_STATS_RX_PKTS_REG 0xc0 56#define ERDMA_REGS_STATS_RX_BYTES_REG 0xc8 57#define ERDMA_REGS_STATS_RX_DROP_PKTS_REG 0xd0 58#define ERDMA_REGS_STATS_RX_BPS_METER_DROP_PKTS_REG 0xd8 59#define ERDMA_REGS_STATS_RX_PPS_METER_DROP_PKTS_REG 0xe0 60#define ERDMA_REGS_CEQ_DB_BASE_REG 0x100 61#define ERDMA_CMDQ_SQDB_REG 0x200 62#define ERDMA_CMDQ_CQDB_REG 0x300 63 64/* DEV_CTRL_REG details. */ 65#define ERDMA_REG_DEV_CTRL_RESET_MASK 0x00000001 66#define ERDMA_REG_DEV_CTRL_INIT_MASK 0x00000002 67 68/* DEV_ST_REG details. */ 69#define ERDMA_REG_DEV_ST_RESET_DONE_MASK 0x00000001U 70#define ERDMA_REG_DEV_ST_INIT_DONE_MASK 0x00000002U 71 72/* eRDMA PCIe DBs definition. */ 73#define ERDMA_BAR_DB_SPACE_BASE 4096 74 75#define ERDMA_BAR_SQDB_SPACE_OFFSET ERDMA_BAR_DB_SPACE_BASE 76#define ERDMA_BAR_SQDB_SPACE_SIZE (384 * 1024) 77 78#define ERDMA_BAR_RQDB_SPACE_OFFSET \ 79 (ERDMA_BAR_SQDB_SPACE_OFFSET + ERDMA_BAR_SQDB_SPACE_SIZE) 80#define ERDMA_BAR_RQDB_SPACE_SIZE (96 * 1024) 81 82#define ERDMA_BAR_CQDB_SPACE_OFFSET \ 83 (ERDMA_BAR_RQDB_SPACE_OFFSET + ERDMA_BAR_RQDB_SPACE_SIZE) 84 85#define ERDMA_SDB_SHARED_PAGE_INDEX 95 86 87/* Doorbell related. */ 88#define ERDMA_DB_SIZE 8 89 90#define ERDMA_CQDB_IDX_MASK GENMASK_ULL(63, 56) 91#define ERDMA_CQDB_CQN_MASK GENMASK_ULL(55, 32) 92#define ERDMA_CQDB_ARM_MASK BIT_ULL(31) 93#define ERDMA_CQDB_SOL_MASK BIT_ULL(30) 94#define ERDMA_CQDB_CMDSN_MASK GENMASK_ULL(29, 28) 95#define ERDMA_CQDB_CI_MASK GENMASK_ULL(23, 0) 96 97#define ERDMA_EQDB_ARM_MASK BIT(31) 98#define ERDMA_EQDB_CI_MASK GENMASK_ULL(23, 0) 99 100#define ERDMA_PAGE_SIZE_SUPPORT 0x7FFFF000 101 102/* Hardware page size definition */ 103#define ERDMA_HW_PAGE_SHIFT 12 104#define ERDMA_HW_PAGE_SIZE 4096 105 106/* WQE related. */ 107#define EQE_SIZE 16 108#define EQE_SHIFT 4 109#define RQE_SIZE 32 110#define RQE_SHIFT 5 111#define CQE_SIZE 32 112#define CQE_SHIFT 5 113#define SQEBB_SIZE 32 114#define SQEBB_SHIFT 5 115#define SQEBB_MASK (~(SQEBB_SIZE - 1)) 116#define SQEBB_ALIGN(size) ((size + SQEBB_SIZE - 1) & SQEBB_MASK) 117#define SQEBB_COUNT(size) (SQEBB_ALIGN(size) >> SQEBB_SHIFT) 118 119#define ERDMA_MAX_SQE_SIZE 128 120#define ERDMA_MAX_WQEBB_PER_SQE 4 121 122/* CMDQ related. */ 123#define ERDMA_CMDQ_MAX_OUTSTANDING 128 124#define ERDMA_CMDQ_SQE_SIZE 128 125 126/* cmdq sub module definition. */ 127enum CMDQ_WQE_SUB_MOD { 128 CMDQ_SUBMOD_RDMA = 0, 129 CMDQ_SUBMOD_COMMON = 1 130}; 131 132enum CMDQ_RDMA_OPCODE { 133 CMDQ_OPCODE_QUERY_DEVICE = 0, 134 CMDQ_OPCODE_CREATE_QP = 1, 135 CMDQ_OPCODE_DESTROY_QP = 2, 136 CMDQ_OPCODE_MODIFY_QP = 3, 137 CMDQ_OPCODE_CREATE_CQ = 4, 138 CMDQ_OPCODE_DESTROY_CQ = 5, 139 CMDQ_OPCODE_REFLUSH = 6, 140 CMDQ_OPCODE_REG_MR = 8, 141 CMDQ_OPCODE_DEREG_MR = 9 142}; 143 144enum CMDQ_COMMON_OPCODE { 145 CMDQ_OPCODE_CREATE_EQ = 0, 146 CMDQ_OPCODE_DESTROY_EQ = 1, 147 CMDQ_OPCODE_QUERY_FW_INFO = 2, 148 CMDQ_OPCODE_CONF_MTU = 3, 149 CMDQ_OPCODE_CONF_DEVICE = 5, 150 CMDQ_OPCODE_ALLOC_DB = 8, 151 CMDQ_OPCODE_FREE_DB = 9, 152}; 153 154/* cmdq-SQE HDR */ 155#define ERDMA_CMD_HDR_WQEBB_CNT_MASK GENMASK_ULL(54, 52) 156#define ERDMA_CMD_HDR_CONTEXT_COOKIE_MASK GENMASK_ULL(47, 32) 157#define ERDMA_CMD_HDR_SUB_MOD_MASK GENMASK_ULL(25, 24) 158#define ERDMA_CMD_HDR_OPCODE_MASK GENMASK_ULL(23, 16) 159#define ERDMA_CMD_HDR_WQEBB_INDEX_MASK GENMASK_ULL(15, 0) 160 161struct erdma_cmdq_destroy_cq_req { 162 u64 hdr; 163 u32 cqn; 164}; 165 166#define ERDMA_EQ_TYPE_AEQ 0 167#define ERDMA_EQ_TYPE_CEQ 1 168 169struct erdma_cmdq_create_eq_req { 170 u64 hdr; 171 u64 qbuf_addr; 172 u8 vector_idx; 173 u8 eqn; 174 u8 depth; 175 u8 qtype; 176 u32 db_dma_addr_l; 177 u32 db_dma_addr_h; 178}; 179 180struct erdma_cmdq_destroy_eq_req { 181 u64 hdr; 182 u64 rsvd0; 183 u8 vector_idx; 184 u8 eqn; 185 u8 rsvd1; 186 u8 qtype; 187}; 188 189/* config device cfg */ 190#define ERDMA_CMD_CONFIG_DEVICE_PS_EN_MASK BIT(31) 191#define ERDMA_CMD_CONFIG_DEVICE_PGSHIFT_MASK GENMASK(4, 0) 192 193struct erdma_cmdq_config_device_req { 194 u64 hdr; 195 u32 cfg; 196 u32 rsvd[5]; 197}; 198 199struct erdma_cmdq_config_mtu_req { 200 u64 hdr; 201 u32 mtu; 202}; 203 204/* ext db requests(alloc and free) cfg */ 205#define ERDMA_CMD_EXT_DB_CQ_EN_MASK BIT(2) 206#define ERDMA_CMD_EXT_DB_RQ_EN_MASK BIT(1) 207#define ERDMA_CMD_EXT_DB_SQ_EN_MASK BIT(0) 208 209struct erdma_cmdq_ext_db_req { 210 u64 hdr; 211 u32 cfg; 212 u16 rdb_off; 213 u16 sdb_off; 214 u16 rsvd0; 215 u16 cdb_off; 216 u32 rsvd1[3]; 217}; 218 219/* alloc db response qword 0 definition */ 220#define ERDMA_CMD_ALLOC_DB_RESP_RDB_MASK GENMASK_ULL(63, 48) 221#define ERDMA_CMD_ALLOC_DB_RESP_CDB_MASK GENMASK_ULL(47, 32) 222#define ERDMA_CMD_ALLOC_DB_RESP_SDB_MASK GENMASK_ULL(15, 0) 223 224/* create_cq cfg0 */ 225#define ERDMA_CMD_CREATE_CQ_DEPTH_MASK GENMASK(31, 24) 226#define ERDMA_CMD_CREATE_CQ_PAGESIZE_MASK GENMASK(23, 20) 227#define ERDMA_CMD_CREATE_CQ_CQN_MASK GENMASK(19, 0) 228 229/* create_cq cfg1 */ 230#define ERDMA_CMD_CREATE_CQ_MTT_CNT_MASK GENMASK(31, 16) 231#define ERDMA_CMD_CREATE_CQ_MTT_LEVEL_MASK BIT(15) 232#define ERDMA_CMD_CREATE_CQ_MTT_DB_CFG_MASK BIT(11) 233#define ERDMA_CMD_CREATE_CQ_EQN_MASK GENMASK(9, 0) 234 235/* create_cq cfg2 */ 236#define ERDMA_CMD_CREATE_CQ_DB_CFG_MASK GENMASK(15, 0) 237 238struct erdma_cmdq_create_cq_req { 239 u64 hdr; 240 u32 cfg0; 241 u32 qbuf_addr_l; 242 u32 qbuf_addr_h; 243 u32 cfg1; 244 u64 cq_db_info_addr; 245 u32 first_page_offset; 246 u32 cfg2; 247}; 248 249/* regmr/deregmr cfg0 */ 250#define ERDMA_CMD_MR_VALID_MASK BIT(31) 251#define ERDMA_CMD_MR_VERSION_MASK GENMASK(30, 28) 252#define ERDMA_CMD_MR_KEY_MASK GENMASK(27, 20) 253#define ERDMA_CMD_MR_MPT_IDX_MASK GENMASK(19, 0) 254 255/* regmr cfg1 */ 256#define ERDMA_CMD_REGMR_PD_MASK GENMASK(31, 12) 257#define ERDMA_CMD_REGMR_TYPE_MASK GENMASK(7, 6) 258#define ERDMA_CMD_REGMR_RIGHT_MASK GENMASK(5, 1) 259 260/* regmr cfg2 */ 261#define ERDMA_CMD_REGMR_PAGESIZE_MASK GENMASK(31, 27) 262#define ERDMA_CMD_REGMR_MTT_PAGESIZE_MASK GENMASK(26, 24) 263#define ERDMA_CMD_REGMR_MTT_LEVEL_MASK GENMASK(21, 20) 264#define ERDMA_CMD_REGMR_MTT_CNT_MASK GENMASK(19, 0) 265 266struct erdma_cmdq_reg_mr_req { 267 u64 hdr; 268 u32 cfg0; 269 u32 cfg1; 270 u64 start_va; 271 u32 size; 272 u32 cfg2; 273 union { 274 u64 phy_addr[4]; 275 struct { 276 u64 rsvd; 277 u32 size_h; 278 u32 mtt_cnt_h; 279 }; 280 }; 281}; 282 283struct erdma_cmdq_dereg_mr_req { 284 u64 hdr; 285 u32 cfg; 286}; 287 288/* modify qp cfg */ 289#define ERDMA_CMD_MODIFY_QP_STATE_MASK GENMASK(31, 24) 290#define ERDMA_CMD_MODIFY_QP_CC_MASK GENMASK(23, 20) 291#define ERDMA_CMD_MODIFY_QP_QPN_MASK GENMASK(19, 0) 292 293struct erdma_cmdq_modify_qp_req { 294 u64 hdr; 295 u32 cfg; 296 u32 cookie; 297 __be32 dip; 298 __be32 sip; 299 __be16 sport; 300 __be16 dport; 301 u32 send_nxt; 302 u32 recv_nxt; 303}; 304 305/* create qp cfg0 */ 306#define ERDMA_CMD_CREATE_QP_SQ_DEPTH_MASK GENMASK(31, 20) 307#define ERDMA_CMD_CREATE_QP_QPN_MASK GENMASK(19, 0) 308 309/* create qp cfg1 */ 310#define ERDMA_CMD_CREATE_QP_RQ_DEPTH_MASK GENMASK(31, 20) 311#define ERDMA_CMD_CREATE_QP_PD_MASK GENMASK(19, 0) 312 313/* create qp cqn_mtt_cfg */ 314#define ERDMA_CMD_CREATE_QP_PAGE_SIZE_MASK GENMASK(31, 28) 315#define ERDMA_CMD_CREATE_QP_DB_CFG_MASK BIT(25) 316#define ERDMA_CMD_CREATE_QP_CQN_MASK GENMASK(23, 0) 317 318/* create qp mtt_cfg */ 319#define ERDMA_CMD_CREATE_QP_PAGE_OFFSET_MASK GENMASK(31, 12) 320#define ERDMA_CMD_CREATE_QP_MTT_CNT_MASK GENMASK(11, 1) 321#define ERDMA_CMD_CREATE_QP_MTT_LEVEL_MASK BIT(0) 322 323/* create qp db cfg */ 324#define ERDMA_CMD_CREATE_QP_SQDB_CFG_MASK GENMASK(31, 16) 325#define ERDMA_CMD_CREATE_QP_RQDB_CFG_MASK GENMASK(15, 0) 326 327#define ERDMA_CMDQ_CREATE_QP_RESP_COOKIE_MASK GENMASK_ULL(31, 0) 328 329struct erdma_cmdq_create_qp_req { 330 u64 hdr; 331 u32 cfg0; 332 u32 cfg1; 333 u32 sq_cqn_mtt_cfg; 334 u32 rq_cqn_mtt_cfg; 335 u64 sq_buf_addr; 336 u64 rq_buf_addr; 337 u32 sq_mtt_cfg; 338 u32 rq_mtt_cfg; 339 u64 sq_db_info_dma_addr; 340 u64 rq_db_info_dma_addr; 341 342 u64 sq_mtt_entry[3]; 343 u64 rq_mtt_entry[3]; 344 345 u32 db_cfg; 346}; 347 348struct erdma_cmdq_destroy_qp_req { 349 u64 hdr; 350 u32 qpn; 351}; 352 353struct erdma_cmdq_reflush_req { 354 u64 hdr; 355 u32 qpn; 356 u32 sq_pi; 357 u32 rq_pi; 358}; 359 360/* cap qword 0 definition */ 361#define ERDMA_CMD_DEV_CAP_MAX_CQE_MASK GENMASK_ULL(47, 40) 362#define ERDMA_CMD_DEV_CAP_FLAGS_MASK GENMASK_ULL(31, 24) 363#define ERDMA_CMD_DEV_CAP_MAX_RECV_WR_MASK GENMASK_ULL(23, 16) 364#define ERDMA_CMD_DEV_CAP_MAX_MR_SIZE_MASK GENMASK_ULL(7, 0) 365 366/* cap qword 1 definition */ 367#define ERDMA_CMD_DEV_CAP_DMA_LOCAL_KEY_MASK GENMASK_ULL(63, 32) 368#define ERDMA_CMD_DEV_CAP_DEFAULT_CC_MASK GENMASK_ULL(31, 28) 369#define ERDMA_CMD_DEV_CAP_QBLOCK_MASK GENMASK_ULL(27, 16) 370#define ERDMA_CMD_DEV_CAP_MAX_MW_MASK GENMASK_ULL(7, 0) 371 372#define ERDMA_NQP_PER_QBLOCK 1024 373 374enum { 375 ERDMA_DEV_CAP_FLAGS_ATOMIC = 1 << 7, 376 ERDMA_DEV_CAP_FLAGS_MTT_VA = 1 << 5, 377 ERDMA_DEV_CAP_FLAGS_EXTEND_DB = 1 << 3, 378}; 379 380#define ERDMA_CMD_INFO0_FW_VER_MASK GENMASK_ULL(31, 0) 381 382/* CQE hdr */ 383#define ERDMA_CQE_HDR_OWNER_MASK BIT(31) 384#define ERDMA_CQE_HDR_OPCODE_MASK GENMASK(23, 16) 385#define ERDMA_CQE_HDR_QTYPE_MASK GENMASK(15, 8) 386#define ERDMA_CQE_HDR_SYNDROME_MASK GENMASK(7, 0) 387 388#define ERDMA_CQE_QTYPE_SQ 0 389#define ERDMA_CQE_QTYPE_RQ 1 390#define ERDMA_CQE_QTYPE_CMDQ 2 391 392struct erdma_cqe { 393 __be32 hdr; 394 __be32 qe_idx; 395 __be32 qpn; 396 union { 397 __le32 imm_data; 398 __be32 inv_rkey; 399 }; 400 __be32 size; 401 __be32 rsvd[3]; 402}; 403 404struct erdma_sge { 405 __aligned_le64 addr; 406 __le32 length; 407 __le32 key; 408}; 409 410/* Receive Queue Element */ 411struct erdma_rqe { 412 __le16 qe_idx; 413 __le16 rsvd0; 414 __le32 qpn; 415 __le32 rsvd1; 416 __le32 rsvd2; 417 __le64 to; 418 __le32 length; 419 __le32 stag; 420}; 421 422/* SQE */ 423#define ERDMA_SQE_HDR_SGL_LEN_MASK GENMASK_ULL(63, 56) 424#define ERDMA_SQE_HDR_WQEBB_CNT_MASK GENMASK_ULL(54, 52) 425#define ERDMA_SQE_HDR_QPN_MASK GENMASK_ULL(51, 32) 426#define ERDMA_SQE_HDR_OPCODE_MASK GENMASK_ULL(31, 27) 427#define ERDMA_SQE_HDR_DWQE_MASK BIT_ULL(26) 428#define ERDMA_SQE_HDR_INLINE_MASK BIT_ULL(25) 429#define ERDMA_SQE_HDR_FENCE_MASK BIT_ULL(24) 430#define ERDMA_SQE_HDR_SE_MASK BIT_ULL(23) 431#define ERDMA_SQE_HDR_CE_MASK BIT_ULL(22) 432#define ERDMA_SQE_HDR_WQEBB_INDEX_MASK GENMASK_ULL(15, 0) 433 434/* REG MR attrs */ 435#define ERDMA_SQE_MR_ACCESS_MASK GENMASK(5, 1) 436#define ERDMA_SQE_MR_MTT_TYPE_MASK GENMASK(7, 6) 437#define ERDMA_SQE_MR_MTT_CNT_MASK GENMASK(31, 12) 438 439struct erdma_write_sqe { 440 __le64 hdr; 441 __be32 imm_data; 442 __le32 length; 443 444 __le32 sink_stag; 445 __le32 sink_to_l; 446 __le32 sink_to_h; 447 448 __le32 rsvd; 449 450 struct erdma_sge sgl[]; 451}; 452 453struct erdma_send_sqe { 454 __le64 hdr; 455 union { 456 __be32 imm_data; 457 __le32 invalid_stag; 458 }; 459 460 __le32 length; 461 struct erdma_sge sgl[]; 462}; 463 464struct erdma_readreq_sqe { 465 __le64 hdr; 466 __le32 invalid_stag; 467 __le32 length; 468 __le32 sink_stag; 469 __le32 sink_to_l; 470 __le32 sink_to_h; 471 __le32 rsvd; 472}; 473 474struct erdma_atomic_sqe { 475 __le64 hdr; 476 __le64 rsvd; 477 __le64 fetchadd_swap_data; 478 __le64 cmp_data; 479 480 struct erdma_sge remote; 481 struct erdma_sge sgl; 482}; 483 484struct erdma_reg_mr_sqe { 485 __le64 hdr; 486 __le64 addr; 487 __le32 length; 488 __le32 stag; 489 __le32 attrs; 490 __le32 rsvd; 491}; 492 493/* EQ related. */ 494#define ERDMA_DEFAULT_EQ_DEPTH 4096 495 496/* ceqe */ 497#define ERDMA_CEQE_HDR_DB_MASK BIT_ULL(63) 498#define ERDMA_CEQE_HDR_PI_MASK GENMASK_ULL(55, 32) 499#define ERDMA_CEQE_HDR_O_MASK BIT_ULL(31) 500#define ERDMA_CEQE_HDR_CQN_MASK GENMASK_ULL(19, 0) 501 502/* aeqe */ 503#define ERDMA_AEQE_HDR_O_MASK BIT(31) 504#define ERDMA_AEQE_HDR_TYPE_MASK GENMASK(23, 16) 505#define ERDMA_AEQE_HDR_SUBTYPE_MASK GENMASK(7, 0) 506 507#define ERDMA_AE_TYPE_QP_FATAL_EVENT 0 508#define ERDMA_AE_TYPE_QP_ERQ_ERR_EVENT 1 509#define ERDMA_AE_TYPE_ACC_ERR_EVENT 2 510#define ERDMA_AE_TYPE_CQ_ERR 3 511#define ERDMA_AE_TYPE_OTHER_ERROR 4 512 513struct erdma_aeqe { 514 __le32 hdr; 515 __le32 event_data0; 516 __le32 event_data1; 517 __le32 rsvd; 518}; 519 520enum erdma_opcode { 521 ERDMA_OP_WRITE = 0, 522 ERDMA_OP_READ = 1, 523 ERDMA_OP_SEND = 2, 524 ERDMA_OP_SEND_WITH_IMM = 3, 525 526 ERDMA_OP_RECEIVE = 4, 527 ERDMA_OP_RECV_IMM = 5, 528 ERDMA_OP_RECV_INV = 6, 529 530 ERDMA_OP_RSVD0 = 7, 531 ERDMA_OP_RSVD1 = 8, 532 ERDMA_OP_WRITE_WITH_IMM = 9, 533 534 ERDMA_OP_RSVD2 = 10, 535 ERDMA_OP_RSVD3 = 11, 536 537 ERDMA_OP_RSP_SEND_IMM = 12, 538 ERDMA_OP_SEND_WITH_INV = 13, 539 540 ERDMA_OP_REG_MR = 14, 541 ERDMA_OP_LOCAL_INV = 15, 542 ERDMA_OP_READ_WITH_INV = 16, 543 ERDMA_OP_ATOMIC_CAS = 17, 544 ERDMA_OP_ATOMIC_FAA = 18, 545 ERDMA_NUM_OPCODES = 19, 546 ERDMA_OP_INVALID = ERDMA_NUM_OPCODES + 1 547}; 548 549enum erdma_wc_status { 550 ERDMA_WC_SUCCESS = 0, 551 ERDMA_WC_GENERAL_ERR = 1, 552 ERDMA_WC_RECV_WQE_FORMAT_ERR = 2, 553 ERDMA_WC_RECV_STAG_INVALID_ERR = 3, 554 ERDMA_WC_RECV_ADDR_VIOLATION_ERR = 4, 555 ERDMA_WC_RECV_RIGHT_VIOLATION_ERR = 5, 556 ERDMA_WC_RECV_PDID_ERR = 6, 557 ERDMA_WC_RECV_WARRPING_ERR = 7, 558 ERDMA_WC_SEND_WQE_FORMAT_ERR = 8, 559 ERDMA_WC_SEND_WQE_ORD_EXCEED = 9, 560 ERDMA_WC_SEND_STAG_INVALID_ERR = 10, 561 ERDMA_WC_SEND_ADDR_VIOLATION_ERR = 11, 562 ERDMA_WC_SEND_RIGHT_VIOLATION_ERR = 12, 563 ERDMA_WC_SEND_PDID_ERR = 13, 564 ERDMA_WC_SEND_WARRPING_ERR = 14, 565 ERDMA_WC_FLUSH_ERR = 15, 566 ERDMA_WC_RETRY_EXC_ERR = 16, 567 ERDMA_NUM_WC_STATUS 568}; 569 570enum erdma_vendor_err { 571 ERDMA_WC_VENDOR_NO_ERR = 0, 572 ERDMA_WC_VENDOR_INVALID_RQE = 1, 573 ERDMA_WC_VENDOR_RQE_INVALID_STAG = 2, 574 ERDMA_WC_VENDOR_RQE_ADDR_VIOLATION = 3, 575 ERDMA_WC_VENDOR_RQE_ACCESS_RIGHT_ERR = 4, 576 ERDMA_WC_VENDOR_RQE_INVALID_PD = 5, 577 ERDMA_WC_VENDOR_RQE_WRAP_ERR = 6, 578 ERDMA_WC_VENDOR_INVALID_SQE = 0x20, 579 ERDMA_WC_VENDOR_ZERO_ORD = 0x21, 580 ERDMA_WC_VENDOR_SQE_INVALID_STAG = 0x30, 581 ERDMA_WC_VENDOR_SQE_ADDR_VIOLATION = 0x31, 582 ERDMA_WC_VENDOR_SQE_ACCESS_ERR = 0x32, 583 ERDMA_WC_VENDOR_SQE_INVALID_PD = 0x33, 584 ERDMA_WC_VENDOR_SQE_WARP_ERR = 0x34 585}; 586 587#endif 588