qedr_hsi_rdma.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769
  1. /* QLogic qedr NIC Driver
  2. * Copyright (c) 2015-2016 QLogic Corporation
  3. *
  4. * This software is available to you under a choice of one of two
  5. * licenses. You may choose to be licensed under the terms of the GNU
  6. * General Public License (GPL) Version 2, available from the file
  7. * COPYING in the main directory of this source tree, or the
  8. * OpenIB.org BSD license below:
  9. *
  10. * Redistribution and use in source and binary forms, with or
  11. * without modification, are permitted provided that the following
  12. * conditions are met:
  13. *
  14. * - Redistributions of source code must retain the above
  15. * copyright notice, this list of conditions and the following
  16. * disclaimer.
  17. *
  18. * - Redistributions in binary form must reproduce the above
  19. * copyright notice, this list of conditions and the following
  20. * disclaimer in the documentation and /or other materials
  21. * provided with the distribution.
  22. *
  23. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  27. * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  28. * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  29. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  30. * SOFTWARE.
  31. */
  32. #ifndef __QED_HSI_RDMA__
  33. #define __QED_HSI_RDMA__
  34. #include <linux/qed/rdma_common.h>
  35. /* rdma completion notification queue element */
  36. struct rdma_cnqe {
  37. struct regpair cq_handle;
  38. };
  39. struct rdma_cqe_responder {
  40. struct regpair srq_wr_id;
  41. struct regpair qp_handle;
  42. __le32 imm_data_or_inv_r_Key;
  43. __le32 length;
  44. __le32 imm_data_hi;
  45. __le16 rq_cons_or_srq_id;
  46. u8 flags;
  47. #define RDMA_CQE_RESPONDER_TOGGLE_BIT_MASK 0x1
  48. #define RDMA_CQE_RESPONDER_TOGGLE_BIT_SHIFT 0
  49. #define RDMA_CQE_RESPONDER_TYPE_MASK 0x3
  50. #define RDMA_CQE_RESPONDER_TYPE_SHIFT 1
  51. #define RDMA_CQE_RESPONDER_INV_FLG_MASK 0x1
  52. #define RDMA_CQE_RESPONDER_INV_FLG_SHIFT 3
  53. #define RDMA_CQE_RESPONDER_IMM_FLG_MASK 0x1
  54. #define RDMA_CQE_RESPONDER_IMM_FLG_SHIFT 4
  55. #define RDMA_CQE_RESPONDER_RDMA_FLG_MASK 0x1
  56. #define RDMA_CQE_RESPONDER_RDMA_FLG_SHIFT 5
  57. #define RDMA_CQE_RESPONDER_RESERVED2_MASK 0x3
  58. #define RDMA_CQE_RESPONDER_RESERVED2_SHIFT 6
  59. u8 status;
  60. };
  61. struct rdma_cqe_requester {
  62. __le16 sq_cons;
  63. __le16 reserved0;
  64. __le32 reserved1;
  65. struct regpair qp_handle;
  66. struct regpair reserved2;
  67. __le32 reserved3;
  68. __le16 reserved4;
  69. u8 flags;
  70. #define RDMA_CQE_REQUESTER_TOGGLE_BIT_MASK 0x1
  71. #define RDMA_CQE_REQUESTER_TOGGLE_BIT_SHIFT 0
  72. #define RDMA_CQE_REQUESTER_TYPE_MASK 0x3
  73. #define RDMA_CQE_REQUESTER_TYPE_SHIFT 1
  74. #define RDMA_CQE_REQUESTER_RESERVED5_MASK 0x1F
  75. #define RDMA_CQE_REQUESTER_RESERVED5_SHIFT 3
  76. u8 status;
  77. };
  78. struct rdma_cqe_common {
  79. struct regpair reserved0;
  80. struct regpair qp_handle;
  81. __le16 reserved1[7];
  82. u8 flags;
  83. #define RDMA_CQE_COMMON_TOGGLE_BIT_MASK 0x1
  84. #define RDMA_CQE_COMMON_TOGGLE_BIT_SHIFT 0
  85. #define RDMA_CQE_COMMON_TYPE_MASK 0x3
  86. #define RDMA_CQE_COMMON_TYPE_SHIFT 1
  87. #define RDMA_CQE_COMMON_RESERVED2_MASK 0x1F
  88. #define RDMA_CQE_COMMON_RESERVED2_SHIFT 3
  89. u8 status;
  90. };
  91. /* rdma completion queue element */
  92. union rdma_cqe {
  93. struct rdma_cqe_responder resp;
  94. struct rdma_cqe_requester req;
  95. struct rdma_cqe_common cmn;
  96. };
  97. /* * CQE requester status enumeration */
  98. enum rdma_cqe_requester_status_enum {
  99. RDMA_CQE_REQ_STS_OK,
  100. RDMA_CQE_REQ_STS_BAD_RESPONSE_ERR,
  101. RDMA_CQE_REQ_STS_LOCAL_LENGTH_ERR,
  102. RDMA_CQE_REQ_STS_LOCAL_QP_OPERATION_ERR,
  103. RDMA_CQE_REQ_STS_LOCAL_PROTECTION_ERR,
  104. RDMA_CQE_REQ_STS_MEMORY_MGT_OPERATION_ERR,
  105. RDMA_CQE_REQ_STS_REMOTE_INVALID_REQUEST_ERR,
  106. RDMA_CQE_REQ_STS_REMOTE_ACCESS_ERR,
  107. RDMA_CQE_REQ_STS_REMOTE_OPERATION_ERR,
  108. RDMA_CQE_REQ_STS_RNR_NAK_RETRY_CNT_ERR,
  109. RDMA_CQE_REQ_STS_TRANSPORT_RETRY_CNT_ERR,
  110. RDMA_CQE_REQ_STS_WORK_REQUEST_FLUSHED_ERR,
  111. RDMA_CQE_REQ_STS_XRC_VOILATION_ERR,
  112. MAX_RDMA_CQE_REQUESTER_STATUS_ENUM
  113. };
  114. /* CQE responder status enumeration */
  115. enum rdma_cqe_responder_status_enum {
  116. RDMA_CQE_RESP_STS_OK,
  117. RDMA_CQE_RESP_STS_LOCAL_ACCESS_ERR,
  118. RDMA_CQE_RESP_STS_LOCAL_LENGTH_ERR,
  119. RDMA_CQE_RESP_STS_LOCAL_QP_OPERATION_ERR,
  120. RDMA_CQE_RESP_STS_LOCAL_PROTECTION_ERR,
  121. RDMA_CQE_RESP_STS_MEMORY_MGT_OPERATION_ERR,
  122. RDMA_CQE_RESP_STS_REMOTE_INVALID_REQUEST_ERR,
  123. RDMA_CQE_RESP_STS_WORK_REQUEST_FLUSHED_ERR,
  124. MAX_RDMA_CQE_RESPONDER_STATUS_ENUM
  125. };
  126. /* CQE type enumeration */
  127. enum rdma_cqe_type {
  128. RDMA_CQE_TYPE_REQUESTER,
  129. RDMA_CQE_TYPE_RESPONDER_RQ,
  130. RDMA_CQE_TYPE_RESPONDER_SRQ,
  131. RDMA_CQE_TYPE_RESPONDER_XRC_SRQ,
  132. RDMA_CQE_TYPE_INVALID,
  133. MAX_RDMA_CQE_TYPE
  134. };
  135. struct rdma_sq_sge {
  136. __le32 length;
  137. struct regpair addr;
  138. __le32 l_key;
  139. };
  140. struct rdma_rq_sge {
  141. struct regpair addr;
  142. __le32 length;
  143. __le32 flags;
  144. #define RDMA_RQ_SGE_L_KEY_MASK 0x3FFFFFF
  145. #define RDMA_RQ_SGE_L_KEY_SHIFT 0
  146. #define RDMA_RQ_SGE_NUM_SGES_MASK 0x7
  147. #define RDMA_RQ_SGE_NUM_SGES_SHIFT 26
  148. #define RDMA_RQ_SGE_RESERVED0_MASK 0x7
  149. #define RDMA_RQ_SGE_RESERVED0_SHIFT 29
  150. };
  151. struct rdma_srq_sge {
  152. struct regpair addr;
  153. __le32 length;
  154. __le32 l_key;
  155. };
  156. /* Rdma doorbell data for flags update */
  157. struct rdma_pwm_flags_data {
  158. __le16 icid; /* internal CID */
  159. u8 agg_flags; /* aggregative flags */
  160. u8 reserved;
  161. };
  162. /* Rdma doorbell data for SQ and RQ */
  163. struct rdma_pwm_val16_data {
  164. __le16 icid;
  165. __le16 value;
  166. };
  167. union rdma_pwm_val16_data_union {
  168. struct rdma_pwm_val16_data as_struct;
  169. __le32 as_dword;
  170. };
  171. /* Rdma doorbell data for CQ */
  172. struct rdma_pwm_val32_data {
  173. __le16 icid;
  174. u8 agg_flags;
  175. u8 params;
  176. #define RDMA_PWM_VAL32_DATA_AGG_CMD_MASK 0x3
  177. #define RDMA_PWM_VAL32_DATA_AGG_CMD_SHIFT 0
  178. #define RDMA_PWM_VAL32_DATA_BYPASS_EN_MASK 0x1
  179. #define RDMA_PWM_VAL32_DATA_BYPASS_EN_SHIFT 2
  180. #define RDMA_PWM_VAL32_DATA_CONN_TYPE_IS_IWARP_MASK 0x1
  181. #define RDMA_PWM_VAL32_DATA_CONN_TYPE_IS_IWARP_SHIFT 3
  182. #define RDMA_PWM_VAL32_DATA_SET_16B_VAL_MASK 0x1
  183. #define RDMA_PWM_VAL32_DATA_SET_16B_VAL_SHIFT 4
  184. #define RDMA_PWM_VAL32_DATA_RESERVED_MASK 0x7
  185. #define RDMA_PWM_VAL32_DATA_RESERVED_SHIFT 5
  186. __le32 value;
  187. };
  188. /* DIF Block size options */
  189. enum rdma_dif_block_size {
  190. RDMA_DIF_BLOCK_512 = 0,
  191. RDMA_DIF_BLOCK_4096 = 1,
  192. MAX_RDMA_DIF_BLOCK_SIZE
  193. };
  194. /* DIF CRC initial value */
  195. enum rdma_dif_crc_seed {
  196. RDMA_DIF_CRC_SEED_0000 = 0,
  197. RDMA_DIF_CRC_SEED_FFFF = 1,
  198. MAX_RDMA_DIF_CRC_SEED
  199. };
  200. /* RDMA DIF Error Result Structure */
  201. struct rdma_dif_error_result {
  202. __le32 error_intervals;
  203. __le32 dif_error_1st_interval;
  204. u8 flags;
  205. #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_CRC_MASK 0x1
  206. #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_CRC_SHIFT 0
  207. #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_APP_TAG_MASK 0x1
  208. #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_APP_TAG_SHIFT 1
  209. #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_REF_TAG_MASK 0x1
  210. #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_REF_TAG_SHIFT 2
  211. #define RDMA_DIF_ERROR_RESULT_RESERVED0_MASK 0xF
  212. #define RDMA_DIF_ERROR_RESULT_RESERVED0_SHIFT 3
  213. #define RDMA_DIF_ERROR_RESULT_TOGGLE_BIT_MASK 0x1
  214. #define RDMA_DIF_ERROR_RESULT_TOGGLE_BIT_SHIFT 7
  215. u8 reserved1[55];
  216. };
  217. /* DIF IO direction */
  218. enum rdma_dif_io_direction_flg {
  219. RDMA_DIF_DIR_RX = 0,
  220. RDMA_DIF_DIR_TX = 1,
  221. MAX_RDMA_DIF_IO_DIRECTION_FLG
  222. };
  223. /* RDMA DIF Runt Result Structure */
  224. struct rdma_dif_runt_result {
  225. __le16 guard_tag;
  226. __le16 reserved[3];
  227. };
  228. /* Memory window type enumeration */
  229. enum rdma_mw_type {
  230. RDMA_MW_TYPE_1,
  231. RDMA_MW_TYPE_2A,
  232. MAX_RDMA_MW_TYPE
  233. };
  234. struct rdma_sq_atomic_wqe {
  235. __le32 reserved1;
  236. __le32 length;
  237. __le32 xrc_srq;
  238. u8 req_type;
  239. u8 flags;
  240. #define RDMA_SQ_ATOMIC_WQE_COMP_FLG_MASK 0x1
  241. #define RDMA_SQ_ATOMIC_WQE_COMP_FLG_SHIFT 0
  242. #define RDMA_SQ_ATOMIC_WQE_RD_FENCE_FLG_MASK 0x1
  243. #define RDMA_SQ_ATOMIC_WQE_RD_FENCE_FLG_SHIFT 1
  244. #define RDMA_SQ_ATOMIC_WQE_INV_FENCE_FLG_MASK 0x1
  245. #define RDMA_SQ_ATOMIC_WQE_INV_FENCE_FLG_SHIFT 2
  246. #define RDMA_SQ_ATOMIC_WQE_SE_FLG_MASK 0x1
  247. #define RDMA_SQ_ATOMIC_WQE_SE_FLG_SHIFT 3
  248. #define RDMA_SQ_ATOMIC_WQE_INLINE_FLG_MASK 0x1
  249. #define RDMA_SQ_ATOMIC_WQE_INLINE_FLG_SHIFT 4
  250. #define RDMA_SQ_ATOMIC_WQE_DIF_ON_HOST_FLG_MASK 0x1
  251. #define RDMA_SQ_ATOMIC_WQE_DIF_ON_HOST_FLG_SHIFT 5
  252. #define RDMA_SQ_ATOMIC_WQE_RESERVED0_MASK 0x3
  253. #define RDMA_SQ_ATOMIC_WQE_RESERVED0_SHIFT 6
  254. u8 wqe_size;
  255. u8 prev_wqe_size;
  256. struct regpair remote_va;
  257. __le32 r_key;
  258. __le32 reserved2;
  259. struct regpair cmp_data;
  260. struct regpair swap_data;
  261. };
  262. /* First element (16 bytes) of atomic wqe */
  263. struct rdma_sq_atomic_wqe_1st {
  264. __le32 reserved1;
  265. __le32 length;
  266. __le32 xrc_srq;
  267. u8 req_type;
  268. u8 flags;
  269. #define RDMA_SQ_ATOMIC_WQE_1ST_COMP_FLG_MASK 0x1
  270. #define RDMA_SQ_ATOMIC_WQE_1ST_COMP_FLG_SHIFT 0
  271. #define RDMA_SQ_ATOMIC_WQE_1ST_RD_FENCE_FLG_MASK 0x1
  272. #define RDMA_SQ_ATOMIC_WQE_1ST_RD_FENCE_FLG_SHIFT 1
  273. #define RDMA_SQ_ATOMIC_WQE_1ST_INV_FENCE_FLG_MASK 0x1
  274. #define RDMA_SQ_ATOMIC_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  275. #define RDMA_SQ_ATOMIC_WQE_1ST_SE_FLG_MASK 0x1
  276. #define RDMA_SQ_ATOMIC_WQE_1ST_SE_FLG_SHIFT 3
  277. #define RDMA_SQ_ATOMIC_WQE_1ST_INLINE_FLG_MASK 0x1
  278. #define RDMA_SQ_ATOMIC_WQE_1ST_INLINE_FLG_SHIFT 4
  279. #define RDMA_SQ_ATOMIC_WQE_1ST_RESERVED0_MASK 0x7
  280. #define RDMA_SQ_ATOMIC_WQE_1ST_RESERVED0_SHIFT 5
  281. u8 wqe_size;
  282. u8 prev_wqe_size;
  283. };
  284. /* Second element (16 bytes) of atomic wqe */
  285. struct rdma_sq_atomic_wqe_2nd {
  286. struct regpair remote_va;
  287. __le32 r_key;
  288. __le32 reserved2;
  289. };
  290. /* Third element (16 bytes) of atomic wqe */
  291. struct rdma_sq_atomic_wqe_3rd {
  292. struct regpair cmp_data;
  293. struct regpair swap_data;
  294. };
  295. struct rdma_sq_bind_wqe {
  296. struct regpair addr;
  297. __le32 l_key;
  298. u8 req_type;
  299. u8 flags;
  300. #define RDMA_SQ_BIND_WQE_COMP_FLG_MASK 0x1
  301. #define RDMA_SQ_BIND_WQE_COMP_FLG_SHIFT 0
  302. #define RDMA_SQ_BIND_WQE_RD_FENCE_FLG_MASK 0x1
  303. #define RDMA_SQ_BIND_WQE_RD_FENCE_FLG_SHIFT 1
  304. #define RDMA_SQ_BIND_WQE_INV_FENCE_FLG_MASK 0x1
  305. #define RDMA_SQ_BIND_WQE_INV_FENCE_FLG_SHIFT 2
  306. #define RDMA_SQ_BIND_WQE_SE_FLG_MASK 0x1
  307. #define RDMA_SQ_BIND_WQE_SE_FLG_SHIFT 3
  308. #define RDMA_SQ_BIND_WQE_INLINE_FLG_MASK 0x1
  309. #define RDMA_SQ_BIND_WQE_INLINE_FLG_SHIFT 4
  310. #define RDMA_SQ_BIND_WQE_RESERVED0_MASK 0x7
  311. #define RDMA_SQ_BIND_WQE_RESERVED0_SHIFT 5
  312. u8 wqe_size;
  313. u8 prev_wqe_size;
  314. u8 bind_ctrl;
  315. #define RDMA_SQ_BIND_WQE_ZERO_BASED_MASK 0x1
  316. #define RDMA_SQ_BIND_WQE_ZERO_BASED_SHIFT 0
  317. #define RDMA_SQ_BIND_WQE_MW_TYPE_MASK 0x1
  318. #define RDMA_SQ_BIND_WQE_MW_TYPE_SHIFT 1
  319. #define RDMA_SQ_BIND_WQE_RESERVED1_MASK 0x3F
  320. #define RDMA_SQ_BIND_WQE_RESERVED1_SHIFT 2
  321. u8 access_ctrl;
  322. #define RDMA_SQ_BIND_WQE_REMOTE_READ_MASK 0x1
  323. #define RDMA_SQ_BIND_WQE_REMOTE_READ_SHIFT 0
  324. #define RDMA_SQ_BIND_WQE_REMOTE_WRITE_MASK 0x1
  325. #define RDMA_SQ_BIND_WQE_REMOTE_WRITE_SHIFT 1
  326. #define RDMA_SQ_BIND_WQE_ENABLE_ATOMIC_MASK 0x1
  327. #define RDMA_SQ_BIND_WQE_ENABLE_ATOMIC_SHIFT 2
  328. #define RDMA_SQ_BIND_WQE_LOCAL_READ_MASK 0x1
  329. #define RDMA_SQ_BIND_WQE_LOCAL_READ_SHIFT 3
  330. #define RDMA_SQ_BIND_WQE_LOCAL_WRITE_MASK 0x1
  331. #define RDMA_SQ_BIND_WQE_LOCAL_WRITE_SHIFT 4
  332. #define RDMA_SQ_BIND_WQE_RESERVED2_MASK 0x7
  333. #define RDMA_SQ_BIND_WQE_RESERVED2_SHIFT 5
  334. u8 reserved3;
  335. u8 length_hi;
  336. __le32 length_lo;
  337. __le32 parent_l_key;
  338. __le32 reserved4;
  339. };
  340. /* First element (16 bytes) of bind wqe */
  341. struct rdma_sq_bind_wqe_1st {
  342. struct regpair addr;
  343. __le32 l_key;
  344. u8 req_type;
  345. u8 flags;
  346. #define RDMA_SQ_BIND_WQE_1ST_COMP_FLG_MASK 0x1
  347. #define RDMA_SQ_BIND_WQE_1ST_COMP_FLG_SHIFT 0
  348. #define RDMA_SQ_BIND_WQE_1ST_RD_FENCE_FLG_MASK 0x1
  349. #define RDMA_SQ_BIND_WQE_1ST_RD_FENCE_FLG_SHIFT 1
  350. #define RDMA_SQ_BIND_WQE_1ST_INV_FENCE_FLG_MASK 0x1
  351. #define RDMA_SQ_BIND_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  352. #define RDMA_SQ_BIND_WQE_1ST_SE_FLG_MASK 0x1
  353. #define RDMA_SQ_BIND_WQE_1ST_SE_FLG_SHIFT 3
  354. #define RDMA_SQ_BIND_WQE_1ST_INLINE_FLG_MASK 0x1
  355. #define RDMA_SQ_BIND_WQE_1ST_INLINE_FLG_SHIFT 4
  356. #define RDMA_SQ_BIND_WQE_1ST_RESERVED0_MASK 0x7
  357. #define RDMA_SQ_BIND_WQE_1ST_RESERVED0_SHIFT 5
  358. u8 wqe_size;
  359. u8 prev_wqe_size;
  360. };
  361. /* Second element (16 bytes) of bind wqe */
  362. struct rdma_sq_bind_wqe_2nd {
  363. u8 bind_ctrl;
  364. #define RDMA_SQ_BIND_WQE_2ND_ZERO_BASED_MASK 0x1
  365. #define RDMA_SQ_BIND_WQE_2ND_ZERO_BASED_SHIFT 0
  366. #define RDMA_SQ_BIND_WQE_2ND_MW_TYPE_MASK 0x1
  367. #define RDMA_SQ_BIND_WQE_2ND_MW_TYPE_SHIFT 1
  368. #define RDMA_SQ_BIND_WQE_2ND_RESERVED1_MASK 0x3F
  369. #define RDMA_SQ_BIND_WQE_2ND_RESERVED1_SHIFT 2
  370. u8 access_ctrl;
  371. #define RDMA_SQ_BIND_WQE_2ND_REMOTE_READ_MASK 0x1
  372. #define RDMA_SQ_BIND_WQE_2ND_REMOTE_READ_SHIFT 0
  373. #define RDMA_SQ_BIND_WQE_2ND_REMOTE_WRITE_MASK 0x1
  374. #define RDMA_SQ_BIND_WQE_2ND_REMOTE_WRITE_SHIFT 1
  375. #define RDMA_SQ_BIND_WQE_2ND_ENABLE_ATOMIC_MASK 0x1
  376. #define RDMA_SQ_BIND_WQE_2ND_ENABLE_ATOMIC_SHIFT 2
  377. #define RDMA_SQ_BIND_WQE_2ND_LOCAL_READ_MASK 0x1
  378. #define RDMA_SQ_BIND_WQE_2ND_LOCAL_READ_SHIFT 3
  379. #define RDMA_SQ_BIND_WQE_2ND_LOCAL_WRITE_MASK 0x1
  380. #define RDMA_SQ_BIND_WQE_2ND_LOCAL_WRITE_SHIFT 4
  381. #define RDMA_SQ_BIND_WQE_2ND_RESERVED2_MASK 0x7
  382. #define RDMA_SQ_BIND_WQE_2ND_RESERVED2_SHIFT 5
  383. u8 reserved3;
  384. u8 length_hi;
  385. __le32 length_lo;
  386. __le32 parent_l_key;
  387. __le32 reserved4;
  388. };
  389. /* Structure with only the SQ WQE common
  390. * fields. Size is of one SQ element (16B)
  391. */
  392. struct rdma_sq_common_wqe {
  393. __le32 reserved1[3];
  394. u8 req_type;
  395. u8 flags;
  396. #define RDMA_SQ_COMMON_WQE_COMP_FLG_MASK 0x1
  397. #define RDMA_SQ_COMMON_WQE_COMP_FLG_SHIFT 0
  398. #define RDMA_SQ_COMMON_WQE_RD_FENCE_FLG_MASK 0x1
  399. #define RDMA_SQ_COMMON_WQE_RD_FENCE_FLG_SHIFT 1
  400. #define RDMA_SQ_COMMON_WQE_INV_FENCE_FLG_MASK 0x1
  401. #define RDMA_SQ_COMMON_WQE_INV_FENCE_FLG_SHIFT 2
  402. #define RDMA_SQ_COMMON_WQE_SE_FLG_MASK 0x1
  403. #define RDMA_SQ_COMMON_WQE_SE_FLG_SHIFT 3
  404. #define RDMA_SQ_COMMON_WQE_INLINE_FLG_MASK 0x1
  405. #define RDMA_SQ_COMMON_WQE_INLINE_FLG_SHIFT 4
  406. #define RDMA_SQ_COMMON_WQE_RESERVED0_MASK 0x7
  407. #define RDMA_SQ_COMMON_WQE_RESERVED0_SHIFT 5
  408. u8 wqe_size;
  409. u8 prev_wqe_size;
  410. };
  411. struct rdma_sq_fmr_wqe {
  412. struct regpair addr;
  413. __le32 l_key;
  414. u8 req_type;
  415. u8 flags;
  416. #define RDMA_SQ_FMR_WQE_COMP_FLG_MASK 0x1
  417. #define RDMA_SQ_FMR_WQE_COMP_FLG_SHIFT 0
  418. #define RDMA_SQ_FMR_WQE_RD_FENCE_FLG_MASK 0x1
  419. #define RDMA_SQ_FMR_WQE_RD_FENCE_FLG_SHIFT 1
  420. #define RDMA_SQ_FMR_WQE_INV_FENCE_FLG_MASK 0x1
  421. #define RDMA_SQ_FMR_WQE_INV_FENCE_FLG_SHIFT 2
  422. #define RDMA_SQ_FMR_WQE_SE_FLG_MASK 0x1
  423. #define RDMA_SQ_FMR_WQE_SE_FLG_SHIFT 3
  424. #define RDMA_SQ_FMR_WQE_INLINE_FLG_MASK 0x1
  425. #define RDMA_SQ_FMR_WQE_INLINE_FLG_SHIFT 4
  426. #define RDMA_SQ_FMR_WQE_DIF_ON_HOST_FLG_MASK 0x1
  427. #define RDMA_SQ_FMR_WQE_DIF_ON_HOST_FLG_SHIFT 5
  428. #define RDMA_SQ_FMR_WQE_RESERVED0_MASK 0x3
  429. #define RDMA_SQ_FMR_WQE_RESERVED0_SHIFT 6
  430. u8 wqe_size;
  431. u8 prev_wqe_size;
  432. u8 fmr_ctrl;
  433. #define RDMA_SQ_FMR_WQE_PAGE_SIZE_LOG_MASK 0x1F
  434. #define RDMA_SQ_FMR_WQE_PAGE_SIZE_LOG_SHIFT 0
  435. #define RDMA_SQ_FMR_WQE_ZERO_BASED_MASK 0x1
  436. #define RDMA_SQ_FMR_WQE_ZERO_BASED_SHIFT 5
  437. #define RDMA_SQ_FMR_WQE_BIND_EN_MASK 0x1
  438. #define RDMA_SQ_FMR_WQE_BIND_EN_SHIFT 6
  439. #define RDMA_SQ_FMR_WQE_RESERVED1_MASK 0x1
  440. #define RDMA_SQ_FMR_WQE_RESERVED1_SHIFT 7
  441. u8 access_ctrl;
  442. #define RDMA_SQ_FMR_WQE_REMOTE_READ_MASK 0x1
  443. #define RDMA_SQ_FMR_WQE_REMOTE_READ_SHIFT 0
  444. #define RDMA_SQ_FMR_WQE_REMOTE_WRITE_MASK 0x1
  445. #define RDMA_SQ_FMR_WQE_REMOTE_WRITE_SHIFT 1
  446. #define RDMA_SQ_FMR_WQE_ENABLE_ATOMIC_MASK 0x1
  447. #define RDMA_SQ_FMR_WQE_ENABLE_ATOMIC_SHIFT 2
  448. #define RDMA_SQ_FMR_WQE_LOCAL_READ_MASK 0x1
  449. #define RDMA_SQ_FMR_WQE_LOCAL_READ_SHIFT 3
  450. #define RDMA_SQ_FMR_WQE_LOCAL_WRITE_MASK 0x1
  451. #define RDMA_SQ_FMR_WQE_LOCAL_WRITE_SHIFT 4
  452. #define RDMA_SQ_FMR_WQE_RESERVED2_MASK 0x7
  453. #define RDMA_SQ_FMR_WQE_RESERVED2_SHIFT 5
  454. u8 reserved3;
  455. u8 length_hi;
  456. __le32 length_lo;
  457. struct regpair pbl_addr;
  458. __le32 dif_base_ref_tag;
  459. __le16 dif_app_tag;
  460. __le16 dif_app_tag_mask;
  461. __le16 dif_runt_crc_value;
  462. __le16 dif_flags;
  463. #define RDMA_SQ_FMR_WQE_DIF_IO_DIRECTION_FLG_MASK 0x1
  464. #define RDMA_SQ_FMR_WQE_DIF_IO_DIRECTION_FLG_SHIFT 0
  465. #define RDMA_SQ_FMR_WQE_DIF_BLOCK_SIZE_MASK 0x1
  466. #define RDMA_SQ_FMR_WQE_DIF_BLOCK_SIZE_SHIFT 1
  467. #define RDMA_SQ_FMR_WQE_DIF_RUNT_VALID_FLG_MASK 0x1
  468. #define RDMA_SQ_FMR_WQE_DIF_RUNT_VALID_FLG_SHIFT 2
  469. #define RDMA_SQ_FMR_WQE_DIF_VALIDATE_CRC_GUARD_MASK 0x1
  470. #define RDMA_SQ_FMR_WQE_DIF_VALIDATE_CRC_GUARD_SHIFT 3
  471. #define RDMA_SQ_FMR_WQE_DIF_VALIDATE_REF_TAG_MASK 0x1
  472. #define RDMA_SQ_FMR_WQE_DIF_VALIDATE_REF_TAG_SHIFT 4
  473. #define RDMA_SQ_FMR_WQE_DIF_VALIDATE_APP_TAG_MASK 0x1
  474. #define RDMA_SQ_FMR_WQE_DIF_VALIDATE_APP_TAG_SHIFT 5
  475. #define RDMA_SQ_FMR_WQE_DIF_CRC_SEED_MASK 0x1
  476. #define RDMA_SQ_FMR_WQE_DIF_CRC_SEED_SHIFT 6
  477. #define RDMA_SQ_FMR_WQE_DIF_RX_REF_TAG_CONST_MASK 0x1
  478. #define RDMA_SQ_FMR_WQE_DIF_RX_REF_TAG_CONST_SHIFT 7
  479. #define RDMA_SQ_FMR_WQE_RESERVED4_MASK 0xFF
  480. #define RDMA_SQ_FMR_WQE_RESERVED4_SHIFT 8
  481. __le32 reserved5;
  482. };
  483. /* First element (16 bytes) of fmr wqe */
  484. struct rdma_sq_fmr_wqe_1st {
  485. struct regpair addr;
  486. __le32 l_key;
  487. u8 req_type;
  488. u8 flags;
  489. #define RDMA_SQ_FMR_WQE_1ST_COMP_FLG_MASK 0x1
  490. #define RDMA_SQ_FMR_WQE_1ST_COMP_FLG_SHIFT 0
  491. #define RDMA_SQ_FMR_WQE_1ST_RD_FENCE_FLG_MASK 0x1
  492. #define RDMA_SQ_FMR_WQE_1ST_RD_FENCE_FLG_SHIFT 1
  493. #define RDMA_SQ_FMR_WQE_1ST_INV_FENCE_FLG_MASK 0x1
  494. #define RDMA_SQ_FMR_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  495. #define RDMA_SQ_FMR_WQE_1ST_SE_FLG_MASK 0x1
  496. #define RDMA_SQ_FMR_WQE_1ST_SE_FLG_SHIFT 3
  497. #define RDMA_SQ_FMR_WQE_1ST_INLINE_FLG_MASK 0x1
  498. #define RDMA_SQ_FMR_WQE_1ST_INLINE_FLG_SHIFT 4
  499. #define RDMA_SQ_FMR_WQE_1ST_DIF_ON_HOST_FLG_MASK 0x1
  500. #define RDMA_SQ_FMR_WQE_1ST_DIF_ON_HOST_FLG_SHIFT 5
  501. #define RDMA_SQ_FMR_WQE_1ST_RESERVED0_MASK 0x3
  502. #define RDMA_SQ_FMR_WQE_1ST_RESERVED0_SHIFT 6
  503. u8 wqe_size;
  504. u8 prev_wqe_size;
  505. };
  506. /* Second element (16 bytes) of fmr wqe */
  507. struct rdma_sq_fmr_wqe_2nd {
  508. u8 fmr_ctrl;
  509. #define RDMA_SQ_FMR_WQE_2ND_PAGE_SIZE_LOG_MASK 0x1F
  510. #define RDMA_SQ_FMR_WQE_2ND_PAGE_SIZE_LOG_SHIFT 0
  511. #define RDMA_SQ_FMR_WQE_2ND_ZERO_BASED_MASK 0x1
  512. #define RDMA_SQ_FMR_WQE_2ND_ZERO_BASED_SHIFT 5
  513. #define RDMA_SQ_FMR_WQE_2ND_BIND_EN_MASK 0x1
  514. #define RDMA_SQ_FMR_WQE_2ND_BIND_EN_SHIFT 6
  515. #define RDMA_SQ_FMR_WQE_2ND_RESERVED1_MASK 0x1
  516. #define RDMA_SQ_FMR_WQE_2ND_RESERVED1_SHIFT 7
  517. u8 access_ctrl;
  518. #define RDMA_SQ_FMR_WQE_2ND_REMOTE_READ_MASK 0x1
  519. #define RDMA_SQ_FMR_WQE_2ND_REMOTE_READ_SHIFT 0
  520. #define RDMA_SQ_FMR_WQE_2ND_REMOTE_WRITE_MASK 0x1
  521. #define RDMA_SQ_FMR_WQE_2ND_REMOTE_WRITE_SHIFT 1
  522. #define RDMA_SQ_FMR_WQE_2ND_ENABLE_ATOMIC_MASK 0x1
  523. #define RDMA_SQ_FMR_WQE_2ND_ENABLE_ATOMIC_SHIFT 2
  524. #define RDMA_SQ_FMR_WQE_2ND_LOCAL_READ_MASK 0x1
  525. #define RDMA_SQ_FMR_WQE_2ND_LOCAL_READ_SHIFT 3
  526. #define RDMA_SQ_FMR_WQE_2ND_LOCAL_WRITE_MASK 0x1
  527. #define RDMA_SQ_FMR_WQE_2ND_LOCAL_WRITE_SHIFT 4
  528. #define RDMA_SQ_FMR_WQE_2ND_RESERVED2_MASK 0x7
  529. #define RDMA_SQ_FMR_WQE_2ND_RESERVED2_SHIFT 5
  530. u8 reserved3;
  531. u8 length_hi;
  532. __le32 length_lo;
  533. struct regpair pbl_addr;
  534. };
  535. /* Third element (16 bytes) of fmr wqe */
  536. struct rdma_sq_fmr_wqe_3rd {
  537. __le32 dif_base_ref_tag;
  538. __le16 dif_app_tag;
  539. __le16 dif_app_tag_mask;
  540. __le16 dif_runt_crc_value;
  541. __le16 dif_flags;
  542. #define RDMA_SQ_FMR_WQE_3RD_DIF_IO_DIRECTION_FLG_MASK 0x1
  543. #define RDMA_SQ_FMR_WQE_3RD_DIF_IO_DIRECTION_FLG_SHIFT 0
  544. #define RDMA_SQ_FMR_WQE_3RD_DIF_BLOCK_SIZE_MASK 0x1
  545. #define RDMA_SQ_FMR_WQE_3RD_DIF_BLOCK_SIZE_SHIFT 1
  546. #define RDMA_SQ_FMR_WQE_3RD_DIF_RUNT_VALID_FLG_MASK 0x1
  547. #define RDMA_SQ_FMR_WQE_3RD_DIF_RUNT_VALID_FLG_SHIFT 2
  548. #define RDMA_SQ_FMR_WQE_3RD_DIF_VALIDATE_CRC_GUARD_MASK 0x1
  549. #define RDMA_SQ_FMR_WQE_3RD_DIF_VALIDATE_CRC_GUARD_SHIFT 3
  550. #define RDMA_SQ_FMR_WQE_3RD_DIF_VALIDATE_REF_TAG_MASK 0x1
  551. #define RDMA_SQ_FMR_WQE_3RD_DIF_VALIDATE_REF_TAG_SHIFT 4
  552. #define RDMA_SQ_FMR_WQE_3RD_DIF_VALIDATE_APP_TAG_MASK 0x1
  553. #define RDMA_SQ_FMR_WQE_3RD_DIF_VALIDATE_APP_TAG_SHIFT 5
  554. #define RDMA_SQ_FMR_WQE_3RD_DIF_CRC_SEED_MASK 0x1
  555. #define RDMA_SQ_FMR_WQE_3RD_DIF_CRC_SEED_SHIFT 6
  556. #define RDMA_SQ_FMR_WQE_3RD_DIF_RX_REF_TAG_CONST_MASK 0x1
  557. #define RDMA_SQ_FMR_WQE_3RD_DIF_RX_REF_TAG_CONST_SHIFT 7
  558. #define RDMA_SQ_FMR_WQE_3RD_RESERVED4_MASK 0xFF
  559. #define RDMA_SQ_FMR_WQE_RESERVED4_SHIFT 8
  560. __le32 reserved5;
  561. };
  562. struct rdma_sq_local_inv_wqe {
  563. struct regpair reserved;
  564. __le32 inv_l_key;
  565. u8 req_type;
  566. u8 flags;
  567. #define RDMA_SQ_LOCAL_INV_WQE_COMP_FLG_MASK 0x1
  568. #define RDMA_SQ_LOCAL_INV_WQE_COMP_FLG_SHIFT 0
  569. #define RDMA_SQ_LOCAL_INV_WQE_RD_FENCE_FLG_MASK 0x1
  570. #define RDMA_SQ_LOCAL_INV_WQE_RD_FENCE_FLG_SHIFT 1
  571. #define RDMA_SQ_LOCAL_INV_WQE_INV_FENCE_FLG_MASK 0x1
  572. #define RDMA_SQ_LOCAL_INV_WQE_INV_FENCE_FLG_SHIFT 2
  573. #define RDMA_SQ_LOCAL_INV_WQE_SE_FLG_MASK 0x1
  574. #define RDMA_SQ_LOCAL_INV_WQE_SE_FLG_SHIFT 3
  575. #define RDMA_SQ_LOCAL_INV_WQE_INLINE_FLG_MASK 0x1
  576. #define RDMA_SQ_LOCAL_INV_WQE_INLINE_FLG_SHIFT 4
  577. #define RDMA_SQ_LOCAL_INV_WQE_DIF_ON_HOST_FLG_MASK 0x1
  578. #define RDMA_SQ_LOCAL_INV_WQE_DIF_ON_HOST_FLG_SHIFT 5
  579. #define RDMA_SQ_LOCAL_INV_WQE_RESERVED0_MASK 0x3
  580. #define RDMA_SQ_LOCAL_INV_WQE_RESERVED0_SHIFT 6
  581. u8 wqe_size;
  582. u8 prev_wqe_size;
  583. };
  584. struct rdma_sq_rdma_wqe {
  585. __le32 imm_data;
  586. __le32 length;
  587. __le32 xrc_srq;
  588. u8 req_type;
  589. u8 flags;
  590. #define RDMA_SQ_RDMA_WQE_COMP_FLG_MASK 0x1
  591. #define RDMA_SQ_RDMA_WQE_COMP_FLG_SHIFT 0
  592. #define RDMA_SQ_RDMA_WQE_RD_FENCE_FLG_MASK 0x1
  593. #define RDMA_SQ_RDMA_WQE_RD_FENCE_FLG_SHIFT 1
  594. #define RDMA_SQ_RDMA_WQE_INV_FENCE_FLG_MASK 0x1
  595. #define RDMA_SQ_RDMA_WQE_INV_FENCE_FLG_SHIFT 2
  596. #define RDMA_SQ_RDMA_WQE_SE_FLG_MASK 0x1
  597. #define RDMA_SQ_RDMA_WQE_SE_FLG_SHIFT 3
  598. #define RDMA_SQ_RDMA_WQE_INLINE_FLG_MASK 0x1
  599. #define RDMA_SQ_RDMA_WQE_INLINE_FLG_SHIFT 4
  600. #define RDMA_SQ_RDMA_WQE_DIF_ON_HOST_FLG_MASK 0x1
  601. #define RDMA_SQ_RDMA_WQE_DIF_ON_HOST_FLG_SHIFT 5
  602. #define RDMA_SQ_RDMA_WQE_READ_INV_FLG_MASK 0x1
  603. #define RDMA_SQ_RDMA_WQE_READ_INV_FLG_SHIFT 6
  604. #define RDMA_SQ_RDMA_WQE_RESERVED0_MASK 0x1
  605. #define RDMA_SQ_RDMA_WQE_RESERVED0_SHIFT 7
  606. u8 wqe_size;
  607. u8 prev_wqe_size;
  608. struct regpair remote_va;
  609. __le32 r_key;
  610. u8 dif_flags;
  611. #define RDMA_SQ_RDMA_WQE_DIF_BLOCK_SIZE_MASK 0x1
  612. #define RDMA_SQ_RDMA_WQE_DIF_BLOCK_SIZE_SHIFT 0
  613. #define RDMA_SQ_RDMA_WQE_DIF_FIRST_RDMA_IN_IO_FLG_MASK 0x1
  614. #define RDMA_SQ_RDMA_WQE_DIF_FIRST_RDMA_IN_IO_FLG_SHIFT 1
  615. #define RDMA_SQ_RDMA_WQE_DIF_LAST_RDMA_IN_IO_FLG_MASK 0x1
  616. #define RDMA_SQ_RDMA_WQE_DIF_LAST_RDMA_IN_IO_FLG_SHIFT 2
  617. #define RDMA_SQ_RDMA_WQE_RESERVED1_MASK 0x1F
  618. #define RDMA_SQ_RDMA_WQE_RESERVED1_SHIFT 3
  619. u8 reserved2[3];
  620. };
  621. /* First element (16 bytes) of rdma wqe */
  622. struct rdma_sq_rdma_wqe_1st {
  623. __le32 imm_data;
  624. __le32 length;
  625. __le32 xrc_srq;
  626. u8 req_type;
  627. u8 flags;
  628. #define RDMA_SQ_RDMA_WQE_1ST_COMP_FLG_MASK 0x1
  629. #define RDMA_SQ_RDMA_WQE_1ST_COMP_FLG_SHIFT 0
  630. #define RDMA_SQ_RDMA_WQE_1ST_RD_FENCE_FLG_MASK 0x1
  631. #define RDMA_SQ_RDMA_WQE_1ST_RD_FENCE_FLG_SHIFT 1
  632. #define RDMA_SQ_RDMA_WQE_1ST_INV_FENCE_FLG_MASK 0x1
  633. #define RDMA_SQ_RDMA_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  634. #define RDMA_SQ_RDMA_WQE_1ST_SE_FLG_MASK 0x1
  635. #define RDMA_SQ_RDMA_WQE_1ST_SE_FLG_SHIFT 3
  636. #define RDMA_SQ_RDMA_WQE_1ST_INLINE_FLG_MASK 0x1
  637. #define RDMA_SQ_RDMA_WQE_1ST_INLINE_FLG_SHIFT 4
  638. #define RDMA_SQ_RDMA_WQE_1ST_DIF_ON_HOST_FLG_MASK 0x1
  639. #define RDMA_SQ_RDMA_WQE_1ST_DIF_ON_HOST_FLG_SHIFT 5
  640. #define RDMA_SQ_RDMA_WQE_1ST_READ_INV_FLG_MASK 0x1
  641. #define RDMA_SQ_RDMA_WQE_1ST_READ_INV_FLG_SHIFT 6
  642. #define RDMA_SQ_RDMA_WQE_1ST_RESERVED0_MASK 0x1
  643. #define RDMA_SQ_RDMA_WQE_1ST_RESERVED0_SHIFT 7
  644. u8 wqe_size;
  645. u8 prev_wqe_size;
  646. };
  647. /* Second element (16 bytes) of rdma wqe */
  648. struct rdma_sq_rdma_wqe_2nd {
  649. struct regpair remote_va;
  650. __le32 r_key;
  651. u8 dif_flags;
  652. #define RDMA_SQ_RDMA_WQE_2ND_DIF_BLOCK_SIZE_MASK 0x1
  653. #define RDMA_SQ_RDMA_WQE_2ND_DIF_BLOCK_SIZE_SHIFT 0
  654. #define RDMA_SQ_RDMA_WQE_2ND_DIF_FIRST_SEGMENT_FLG_MASK 0x1
  655. #define RDMA_SQ_RDMA_WQE_2ND_DIF_FIRST_SEGMENT_FLG_SHIFT 1
  656. #define RDMA_SQ_RDMA_WQE_2ND_DIF_LAST_SEGMENT_FLG_MASK 0x1
  657. #define RDMA_SQ_RDMA_WQE_2ND_DIF_LAST_SEGMENT_FLG_SHIFT 2
  658. #define RDMA_SQ_RDMA_WQE_2ND_RESERVED1_MASK 0x1F
  659. #define RDMA_SQ_RDMA_WQE_2ND_RESERVED1_SHIFT 3
  660. u8 reserved2[3];
  661. };
  662. /* SQ WQE req type enumeration */
  663. enum rdma_sq_req_type {
  664. RDMA_SQ_REQ_TYPE_SEND,
  665. RDMA_SQ_REQ_TYPE_SEND_WITH_IMM,
  666. RDMA_SQ_REQ_TYPE_SEND_WITH_INVALIDATE,
  667. RDMA_SQ_REQ_TYPE_RDMA_WR,
  668. RDMA_SQ_REQ_TYPE_RDMA_WR_WITH_IMM,
  669. RDMA_SQ_REQ_TYPE_RDMA_RD,
  670. RDMA_SQ_REQ_TYPE_ATOMIC_CMP_AND_SWAP,
  671. RDMA_SQ_REQ_TYPE_ATOMIC_ADD,
  672. RDMA_SQ_REQ_TYPE_LOCAL_INVALIDATE,
  673. RDMA_SQ_REQ_TYPE_FAST_MR,
  674. RDMA_SQ_REQ_TYPE_BIND,
  675. RDMA_SQ_REQ_TYPE_INVALID,
  676. MAX_RDMA_SQ_REQ_TYPE
  677. };
  678. struct rdma_sq_send_wqe {
  679. __le32 inv_key_or_imm_data;
  680. __le32 length;
  681. __le32 xrc_srq;
  682. u8 req_type;
  683. u8 flags;
  684. #define RDMA_SQ_SEND_WQE_COMP_FLG_MASK 0x1
  685. #define RDMA_SQ_SEND_WQE_COMP_FLG_SHIFT 0
  686. #define RDMA_SQ_SEND_WQE_RD_FENCE_FLG_MASK 0x1
  687. #define RDMA_SQ_SEND_WQE_RD_FENCE_FLG_SHIFT 1
  688. #define RDMA_SQ_SEND_WQE_INV_FENCE_FLG_MASK 0x1
  689. #define RDMA_SQ_SEND_WQE_INV_FENCE_FLG_SHIFT 2
  690. #define RDMA_SQ_SEND_WQE_SE_FLG_MASK 0x1
  691. #define RDMA_SQ_SEND_WQE_SE_FLG_SHIFT 3
  692. #define RDMA_SQ_SEND_WQE_INLINE_FLG_MASK 0x1
  693. #define RDMA_SQ_SEND_WQE_INLINE_FLG_SHIFT 4
  694. #define RDMA_SQ_SEND_WQE_DIF_ON_HOST_FLG_MASK 0x1
  695. #define RDMA_SQ_SEND_WQE_DIF_ON_HOST_FLG_SHIFT 5
  696. #define RDMA_SQ_SEND_WQE_RESERVED0_MASK 0x3
  697. #define RDMA_SQ_SEND_WQE_RESERVED0_SHIFT 6
  698. u8 wqe_size;
  699. u8 prev_wqe_size;
  700. __le32 reserved1[4];
  701. };
  702. struct rdma_sq_send_wqe_1st {
  703. __le32 inv_key_or_imm_data;
  704. __le32 length;
  705. __le32 xrc_srq;
  706. u8 req_type;
  707. u8 flags;
  708. #define RDMA_SQ_SEND_WQE_1ST_COMP_FLG_MASK 0x1
  709. #define RDMA_SQ_SEND_WQE_1ST_COMP_FLG_SHIFT 0
  710. #define RDMA_SQ_SEND_WQE_1ST_RD_FENCE_FLG_MASK 0x1
  711. #define RDMA_SQ_SEND_WQE_1ST_RD_FENCE_FLG_SHIFT 1
  712. #define RDMA_SQ_SEND_WQE_1ST_INV_FENCE_FLG_MASK 0x1
  713. #define RDMA_SQ_SEND_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  714. #define RDMA_SQ_SEND_WQE_1ST_SE_FLG_MASK 0x1
  715. #define RDMA_SQ_SEND_WQE_1ST_SE_FLG_SHIFT 3
  716. #define RDMA_SQ_SEND_WQE_1ST_INLINE_FLG_MASK 0x1
  717. #define RDMA_SQ_SEND_WQE_1ST_INLINE_FLG_SHIFT 4
  718. #define RDMA_SQ_SEND_WQE_1ST_RESERVED0_MASK 0x7
  719. #define RDMA_SQ_SEND_WQE_1ST_RESERVED0_SHIFT 5
  720. u8 wqe_size;
  721. u8 prev_wqe_size;
  722. };
  723. struct rdma_sq_send_wqe_2st {
  724. __le32 reserved1[4];
  725. };
  726. #endif /* __QED_HSI_RDMA__ */