erdma_hw.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
  2. /* Authors: Cheng Xu <[email protected]> */
  3. /* Kai Shen <[email protected]> */
  4. /* Copyright (c) 2020-2022, Alibaba Group. */
  5. #ifndef __ERDMA_HW_H__
  6. #define __ERDMA_HW_H__
  7. #include <linux/kernel.h>
  8. #include <linux/types.h>
  9. /* PCIe device related definition. */
  10. #define PCI_VENDOR_ID_ALIBABA 0x1ded
  11. #define ERDMA_PCI_WIDTH 64
  12. #define ERDMA_FUNC_BAR 0
  13. #define ERDMA_MISX_BAR 2
  14. #define ERDMA_BAR_MASK (BIT(ERDMA_FUNC_BAR) | BIT(ERDMA_MISX_BAR))
  15. /* MSI-X related. */
  16. #define ERDMA_NUM_MSIX_VEC 32U
  17. #define ERDMA_MSIX_VECTOR_CMDQ 0
  18. /* PCIe Bar0 Registers. */
  19. #define ERDMA_REGS_VERSION_REG 0x0
  20. #define ERDMA_REGS_DEV_CTRL_REG 0x10
  21. #define ERDMA_REGS_DEV_ST_REG 0x14
  22. #define ERDMA_REGS_NETDEV_MAC_L_REG 0x18
  23. #define ERDMA_REGS_NETDEV_MAC_H_REG 0x1C
  24. #define ERDMA_REGS_CMDQ_SQ_ADDR_L_REG 0x20
  25. #define ERDMA_REGS_CMDQ_SQ_ADDR_H_REG 0x24
  26. #define ERDMA_REGS_CMDQ_CQ_ADDR_L_REG 0x28
  27. #define ERDMA_REGS_CMDQ_CQ_ADDR_H_REG 0x2C
  28. #define ERDMA_REGS_CMDQ_DEPTH_REG 0x30
  29. #define ERDMA_REGS_CMDQ_EQ_DEPTH_REG 0x34
  30. #define ERDMA_REGS_CMDQ_EQ_ADDR_L_REG 0x38
  31. #define ERDMA_REGS_CMDQ_EQ_ADDR_H_REG 0x3C
  32. #define ERDMA_REGS_AEQ_ADDR_L_REG 0x40
  33. #define ERDMA_REGS_AEQ_ADDR_H_REG 0x44
  34. #define ERDMA_REGS_AEQ_DEPTH_REG 0x48
  35. #define ERDMA_REGS_GRP_NUM_REG 0x4c
  36. #define ERDMA_REGS_AEQ_DB_REG 0x50
  37. #define ERDMA_CMDQ_SQ_DB_HOST_ADDR_REG 0x60
  38. #define ERDMA_CMDQ_CQ_DB_HOST_ADDR_REG 0x68
  39. #define ERDMA_CMDQ_EQ_DB_HOST_ADDR_REG 0x70
  40. #define ERDMA_AEQ_DB_HOST_ADDR_REG 0x78
  41. #define ERDMA_REGS_STATS_TSO_IN_PKTS_REG 0x80
  42. #define ERDMA_REGS_STATS_TSO_OUT_PKTS_REG 0x88
  43. #define ERDMA_REGS_STATS_TSO_OUT_BYTES_REG 0x90
  44. #define ERDMA_REGS_STATS_TX_DROP_PKTS_REG 0x98
  45. #define ERDMA_REGS_STATS_TX_BPS_METER_DROP_PKTS_REG 0xa0
  46. #define ERDMA_REGS_STATS_TX_PPS_METER_DROP_PKTS_REG 0xa8
  47. #define ERDMA_REGS_STATS_RX_PKTS_REG 0xc0
  48. #define ERDMA_REGS_STATS_RX_BYTES_REG 0xc8
  49. #define ERDMA_REGS_STATS_RX_DROP_PKTS_REG 0xd0
  50. #define ERDMA_REGS_STATS_RX_BPS_METER_DROP_PKTS_REG 0xd8
  51. #define ERDMA_REGS_STATS_RX_PPS_METER_DROP_PKTS_REG 0xe0
  52. #define ERDMA_REGS_CEQ_DB_BASE_REG 0x100
  53. #define ERDMA_CMDQ_SQDB_REG 0x200
  54. #define ERDMA_CMDQ_CQDB_REG 0x300
  55. /* DEV_CTRL_REG details. */
  56. #define ERDMA_REG_DEV_CTRL_RESET_MASK 0x00000001
  57. #define ERDMA_REG_DEV_CTRL_INIT_MASK 0x00000002
  58. /* DEV_ST_REG details. */
  59. #define ERDMA_REG_DEV_ST_RESET_DONE_MASK 0x00000001U
  60. #define ERDMA_REG_DEV_ST_INIT_DONE_MASK 0x00000002U
  61. /* eRDMA PCIe DBs definition. */
  62. #define ERDMA_BAR_DB_SPACE_BASE 4096
  63. #define ERDMA_BAR_SQDB_SPACE_OFFSET ERDMA_BAR_DB_SPACE_BASE
  64. #define ERDMA_BAR_SQDB_SPACE_SIZE (384 * 1024)
  65. #define ERDMA_BAR_RQDB_SPACE_OFFSET \
  66. (ERDMA_BAR_SQDB_SPACE_OFFSET + ERDMA_BAR_SQDB_SPACE_SIZE)
  67. #define ERDMA_BAR_RQDB_SPACE_SIZE (96 * 1024)
  68. #define ERDMA_BAR_CQDB_SPACE_OFFSET \
  69. (ERDMA_BAR_RQDB_SPACE_OFFSET + ERDMA_BAR_RQDB_SPACE_SIZE)
  70. /* Doorbell page resources related. */
  71. /*
  72. * Max # of parallelly issued directSQE is 3072 per device,
  73. * hardware organizes this into 24 group, per group has 128 credits.
  74. */
  75. #define ERDMA_DWQE_MAX_GRP_CNT 24
  76. #define ERDMA_DWQE_NUM_PER_GRP 128
  77. #define ERDMA_DWQE_TYPE0_CNT 64
  78. #define ERDMA_DWQE_TYPE1_CNT 496
  79. /* type1 DB contains 2 DBs, takes 256Byte. */
  80. #define ERDMA_DWQE_TYPE1_CNT_PER_PAGE 16
  81. #define ERDMA_SDB_SHARED_PAGE_INDEX 95
  82. /* Doorbell related. */
  83. #define ERDMA_DB_SIZE 8
  84. #define ERDMA_CQDB_IDX_MASK GENMASK_ULL(63, 56)
  85. #define ERDMA_CQDB_CQN_MASK GENMASK_ULL(55, 32)
  86. #define ERDMA_CQDB_ARM_MASK BIT_ULL(31)
  87. #define ERDMA_CQDB_SOL_MASK BIT_ULL(30)
  88. #define ERDMA_CQDB_CMDSN_MASK GENMASK_ULL(29, 28)
  89. #define ERDMA_CQDB_CI_MASK GENMASK_ULL(23, 0)
  90. #define ERDMA_EQDB_ARM_MASK BIT(31)
  91. #define ERDMA_EQDB_CI_MASK GENMASK_ULL(23, 0)
  92. #define ERDMA_PAGE_SIZE_SUPPORT 0x7FFFF000
  93. /* Hardware page size definition */
  94. #define ERDMA_HW_PAGE_SHIFT 12
  95. #define ERDMA_HW_PAGE_SIZE 4096
  96. /* WQE related. */
  97. #define EQE_SIZE 16
  98. #define EQE_SHIFT 4
  99. #define RQE_SIZE 32
  100. #define RQE_SHIFT 5
  101. #define CQE_SIZE 32
  102. #define CQE_SHIFT 5
  103. #define SQEBB_SIZE 32
  104. #define SQEBB_SHIFT 5
  105. #define SQEBB_MASK (~(SQEBB_SIZE - 1))
  106. #define SQEBB_ALIGN(size) ((size + SQEBB_SIZE - 1) & SQEBB_MASK)
  107. #define SQEBB_COUNT(size) (SQEBB_ALIGN(size) >> SQEBB_SHIFT)
  108. #define ERDMA_MAX_SQE_SIZE 128
  109. #define ERDMA_MAX_WQEBB_PER_SQE 4
  110. /* CMDQ related. */
  111. #define ERDMA_CMDQ_MAX_OUTSTANDING 128
  112. #define ERDMA_CMDQ_SQE_SIZE 64
  113. /* cmdq sub module definition. */
  114. enum CMDQ_WQE_SUB_MOD {
  115. CMDQ_SUBMOD_RDMA = 0,
  116. CMDQ_SUBMOD_COMMON = 1
  117. };
  118. enum CMDQ_RDMA_OPCODE {
  119. CMDQ_OPCODE_QUERY_DEVICE = 0,
  120. CMDQ_OPCODE_CREATE_QP = 1,
  121. CMDQ_OPCODE_DESTROY_QP = 2,
  122. CMDQ_OPCODE_MODIFY_QP = 3,
  123. CMDQ_OPCODE_CREATE_CQ = 4,
  124. CMDQ_OPCODE_DESTROY_CQ = 5,
  125. CMDQ_OPCODE_REG_MR = 8,
  126. CMDQ_OPCODE_DEREG_MR = 9
  127. };
  128. enum CMDQ_COMMON_OPCODE {
  129. CMDQ_OPCODE_CREATE_EQ = 0,
  130. CMDQ_OPCODE_DESTROY_EQ = 1,
  131. CMDQ_OPCODE_QUERY_FW_INFO = 2,
  132. CMDQ_OPCODE_CONF_MTU = 3,
  133. };
  134. /* cmdq-SQE HDR */
  135. #define ERDMA_CMD_HDR_WQEBB_CNT_MASK GENMASK_ULL(54, 52)
  136. #define ERDMA_CMD_HDR_CONTEXT_COOKIE_MASK GENMASK_ULL(47, 32)
  137. #define ERDMA_CMD_HDR_SUB_MOD_MASK GENMASK_ULL(25, 24)
  138. #define ERDMA_CMD_HDR_OPCODE_MASK GENMASK_ULL(23, 16)
  139. #define ERDMA_CMD_HDR_WQEBB_INDEX_MASK GENMASK_ULL(15, 0)
  140. struct erdma_cmdq_destroy_cq_req {
  141. u64 hdr;
  142. u32 cqn;
  143. };
  144. #define ERDMA_EQ_TYPE_AEQ 0
  145. #define ERDMA_EQ_TYPE_CEQ 1
  146. struct erdma_cmdq_create_eq_req {
  147. u64 hdr;
  148. u64 qbuf_addr;
  149. u8 vector_idx;
  150. u8 eqn;
  151. u8 depth;
  152. u8 qtype;
  153. u32 db_dma_addr_l;
  154. u32 db_dma_addr_h;
  155. };
  156. struct erdma_cmdq_destroy_eq_req {
  157. u64 hdr;
  158. u64 rsvd0;
  159. u8 vector_idx;
  160. u8 eqn;
  161. u8 rsvd1;
  162. u8 qtype;
  163. };
  164. struct erdma_cmdq_config_mtu_req {
  165. u64 hdr;
  166. u32 mtu;
  167. };
  168. /* create_cq cfg0 */
  169. #define ERDMA_CMD_CREATE_CQ_DEPTH_MASK GENMASK(31, 24)
  170. #define ERDMA_CMD_CREATE_CQ_PAGESIZE_MASK GENMASK(23, 20)
  171. #define ERDMA_CMD_CREATE_CQ_CQN_MASK GENMASK(19, 0)
  172. /* create_cq cfg1 */
  173. #define ERDMA_CMD_CREATE_CQ_MTT_CNT_MASK GENMASK(31, 16)
  174. #define ERDMA_CMD_CREATE_CQ_MTT_TYPE_MASK BIT(15)
  175. #define ERDMA_CMD_CREATE_CQ_EQN_MASK GENMASK(9, 0)
  176. struct erdma_cmdq_create_cq_req {
  177. u64 hdr;
  178. u32 cfg0;
  179. u32 qbuf_addr_l;
  180. u32 qbuf_addr_h;
  181. u32 cfg1;
  182. u64 cq_db_info_addr;
  183. u32 first_page_offset;
  184. };
  185. /* regmr/deregmr cfg0 */
  186. #define ERDMA_CMD_MR_VALID_MASK BIT(31)
  187. #define ERDMA_CMD_MR_KEY_MASK GENMASK(27, 20)
  188. #define ERDMA_CMD_MR_MPT_IDX_MASK GENMASK(19, 0)
  189. /* regmr cfg1 */
  190. #define ERDMA_CMD_REGMR_PD_MASK GENMASK(31, 12)
  191. #define ERDMA_CMD_REGMR_TYPE_MASK GENMASK(7, 6)
  192. #define ERDMA_CMD_REGMR_RIGHT_MASK GENMASK(5, 2)
  193. #define ERDMA_CMD_REGMR_ACC_MODE_MASK GENMASK(1, 0)
  194. /* regmr cfg2 */
  195. #define ERDMA_CMD_REGMR_PAGESIZE_MASK GENMASK(31, 27)
  196. #define ERDMA_CMD_REGMR_MTT_TYPE_MASK GENMASK(21, 20)
  197. #define ERDMA_CMD_REGMR_MTT_CNT_MASK GENMASK(19, 0)
  198. struct erdma_cmdq_reg_mr_req {
  199. u64 hdr;
  200. u32 cfg0;
  201. u32 cfg1;
  202. u64 start_va;
  203. u32 size;
  204. u32 cfg2;
  205. u64 phy_addr[4];
  206. };
  207. struct erdma_cmdq_dereg_mr_req {
  208. u64 hdr;
  209. u32 cfg;
  210. };
  211. /* modify qp cfg */
  212. #define ERDMA_CMD_MODIFY_QP_STATE_MASK GENMASK(31, 24)
  213. #define ERDMA_CMD_MODIFY_QP_CC_MASK GENMASK(23, 20)
  214. #define ERDMA_CMD_MODIFY_QP_QPN_MASK GENMASK(19, 0)
  215. struct erdma_cmdq_modify_qp_req {
  216. u64 hdr;
  217. u32 cfg;
  218. u32 cookie;
  219. __be32 dip;
  220. __be32 sip;
  221. __be16 sport;
  222. __be16 dport;
  223. u32 send_nxt;
  224. u32 recv_nxt;
  225. };
  226. /* create qp cfg0 */
  227. #define ERDMA_CMD_CREATE_QP_SQ_DEPTH_MASK GENMASK(31, 20)
  228. #define ERDMA_CMD_CREATE_QP_QPN_MASK GENMASK(19, 0)
  229. /* create qp cfg1 */
  230. #define ERDMA_CMD_CREATE_QP_RQ_DEPTH_MASK GENMASK(31, 20)
  231. #define ERDMA_CMD_CREATE_QP_PD_MASK GENMASK(19, 0)
  232. /* create qp cqn_mtt_cfg */
  233. #define ERDMA_CMD_CREATE_QP_PAGE_SIZE_MASK GENMASK(31, 28)
  234. #define ERDMA_CMD_CREATE_QP_CQN_MASK GENMASK(23, 0)
  235. /* create qp mtt_cfg */
  236. #define ERDMA_CMD_CREATE_QP_PAGE_OFFSET_MASK GENMASK(31, 12)
  237. #define ERDMA_CMD_CREATE_QP_MTT_CNT_MASK GENMASK(11, 1)
  238. #define ERDMA_CMD_CREATE_QP_MTT_TYPE_MASK BIT(0)
  239. #define ERDMA_CMDQ_CREATE_QP_RESP_COOKIE_MASK GENMASK_ULL(31, 0)
  240. struct erdma_cmdq_create_qp_req {
  241. u64 hdr;
  242. u32 cfg0;
  243. u32 cfg1;
  244. u32 sq_cqn_mtt_cfg;
  245. u32 rq_cqn_mtt_cfg;
  246. u64 sq_buf_addr;
  247. u64 rq_buf_addr;
  248. u32 sq_mtt_cfg;
  249. u32 rq_mtt_cfg;
  250. u64 sq_db_info_dma_addr;
  251. u64 rq_db_info_dma_addr;
  252. };
  253. struct erdma_cmdq_destroy_qp_req {
  254. u64 hdr;
  255. u32 qpn;
  256. };
  257. /* cap qword 0 definition */
  258. #define ERDMA_CMD_DEV_CAP_MAX_CQE_MASK GENMASK_ULL(47, 40)
  259. #define ERDMA_CMD_DEV_CAP_MAX_RECV_WR_MASK GENMASK_ULL(23, 16)
  260. #define ERDMA_CMD_DEV_CAP_MAX_MR_SIZE_MASK GENMASK_ULL(7, 0)
  261. /* cap qword 1 definition */
  262. #define ERDMA_CMD_DEV_CAP_DMA_LOCAL_KEY_MASK GENMASK_ULL(63, 32)
  263. #define ERDMA_CMD_DEV_CAP_DEFAULT_CC_MASK GENMASK_ULL(31, 28)
  264. #define ERDMA_CMD_DEV_CAP_QBLOCK_MASK GENMASK_ULL(27, 16)
  265. #define ERDMA_CMD_DEV_CAP_MAX_MW_MASK GENMASK_ULL(7, 0)
  266. #define ERDMA_NQP_PER_QBLOCK 1024
  267. #define ERDMA_CMD_INFO0_FW_VER_MASK GENMASK_ULL(31, 0)
  268. /* CQE hdr */
  269. #define ERDMA_CQE_HDR_OWNER_MASK BIT(31)
  270. #define ERDMA_CQE_HDR_OPCODE_MASK GENMASK(23, 16)
  271. #define ERDMA_CQE_HDR_QTYPE_MASK GENMASK(15, 8)
  272. #define ERDMA_CQE_HDR_SYNDROME_MASK GENMASK(7, 0)
  273. #define ERDMA_CQE_QTYPE_SQ 0
  274. #define ERDMA_CQE_QTYPE_RQ 1
  275. #define ERDMA_CQE_QTYPE_CMDQ 2
  276. struct erdma_cqe {
  277. __be32 hdr;
  278. __be32 qe_idx;
  279. __be32 qpn;
  280. union {
  281. __le32 imm_data;
  282. __be32 inv_rkey;
  283. };
  284. __be32 size;
  285. __be32 rsvd[3];
  286. };
  287. struct erdma_sge {
  288. __aligned_le64 laddr;
  289. __le32 length;
  290. __le32 lkey;
  291. };
  292. /* Receive Queue Element */
  293. struct erdma_rqe {
  294. __le16 qe_idx;
  295. __le16 rsvd0;
  296. __le32 qpn;
  297. __le32 rsvd1;
  298. __le32 rsvd2;
  299. __le64 to;
  300. __le32 length;
  301. __le32 stag;
  302. };
  303. /* SQE */
  304. #define ERDMA_SQE_HDR_SGL_LEN_MASK GENMASK_ULL(63, 56)
  305. #define ERDMA_SQE_HDR_WQEBB_CNT_MASK GENMASK_ULL(54, 52)
  306. #define ERDMA_SQE_HDR_QPN_MASK GENMASK_ULL(51, 32)
  307. #define ERDMA_SQE_HDR_OPCODE_MASK GENMASK_ULL(31, 27)
  308. #define ERDMA_SQE_HDR_DWQE_MASK BIT_ULL(26)
  309. #define ERDMA_SQE_HDR_INLINE_MASK BIT_ULL(25)
  310. #define ERDMA_SQE_HDR_FENCE_MASK BIT_ULL(24)
  311. #define ERDMA_SQE_HDR_SE_MASK BIT_ULL(23)
  312. #define ERDMA_SQE_HDR_CE_MASK BIT_ULL(22)
  313. #define ERDMA_SQE_HDR_WQEBB_INDEX_MASK GENMASK_ULL(15, 0)
  314. /* REG MR attrs */
  315. #define ERDMA_SQE_MR_MODE_MASK GENMASK(1, 0)
  316. #define ERDMA_SQE_MR_ACCESS_MASK GENMASK(5, 2)
  317. #define ERDMA_SQE_MR_MTT_TYPE_MASK GENMASK(7, 6)
  318. #define ERDMA_SQE_MR_MTT_CNT_MASK GENMASK(31, 12)
  319. struct erdma_write_sqe {
  320. __le64 hdr;
  321. __be32 imm_data;
  322. __le32 length;
  323. __le32 sink_stag;
  324. __le32 sink_to_l;
  325. __le32 sink_to_h;
  326. __le32 rsvd;
  327. struct erdma_sge sgl[0];
  328. };
  329. struct erdma_send_sqe {
  330. __le64 hdr;
  331. union {
  332. __be32 imm_data;
  333. __le32 invalid_stag;
  334. };
  335. __le32 length;
  336. struct erdma_sge sgl[0];
  337. };
  338. struct erdma_readreq_sqe {
  339. __le64 hdr;
  340. __le32 invalid_stag;
  341. __le32 length;
  342. __le32 sink_stag;
  343. __le32 sink_to_l;
  344. __le32 sink_to_h;
  345. __le32 rsvd;
  346. };
  347. struct erdma_reg_mr_sqe {
  348. __le64 hdr;
  349. __le64 addr;
  350. __le32 length;
  351. __le32 stag;
  352. __le32 attrs;
  353. __le32 rsvd;
  354. };
  355. /* EQ related. */
  356. #define ERDMA_DEFAULT_EQ_DEPTH 4096
  357. /* ceqe */
  358. #define ERDMA_CEQE_HDR_DB_MASK BIT_ULL(63)
  359. #define ERDMA_CEQE_HDR_PI_MASK GENMASK_ULL(55, 32)
  360. #define ERDMA_CEQE_HDR_O_MASK BIT_ULL(31)
  361. #define ERDMA_CEQE_HDR_CQN_MASK GENMASK_ULL(19, 0)
  362. /* aeqe */
  363. #define ERDMA_AEQE_HDR_O_MASK BIT(31)
  364. #define ERDMA_AEQE_HDR_TYPE_MASK GENMASK(23, 16)
  365. #define ERDMA_AEQE_HDR_SUBTYPE_MASK GENMASK(7, 0)
  366. #define ERDMA_AE_TYPE_QP_FATAL_EVENT 0
  367. #define ERDMA_AE_TYPE_QP_ERQ_ERR_EVENT 1
  368. #define ERDMA_AE_TYPE_ACC_ERR_EVENT 2
  369. #define ERDMA_AE_TYPE_CQ_ERR 3
  370. #define ERDMA_AE_TYPE_OTHER_ERROR 4
  371. struct erdma_aeqe {
  372. __le32 hdr;
  373. __le32 event_data0;
  374. __le32 event_data1;
  375. __le32 rsvd;
  376. };
  377. enum erdma_opcode {
  378. ERDMA_OP_WRITE = 0,
  379. ERDMA_OP_READ = 1,
  380. ERDMA_OP_SEND = 2,
  381. ERDMA_OP_SEND_WITH_IMM = 3,
  382. ERDMA_OP_RECEIVE = 4,
  383. ERDMA_OP_RECV_IMM = 5,
  384. ERDMA_OP_RECV_INV = 6,
  385. ERDMA_OP_RSVD0 = 7,
  386. ERDMA_OP_RSVD1 = 8,
  387. ERDMA_OP_WRITE_WITH_IMM = 9,
  388. ERDMA_OP_RSVD2 = 10,
  389. ERDMA_OP_RSVD3 = 11,
  390. ERDMA_OP_RSP_SEND_IMM = 12,
  391. ERDMA_OP_SEND_WITH_INV = 13,
  392. ERDMA_OP_REG_MR = 14,
  393. ERDMA_OP_LOCAL_INV = 15,
  394. ERDMA_OP_READ_WITH_INV = 16,
  395. ERDMA_NUM_OPCODES = 17,
  396. ERDMA_OP_INVALID = ERDMA_NUM_OPCODES + 1
  397. };
  398. enum erdma_wc_status {
  399. ERDMA_WC_SUCCESS = 0,
  400. ERDMA_WC_GENERAL_ERR = 1,
  401. ERDMA_WC_RECV_WQE_FORMAT_ERR = 2,
  402. ERDMA_WC_RECV_STAG_INVALID_ERR = 3,
  403. ERDMA_WC_RECV_ADDR_VIOLATION_ERR = 4,
  404. ERDMA_WC_RECV_RIGHT_VIOLATION_ERR = 5,
  405. ERDMA_WC_RECV_PDID_ERR = 6,
  406. ERDMA_WC_RECV_WARRPING_ERR = 7,
  407. ERDMA_WC_SEND_WQE_FORMAT_ERR = 8,
  408. ERDMA_WC_SEND_WQE_ORD_EXCEED = 9,
  409. ERDMA_WC_SEND_STAG_INVALID_ERR = 10,
  410. ERDMA_WC_SEND_ADDR_VIOLATION_ERR = 11,
  411. ERDMA_WC_SEND_RIGHT_VIOLATION_ERR = 12,
  412. ERDMA_WC_SEND_PDID_ERR = 13,
  413. ERDMA_WC_SEND_WARRPING_ERR = 14,
  414. ERDMA_WC_FLUSH_ERR = 15,
  415. ERDMA_WC_RETRY_EXC_ERR = 16,
  416. ERDMA_NUM_WC_STATUS
  417. };
  418. enum erdma_vendor_err {
  419. ERDMA_WC_VENDOR_NO_ERR = 0,
  420. ERDMA_WC_VENDOR_INVALID_RQE = 1,
  421. ERDMA_WC_VENDOR_RQE_INVALID_STAG = 2,
  422. ERDMA_WC_VENDOR_RQE_ADDR_VIOLATION = 3,
  423. ERDMA_WC_VENDOR_RQE_ACCESS_RIGHT_ERR = 4,
  424. ERDMA_WC_VENDOR_RQE_INVALID_PD = 5,
  425. ERDMA_WC_VENDOR_RQE_WRAP_ERR = 6,
  426. ERDMA_WC_VENDOR_INVALID_SQE = 0x20,
  427. ERDMA_WC_VENDOR_ZERO_ORD = 0x21,
  428. ERDMA_WC_VENDOR_SQE_INVALID_STAG = 0x30,
  429. ERDMA_WC_VENDOR_SQE_ADDR_VIOLATION = 0x31,
  430. ERDMA_WC_VENDOR_SQE_ACCESS_ERR = 0x32,
  431. ERDMA_WC_VENDOR_SQE_INVALID_PD = 0x33,
  432. ERDMA_WC_VENDOR_SQE_WARP_ERR = 0x34
  433. };
  434. #endif