qedr_hsi_rdma.h 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749
  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;
  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. MAX_RDMA_CQE_REQUESTER_STATUS_ENUM
  112. };
  113. /* CQE responder status enumeration */
  114. enum rdma_cqe_responder_status_enum {
  115. RDMA_CQE_RESP_STS_OK,
  116. RDMA_CQE_RESP_STS_LOCAL_ACCESS_ERR,
  117. RDMA_CQE_RESP_STS_LOCAL_LENGTH_ERR,
  118. RDMA_CQE_RESP_STS_LOCAL_QP_OPERATION_ERR,
  119. RDMA_CQE_RESP_STS_LOCAL_PROTECTION_ERR,
  120. RDMA_CQE_RESP_STS_MEMORY_MGT_OPERATION_ERR,
  121. RDMA_CQE_RESP_STS_REMOTE_INVALID_REQUEST_ERR,
  122. RDMA_CQE_RESP_STS_WORK_REQUEST_FLUSHED_ERR,
  123. MAX_RDMA_CQE_RESPONDER_STATUS_ENUM
  124. };
  125. /* CQE type enumeration */
  126. enum rdma_cqe_type {
  127. RDMA_CQE_TYPE_REQUESTER,
  128. RDMA_CQE_TYPE_RESPONDER_RQ,
  129. RDMA_CQE_TYPE_RESPONDER_SRQ,
  130. RDMA_CQE_TYPE_INVALID,
  131. MAX_RDMA_CQE_TYPE
  132. };
  133. struct rdma_sq_sge {
  134. __le32 length;
  135. struct regpair addr;
  136. __le32 l_key;
  137. };
  138. struct rdma_rq_sge {
  139. struct regpair addr;
  140. __le32 length;
  141. __le32 flags;
  142. #define RDMA_RQ_SGE_L_KEY_MASK 0x3FFFFFF
  143. #define RDMA_RQ_SGE_L_KEY_SHIFT 0
  144. #define RDMA_RQ_SGE_NUM_SGES_MASK 0x7
  145. #define RDMA_RQ_SGE_NUM_SGES_SHIFT 26
  146. #define RDMA_RQ_SGE_RESERVED0_MASK 0x7
  147. #define RDMA_RQ_SGE_RESERVED0_SHIFT 29
  148. };
  149. struct rdma_srq_sge {
  150. struct regpair addr;
  151. __le32 length;
  152. __le32 l_key;
  153. };
  154. /* Rdma doorbell data for SQ and RQ */
  155. struct rdma_pwm_val16_data {
  156. __le16 icid;
  157. __le16 value;
  158. };
  159. union rdma_pwm_val16_data_union {
  160. struct rdma_pwm_val16_data as_struct;
  161. __le32 as_dword;
  162. };
  163. /* Rdma doorbell data for CQ */
  164. struct rdma_pwm_val32_data {
  165. __le16 icid;
  166. u8 agg_flags;
  167. u8 params;
  168. #define RDMA_PWM_VAL32_DATA_AGG_CMD_MASK 0x3
  169. #define RDMA_PWM_VAL32_DATA_AGG_CMD_SHIFT 0
  170. #define RDMA_PWM_VAL32_DATA_BYPASS_EN_MASK 0x1
  171. #define RDMA_PWM_VAL32_DATA_BYPASS_EN_SHIFT 2
  172. #define RDMA_PWM_VAL32_DATA_RESERVED_MASK 0x1F
  173. #define RDMA_PWM_VAL32_DATA_RESERVED_SHIFT 3
  174. __le32 value;
  175. };
  176. /* DIF Block size options */
  177. enum rdma_dif_block_size {
  178. RDMA_DIF_BLOCK_512 = 0,
  179. RDMA_DIF_BLOCK_4096 = 1,
  180. MAX_RDMA_DIF_BLOCK_SIZE
  181. };
  182. /* DIF CRC initial value */
  183. enum rdma_dif_crc_seed {
  184. RDMA_DIF_CRC_SEED_0000 = 0,
  185. RDMA_DIF_CRC_SEED_FFFF = 1,
  186. MAX_RDMA_DIF_CRC_SEED
  187. };
  188. /* RDMA DIF Error Result Structure */
  189. struct rdma_dif_error_result {
  190. __le32 error_intervals;
  191. __le32 dif_error_1st_interval;
  192. u8 flags;
  193. #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_CRC_MASK 0x1
  194. #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_CRC_SHIFT 0
  195. #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_APP_TAG_MASK 0x1
  196. #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_APP_TAG_SHIFT 1
  197. #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_REF_TAG_MASK 0x1
  198. #define RDMA_DIF_ERROR_RESULT_DIF_ERROR_TYPE_REF_TAG_SHIFT 2
  199. #define RDMA_DIF_ERROR_RESULT_RESERVED0_MASK 0xF
  200. #define RDMA_DIF_ERROR_RESULT_RESERVED0_SHIFT 3
  201. #define RDMA_DIF_ERROR_RESULT_TOGGLE_BIT_MASK 0x1
  202. #define RDMA_DIF_ERROR_RESULT_TOGGLE_BIT_SHIFT 7
  203. u8 reserved1[55];
  204. };
  205. /* DIF IO direction */
  206. enum rdma_dif_io_direction_flg {
  207. RDMA_DIF_DIR_RX = 0,
  208. RDMA_DIF_DIR_TX = 1,
  209. MAX_RDMA_DIF_IO_DIRECTION_FLG
  210. };
  211. /* RDMA DIF Runt Result Structure */
  212. struct rdma_dif_runt_result {
  213. __le16 guard_tag;
  214. __le16 reserved[3];
  215. };
  216. /* Memory window type enumeration */
  217. enum rdma_mw_type {
  218. RDMA_MW_TYPE_1,
  219. RDMA_MW_TYPE_2A,
  220. MAX_RDMA_MW_TYPE
  221. };
  222. struct rdma_sq_atomic_wqe {
  223. __le32 reserved1;
  224. __le32 length;
  225. __le32 xrc_srq;
  226. u8 req_type;
  227. u8 flags;
  228. #define RDMA_SQ_ATOMIC_WQE_COMP_FLG_MASK 0x1
  229. #define RDMA_SQ_ATOMIC_WQE_COMP_FLG_SHIFT 0
  230. #define RDMA_SQ_ATOMIC_WQE_RD_FENCE_FLG_MASK 0x1
  231. #define RDMA_SQ_ATOMIC_WQE_RD_FENCE_FLG_SHIFT 1
  232. #define RDMA_SQ_ATOMIC_WQE_INV_FENCE_FLG_MASK 0x1
  233. #define RDMA_SQ_ATOMIC_WQE_INV_FENCE_FLG_SHIFT 2
  234. #define RDMA_SQ_ATOMIC_WQE_SE_FLG_MASK 0x1
  235. #define RDMA_SQ_ATOMIC_WQE_SE_FLG_SHIFT 3
  236. #define RDMA_SQ_ATOMIC_WQE_INLINE_FLG_MASK 0x1
  237. #define RDMA_SQ_ATOMIC_WQE_INLINE_FLG_SHIFT 4
  238. #define RDMA_SQ_ATOMIC_WQE_DIF_ON_HOST_FLG_MASK 0x1
  239. #define RDMA_SQ_ATOMIC_WQE_DIF_ON_HOST_FLG_SHIFT 5
  240. #define RDMA_SQ_ATOMIC_WQE_RESERVED0_MASK 0x3
  241. #define RDMA_SQ_ATOMIC_WQE_RESERVED0_SHIFT 6
  242. u8 wqe_size;
  243. u8 prev_wqe_size;
  244. struct regpair remote_va;
  245. __le32 r_key;
  246. __le32 reserved2;
  247. struct regpair cmp_data;
  248. struct regpair swap_data;
  249. };
  250. /* First element (16 bytes) of atomic wqe */
  251. struct rdma_sq_atomic_wqe_1st {
  252. __le32 reserved1;
  253. __le32 length;
  254. __le32 xrc_srq;
  255. u8 req_type;
  256. u8 flags;
  257. #define RDMA_SQ_ATOMIC_WQE_1ST_COMP_FLG_MASK 0x1
  258. #define RDMA_SQ_ATOMIC_WQE_1ST_COMP_FLG_SHIFT 0
  259. #define RDMA_SQ_ATOMIC_WQE_1ST_RD_FENCE_FLG_MASK 0x1
  260. #define RDMA_SQ_ATOMIC_WQE_1ST_RD_FENCE_FLG_SHIFT 1
  261. #define RDMA_SQ_ATOMIC_WQE_1ST_INV_FENCE_FLG_MASK 0x1
  262. #define RDMA_SQ_ATOMIC_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  263. #define RDMA_SQ_ATOMIC_WQE_1ST_SE_FLG_MASK 0x1
  264. #define RDMA_SQ_ATOMIC_WQE_1ST_SE_FLG_SHIFT 3
  265. #define RDMA_SQ_ATOMIC_WQE_1ST_INLINE_FLG_MASK 0x1
  266. #define RDMA_SQ_ATOMIC_WQE_1ST_INLINE_FLG_SHIFT 4
  267. #define RDMA_SQ_ATOMIC_WQE_1ST_RESERVED0_MASK 0x7
  268. #define RDMA_SQ_ATOMIC_WQE_1ST_RESERVED0_SHIFT 5
  269. u8 wqe_size;
  270. u8 prev_wqe_size;
  271. };
  272. /* Second element (16 bytes) of atomic wqe */
  273. struct rdma_sq_atomic_wqe_2nd {
  274. struct regpair remote_va;
  275. __le32 r_key;
  276. __le32 reserved2;
  277. };
  278. /* Third element (16 bytes) of atomic wqe */
  279. struct rdma_sq_atomic_wqe_3rd {
  280. struct regpair cmp_data;
  281. struct regpair swap_data;
  282. };
  283. struct rdma_sq_bind_wqe {
  284. struct regpair addr;
  285. __le32 l_key;
  286. u8 req_type;
  287. u8 flags;
  288. #define RDMA_SQ_BIND_WQE_COMP_FLG_MASK 0x1
  289. #define RDMA_SQ_BIND_WQE_COMP_FLG_SHIFT 0
  290. #define RDMA_SQ_BIND_WQE_RD_FENCE_FLG_MASK 0x1
  291. #define RDMA_SQ_BIND_WQE_RD_FENCE_FLG_SHIFT 1
  292. #define RDMA_SQ_BIND_WQE_INV_FENCE_FLG_MASK 0x1
  293. #define RDMA_SQ_BIND_WQE_INV_FENCE_FLG_SHIFT 2
  294. #define RDMA_SQ_BIND_WQE_SE_FLG_MASK 0x1
  295. #define RDMA_SQ_BIND_WQE_SE_FLG_SHIFT 3
  296. #define RDMA_SQ_BIND_WQE_INLINE_FLG_MASK 0x1
  297. #define RDMA_SQ_BIND_WQE_INLINE_FLG_SHIFT 4
  298. #define RDMA_SQ_BIND_WQE_RESERVED0_MASK 0x7
  299. #define RDMA_SQ_BIND_WQE_RESERVED0_SHIFT 5
  300. u8 wqe_size;
  301. u8 prev_wqe_size;
  302. u8 bind_ctrl;
  303. #define RDMA_SQ_BIND_WQE_ZERO_BASED_MASK 0x1
  304. #define RDMA_SQ_BIND_WQE_ZERO_BASED_SHIFT 0
  305. #define RDMA_SQ_BIND_WQE_MW_TYPE_MASK 0x1
  306. #define RDMA_SQ_BIND_WQE_MW_TYPE_SHIFT 1
  307. #define RDMA_SQ_BIND_WQE_RESERVED1_MASK 0x3F
  308. #define RDMA_SQ_BIND_WQE_RESERVED1_SHIFT 2
  309. u8 access_ctrl;
  310. #define RDMA_SQ_BIND_WQE_REMOTE_READ_MASK 0x1
  311. #define RDMA_SQ_BIND_WQE_REMOTE_READ_SHIFT 0
  312. #define RDMA_SQ_BIND_WQE_REMOTE_WRITE_MASK 0x1
  313. #define RDMA_SQ_BIND_WQE_REMOTE_WRITE_SHIFT 1
  314. #define RDMA_SQ_BIND_WQE_ENABLE_ATOMIC_MASK 0x1
  315. #define RDMA_SQ_BIND_WQE_ENABLE_ATOMIC_SHIFT 2
  316. #define RDMA_SQ_BIND_WQE_LOCAL_READ_MASK 0x1
  317. #define RDMA_SQ_BIND_WQE_LOCAL_READ_SHIFT 3
  318. #define RDMA_SQ_BIND_WQE_LOCAL_WRITE_MASK 0x1
  319. #define RDMA_SQ_BIND_WQE_LOCAL_WRITE_SHIFT 4
  320. #define RDMA_SQ_BIND_WQE_RESERVED2_MASK 0x7
  321. #define RDMA_SQ_BIND_WQE_RESERVED2_SHIFT 5
  322. u8 reserved3;
  323. u8 length_hi;
  324. __le32 length_lo;
  325. __le32 parent_l_key;
  326. __le32 reserved4;
  327. };
  328. /* First element (16 bytes) of bind wqe */
  329. struct rdma_sq_bind_wqe_1st {
  330. struct regpair addr;
  331. __le32 l_key;
  332. u8 req_type;
  333. u8 flags;
  334. #define RDMA_SQ_BIND_WQE_1ST_COMP_FLG_MASK 0x1
  335. #define RDMA_SQ_BIND_WQE_1ST_COMP_FLG_SHIFT 0
  336. #define RDMA_SQ_BIND_WQE_1ST_RD_FENCE_FLG_MASK 0x1
  337. #define RDMA_SQ_BIND_WQE_1ST_RD_FENCE_FLG_SHIFT 1
  338. #define RDMA_SQ_BIND_WQE_1ST_INV_FENCE_FLG_MASK 0x1
  339. #define RDMA_SQ_BIND_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  340. #define RDMA_SQ_BIND_WQE_1ST_SE_FLG_MASK 0x1
  341. #define RDMA_SQ_BIND_WQE_1ST_SE_FLG_SHIFT 3
  342. #define RDMA_SQ_BIND_WQE_1ST_INLINE_FLG_MASK 0x1
  343. #define RDMA_SQ_BIND_WQE_1ST_INLINE_FLG_SHIFT 4
  344. #define RDMA_SQ_BIND_WQE_1ST_RESERVED0_MASK 0x7
  345. #define RDMA_SQ_BIND_WQE_1ST_RESERVED0_SHIFT 5
  346. u8 wqe_size;
  347. u8 prev_wqe_size;
  348. };
  349. /* Second element (16 bytes) of bind wqe */
  350. struct rdma_sq_bind_wqe_2nd {
  351. u8 bind_ctrl;
  352. #define RDMA_SQ_BIND_WQE_2ND_ZERO_BASED_MASK 0x1
  353. #define RDMA_SQ_BIND_WQE_2ND_ZERO_BASED_SHIFT 0
  354. #define RDMA_SQ_BIND_WQE_2ND_MW_TYPE_MASK 0x1
  355. #define RDMA_SQ_BIND_WQE_2ND_MW_TYPE_SHIFT 1
  356. #define RDMA_SQ_BIND_WQE_2ND_RESERVED1_MASK 0x3F
  357. #define RDMA_SQ_BIND_WQE_2ND_RESERVED1_SHIFT 2
  358. u8 access_ctrl;
  359. #define RDMA_SQ_BIND_WQE_2ND_REMOTE_READ_MASK 0x1
  360. #define RDMA_SQ_BIND_WQE_2ND_REMOTE_READ_SHIFT 0
  361. #define RDMA_SQ_BIND_WQE_2ND_REMOTE_WRITE_MASK 0x1
  362. #define RDMA_SQ_BIND_WQE_2ND_REMOTE_WRITE_SHIFT 1
  363. #define RDMA_SQ_BIND_WQE_2ND_ENABLE_ATOMIC_MASK 0x1
  364. #define RDMA_SQ_BIND_WQE_2ND_ENABLE_ATOMIC_SHIFT 2
  365. #define RDMA_SQ_BIND_WQE_2ND_LOCAL_READ_MASK 0x1
  366. #define RDMA_SQ_BIND_WQE_2ND_LOCAL_READ_SHIFT 3
  367. #define RDMA_SQ_BIND_WQE_2ND_LOCAL_WRITE_MASK 0x1
  368. #define RDMA_SQ_BIND_WQE_2ND_LOCAL_WRITE_SHIFT 4
  369. #define RDMA_SQ_BIND_WQE_2ND_RESERVED2_MASK 0x7
  370. #define RDMA_SQ_BIND_WQE_2ND_RESERVED2_SHIFT 5
  371. u8 reserved3;
  372. u8 length_hi;
  373. __le32 length_lo;
  374. __le32 parent_l_key;
  375. __le32 reserved4;
  376. };
  377. /* Structure with only the SQ WQE common
  378. * fields. Size is of one SQ element (16B)
  379. */
  380. struct rdma_sq_common_wqe {
  381. __le32 reserved1[3];
  382. u8 req_type;
  383. u8 flags;
  384. #define RDMA_SQ_COMMON_WQE_COMP_FLG_MASK 0x1
  385. #define RDMA_SQ_COMMON_WQE_COMP_FLG_SHIFT 0
  386. #define RDMA_SQ_COMMON_WQE_RD_FENCE_FLG_MASK 0x1
  387. #define RDMA_SQ_COMMON_WQE_RD_FENCE_FLG_SHIFT 1
  388. #define RDMA_SQ_COMMON_WQE_INV_FENCE_FLG_MASK 0x1
  389. #define RDMA_SQ_COMMON_WQE_INV_FENCE_FLG_SHIFT 2
  390. #define RDMA_SQ_COMMON_WQE_SE_FLG_MASK 0x1
  391. #define RDMA_SQ_COMMON_WQE_SE_FLG_SHIFT 3
  392. #define RDMA_SQ_COMMON_WQE_INLINE_FLG_MASK 0x1
  393. #define RDMA_SQ_COMMON_WQE_INLINE_FLG_SHIFT 4
  394. #define RDMA_SQ_COMMON_WQE_RESERVED0_MASK 0x7
  395. #define RDMA_SQ_COMMON_WQE_RESERVED0_SHIFT 5
  396. u8 wqe_size;
  397. u8 prev_wqe_size;
  398. };
  399. struct rdma_sq_fmr_wqe {
  400. struct regpair addr;
  401. __le32 l_key;
  402. u8 req_type;
  403. u8 flags;
  404. #define RDMA_SQ_FMR_WQE_COMP_FLG_MASK 0x1
  405. #define RDMA_SQ_FMR_WQE_COMP_FLG_SHIFT 0
  406. #define RDMA_SQ_FMR_WQE_RD_FENCE_FLG_MASK 0x1
  407. #define RDMA_SQ_FMR_WQE_RD_FENCE_FLG_SHIFT 1
  408. #define RDMA_SQ_FMR_WQE_INV_FENCE_FLG_MASK 0x1
  409. #define RDMA_SQ_FMR_WQE_INV_FENCE_FLG_SHIFT 2
  410. #define RDMA_SQ_FMR_WQE_SE_FLG_MASK 0x1
  411. #define RDMA_SQ_FMR_WQE_SE_FLG_SHIFT 3
  412. #define RDMA_SQ_FMR_WQE_INLINE_FLG_MASK 0x1
  413. #define RDMA_SQ_FMR_WQE_INLINE_FLG_SHIFT 4
  414. #define RDMA_SQ_FMR_WQE_DIF_ON_HOST_FLG_MASK 0x1
  415. #define RDMA_SQ_FMR_WQE_DIF_ON_HOST_FLG_SHIFT 5
  416. #define RDMA_SQ_FMR_WQE_RESERVED0_MASK 0x3
  417. #define RDMA_SQ_FMR_WQE_RESERVED0_SHIFT 6
  418. u8 wqe_size;
  419. u8 prev_wqe_size;
  420. u8 fmr_ctrl;
  421. #define RDMA_SQ_FMR_WQE_PAGE_SIZE_LOG_MASK 0x1F
  422. #define RDMA_SQ_FMR_WQE_PAGE_SIZE_LOG_SHIFT 0
  423. #define RDMA_SQ_FMR_WQE_ZERO_BASED_MASK 0x1
  424. #define RDMA_SQ_FMR_WQE_ZERO_BASED_SHIFT 5
  425. #define RDMA_SQ_FMR_WQE_BIND_EN_MASK 0x1
  426. #define RDMA_SQ_FMR_WQE_BIND_EN_SHIFT 6
  427. #define RDMA_SQ_FMR_WQE_RESERVED1_MASK 0x1
  428. #define RDMA_SQ_FMR_WQE_RESERVED1_SHIFT 7
  429. u8 access_ctrl;
  430. #define RDMA_SQ_FMR_WQE_REMOTE_READ_MASK 0x1
  431. #define RDMA_SQ_FMR_WQE_REMOTE_READ_SHIFT 0
  432. #define RDMA_SQ_FMR_WQE_REMOTE_WRITE_MASK 0x1
  433. #define RDMA_SQ_FMR_WQE_REMOTE_WRITE_SHIFT 1
  434. #define RDMA_SQ_FMR_WQE_ENABLE_ATOMIC_MASK 0x1
  435. #define RDMA_SQ_FMR_WQE_ENABLE_ATOMIC_SHIFT 2
  436. #define RDMA_SQ_FMR_WQE_LOCAL_READ_MASK 0x1
  437. #define RDMA_SQ_FMR_WQE_LOCAL_READ_SHIFT 3
  438. #define RDMA_SQ_FMR_WQE_LOCAL_WRITE_MASK 0x1
  439. #define RDMA_SQ_FMR_WQE_LOCAL_WRITE_SHIFT 4
  440. #define RDMA_SQ_FMR_WQE_RESERVED2_MASK 0x7
  441. #define RDMA_SQ_FMR_WQE_RESERVED2_SHIFT 5
  442. u8 reserved3;
  443. u8 length_hi;
  444. __le32 length_lo;
  445. struct regpair pbl_addr;
  446. __le32 dif_base_ref_tag;
  447. __le16 dif_app_tag;
  448. __le16 dif_app_tag_mask;
  449. __le16 dif_runt_crc_value;
  450. __le16 dif_flags;
  451. #define RDMA_SQ_FMR_WQE_DIF_IO_DIRECTION_FLG_MASK 0x1
  452. #define RDMA_SQ_FMR_WQE_DIF_IO_DIRECTION_FLG_SHIFT 0
  453. #define RDMA_SQ_FMR_WQE_DIF_BLOCK_SIZE_MASK 0x1
  454. #define RDMA_SQ_FMR_WQE_DIF_BLOCK_SIZE_SHIFT 1
  455. #define RDMA_SQ_FMR_WQE_DIF_RUNT_VALID_FLG_MASK 0x1
  456. #define RDMA_SQ_FMR_WQE_DIF_RUNT_VALID_FLG_SHIFT 2
  457. #define RDMA_SQ_FMR_WQE_DIF_VALIDATE_CRC_GUARD_MASK 0x1
  458. #define RDMA_SQ_FMR_WQE_DIF_VALIDATE_CRC_GUARD_SHIFT 3
  459. #define RDMA_SQ_FMR_WQE_DIF_VALIDATE_REF_TAG_MASK 0x1
  460. #define RDMA_SQ_FMR_WQE_DIF_VALIDATE_REF_TAG_SHIFT 4
  461. #define RDMA_SQ_FMR_WQE_DIF_VALIDATE_APP_TAG_MASK 0x1
  462. #define RDMA_SQ_FMR_WQE_DIF_VALIDATE_APP_TAG_SHIFT 5
  463. #define RDMA_SQ_FMR_WQE_DIF_CRC_SEED_MASK 0x1
  464. #define RDMA_SQ_FMR_WQE_DIF_CRC_SEED_SHIFT 6
  465. #define RDMA_SQ_FMR_WQE_RESERVED4_MASK 0x1FF
  466. #define RDMA_SQ_FMR_WQE_RESERVED4_SHIFT 7
  467. __le32 Reserved5;
  468. };
  469. /* First element (16 bytes) of fmr wqe */
  470. struct rdma_sq_fmr_wqe_1st {
  471. struct regpair addr;
  472. __le32 l_key;
  473. u8 req_type;
  474. u8 flags;
  475. #define RDMA_SQ_FMR_WQE_1ST_COMP_FLG_MASK 0x1
  476. #define RDMA_SQ_FMR_WQE_1ST_COMP_FLG_SHIFT 0
  477. #define RDMA_SQ_FMR_WQE_1ST_RD_FENCE_FLG_MASK 0x1
  478. #define RDMA_SQ_FMR_WQE_1ST_RD_FENCE_FLG_SHIFT 1
  479. #define RDMA_SQ_FMR_WQE_1ST_INV_FENCE_FLG_MASK 0x1
  480. #define RDMA_SQ_FMR_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  481. #define RDMA_SQ_FMR_WQE_1ST_SE_FLG_MASK 0x1
  482. #define RDMA_SQ_FMR_WQE_1ST_SE_FLG_SHIFT 3
  483. #define RDMA_SQ_FMR_WQE_1ST_INLINE_FLG_MASK 0x1
  484. #define RDMA_SQ_FMR_WQE_1ST_INLINE_FLG_SHIFT 4
  485. #define RDMA_SQ_FMR_WQE_1ST_DIF_ON_HOST_FLG_MASK 0x1
  486. #define RDMA_SQ_FMR_WQE_1ST_DIF_ON_HOST_FLG_SHIFT 5
  487. #define RDMA_SQ_FMR_WQE_1ST_RESERVED0_MASK 0x3
  488. #define RDMA_SQ_FMR_WQE_1ST_RESERVED0_SHIFT 6
  489. u8 wqe_size;
  490. u8 prev_wqe_size;
  491. };
  492. /* Second element (16 bytes) of fmr wqe */
  493. struct rdma_sq_fmr_wqe_2nd {
  494. u8 fmr_ctrl;
  495. #define RDMA_SQ_FMR_WQE_2ND_PAGE_SIZE_LOG_MASK 0x1F
  496. #define RDMA_SQ_FMR_WQE_2ND_PAGE_SIZE_LOG_SHIFT 0
  497. #define RDMA_SQ_FMR_WQE_2ND_ZERO_BASED_MASK 0x1
  498. #define RDMA_SQ_FMR_WQE_2ND_ZERO_BASED_SHIFT 5
  499. #define RDMA_SQ_FMR_WQE_2ND_BIND_EN_MASK 0x1
  500. #define RDMA_SQ_FMR_WQE_2ND_BIND_EN_SHIFT 6
  501. #define RDMA_SQ_FMR_WQE_2ND_RESERVED1_MASK 0x1
  502. #define RDMA_SQ_FMR_WQE_2ND_RESERVED1_SHIFT 7
  503. u8 access_ctrl;
  504. #define RDMA_SQ_FMR_WQE_2ND_REMOTE_READ_MASK 0x1
  505. #define RDMA_SQ_FMR_WQE_2ND_REMOTE_READ_SHIFT 0
  506. #define RDMA_SQ_FMR_WQE_2ND_REMOTE_WRITE_MASK 0x1
  507. #define RDMA_SQ_FMR_WQE_2ND_REMOTE_WRITE_SHIFT 1
  508. #define RDMA_SQ_FMR_WQE_2ND_ENABLE_ATOMIC_MASK 0x1
  509. #define RDMA_SQ_FMR_WQE_2ND_ENABLE_ATOMIC_SHIFT 2
  510. #define RDMA_SQ_FMR_WQE_2ND_LOCAL_READ_MASK 0x1
  511. #define RDMA_SQ_FMR_WQE_2ND_LOCAL_READ_SHIFT 3
  512. #define RDMA_SQ_FMR_WQE_2ND_LOCAL_WRITE_MASK 0x1
  513. #define RDMA_SQ_FMR_WQE_2ND_LOCAL_WRITE_SHIFT 4
  514. #define RDMA_SQ_FMR_WQE_2ND_RESERVED2_MASK 0x7
  515. #define RDMA_SQ_FMR_WQE_2ND_RESERVED2_SHIFT 5
  516. u8 reserved3;
  517. u8 length_hi;
  518. __le32 length_lo;
  519. struct regpair pbl_addr;
  520. };
  521. /* Third element (16 bytes) of fmr wqe */
  522. struct rdma_sq_fmr_wqe_3rd {
  523. __le32 dif_base_ref_tag;
  524. __le16 dif_app_tag;
  525. __le16 dif_app_tag_mask;
  526. __le16 dif_runt_crc_value;
  527. __le16 dif_flags;
  528. #define RDMA_SQ_FMR_WQE_3RD_DIF_IO_DIRECTION_FLG_MASK 0x1
  529. #define RDMA_SQ_FMR_WQE_3RD_DIF_IO_DIRECTION_FLG_SHIFT 0
  530. #define RDMA_SQ_FMR_WQE_3RD_DIF_BLOCK_SIZE_MASK 0x1
  531. #define RDMA_SQ_FMR_WQE_3RD_DIF_BLOCK_SIZE_SHIFT 1
  532. #define RDMA_SQ_FMR_WQE_3RD_DIF_RUNT_VALID_FLG_MASK 0x1
  533. #define RDMA_SQ_FMR_WQE_3RD_DIF_RUNT_VALID_FLG_SHIFT 2
  534. #define RDMA_SQ_FMR_WQE_3RD_DIF_VALIDATE_CRC_GUARD_MASK 0x1
  535. #define RDMA_SQ_FMR_WQE_3RD_DIF_VALIDATE_CRC_GUARD_SHIFT 3
  536. #define RDMA_SQ_FMR_WQE_3RD_DIF_VALIDATE_REF_TAG_MASK 0x1
  537. #define RDMA_SQ_FMR_WQE_3RD_DIF_VALIDATE_REF_TAG_SHIFT 4
  538. #define RDMA_SQ_FMR_WQE_3RD_DIF_VALIDATE_APP_TAG_MASK 0x1
  539. #define RDMA_SQ_FMR_WQE_3RD_DIF_VALIDATE_APP_TAG_SHIFT 5
  540. #define RDMA_SQ_FMR_WQE_3RD_DIF_CRC_SEED_MASK 0x1
  541. #define RDMA_SQ_FMR_WQE_3RD_DIF_CRC_SEED_SHIFT 6
  542. #define RDMA_SQ_FMR_WQE_3RD_RESERVED4_MASK 0x1FF
  543. #define RDMA_SQ_FMR_WQE_3RD_RESERVED4_SHIFT 7
  544. __le32 Reserved5;
  545. };
  546. struct rdma_sq_local_inv_wqe {
  547. struct regpair reserved;
  548. __le32 inv_l_key;
  549. u8 req_type;
  550. u8 flags;
  551. #define RDMA_SQ_LOCAL_INV_WQE_COMP_FLG_MASK 0x1
  552. #define RDMA_SQ_LOCAL_INV_WQE_COMP_FLG_SHIFT 0
  553. #define RDMA_SQ_LOCAL_INV_WQE_RD_FENCE_FLG_MASK 0x1
  554. #define RDMA_SQ_LOCAL_INV_WQE_RD_FENCE_FLG_SHIFT 1
  555. #define RDMA_SQ_LOCAL_INV_WQE_INV_FENCE_FLG_MASK 0x1
  556. #define RDMA_SQ_LOCAL_INV_WQE_INV_FENCE_FLG_SHIFT 2
  557. #define RDMA_SQ_LOCAL_INV_WQE_SE_FLG_MASK 0x1
  558. #define RDMA_SQ_LOCAL_INV_WQE_SE_FLG_SHIFT 3
  559. #define RDMA_SQ_LOCAL_INV_WQE_INLINE_FLG_MASK 0x1
  560. #define RDMA_SQ_LOCAL_INV_WQE_INLINE_FLG_SHIFT 4
  561. #define RDMA_SQ_LOCAL_INV_WQE_DIF_ON_HOST_FLG_MASK 0x1
  562. #define RDMA_SQ_LOCAL_INV_WQE_DIF_ON_HOST_FLG_SHIFT 5
  563. #define RDMA_SQ_LOCAL_INV_WQE_RESERVED0_MASK 0x3
  564. #define RDMA_SQ_LOCAL_INV_WQE_RESERVED0_SHIFT 6
  565. u8 wqe_size;
  566. u8 prev_wqe_size;
  567. };
  568. struct rdma_sq_rdma_wqe {
  569. __le32 imm_data;
  570. __le32 length;
  571. __le32 xrc_srq;
  572. u8 req_type;
  573. u8 flags;
  574. #define RDMA_SQ_RDMA_WQE_COMP_FLG_MASK 0x1
  575. #define RDMA_SQ_RDMA_WQE_COMP_FLG_SHIFT 0
  576. #define RDMA_SQ_RDMA_WQE_RD_FENCE_FLG_MASK 0x1
  577. #define RDMA_SQ_RDMA_WQE_RD_FENCE_FLG_SHIFT 1
  578. #define RDMA_SQ_RDMA_WQE_INV_FENCE_FLG_MASK 0x1
  579. #define RDMA_SQ_RDMA_WQE_INV_FENCE_FLG_SHIFT 2
  580. #define RDMA_SQ_RDMA_WQE_SE_FLG_MASK 0x1
  581. #define RDMA_SQ_RDMA_WQE_SE_FLG_SHIFT 3
  582. #define RDMA_SQ_RDMA_WQE_INLINE_FLG_MASK 0x1
  583. #define RDMA_SQ_RDMA_WQE_INLINE_FLG_SHIFT 4
  584. #define RDMA_SQ_RDMA_WQE_DIF_ON_HOST_FLG_MASK 0x1
  585. #define RDMA_SQ_RDMA_WQE_DIF_ON_HOST_FLG_SHIFT 5
  586. #define RDMA_SQ_RDMA_WQE_RESERVED0_MASK 0x3
  587. #define RDMA_SQ_RDMA_WQE_RESERVED0_SHIFT 6
  588. u8 wqe_size;
  589. u8 prev_wqe_size;
  590. struct regpair remote_va;
  591. __le32 r_key;
  592. u8 dif_flags;
  593. #define RDMA_SQ_RDMA_WQE_DIF_BLOCK_SIZE_MASK 0x1
  594. #define RDMA_SQ_RDMA_WQE_DIF_BLOCK_SIZE_SHIFT 0
  595. #define RDMA_SQ_RDMA_WQE_DIF_FIRST_RDMA_IN_IO_FLG_MASK 0x1
  596. #define RDMA_SQ_RDMA_WQE_DIF_FIRST_RDMA_IN_IO_FLG_SHIFT 1
  597. #define RDMA_SQ_RDMA_WQE_DIF_LAST_RDMA_IN_IO_FLG_MASK 0x1
  598. #define RDMA_SQ_RDMA_WQE_DIF_LAST_RDMA_IN_IO_FLG_SHIFT 2
  599. #define RDMA_SQ_RDMA_WQE_RESERVED1_MASK 0x1F
  600. #define RDMA_SQ_RDMA_WQE_RESERVED1_SHIFT 3
  601. u8 reserved2[3];
  602. };
  603. /* First element (16 bytes) of rdma wqe */
  604. struct rdma_sq_rdma_wqe_1st {
  605. __le32 imm_data;
  606. __le32 length;
  607. __le32 xrc_srq;
  608. u8 req_type;
  609. u8 flags;
  610. #define RDMA_SQ_RDMA_WQE_1ST_COMP_FLG_MASK 0x1
  611. #define RDMA_SQ_RDMA_WQE_1ST_COMP_FLG_SHIFT 0
  612. #define RDMA_SQ_RDMA_WQE_1ST_RD_FENCE_FLG_MASK 0x1
  613. #define RDMA_SQ_RDMA_WQE_1ST_RD_FENCE_FLG_SHIFT 1
  614. #define RDMA_SQ_RDMA_WQE_1ST_INV_FENCE_FLG_MASK 0x1
  615. #define RDMA_SQ_RDMA_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  616. #define RDMA_SQ_RDMA_WQE_1ST_SE_FLG_MASK 0x1
  617. #define RDMA_SQ_RDMA_WQE_1ST_SE_FLG_SHIFT 3
  618. #define RDMA_SQ_RDMA_WQE_1ST_INLINE_FLG_MASK 0x1
  619. #define RDMA_SQ_RDMA_WQE_1ST_INLINE_FLG_SHIFT 4
  620. #define RDMA_SQ_RDMA_WQE_1ST_DIF_ON_HOST_FLG_MASK 0x1
  621. #define RDMA_SQ_RDMA_WQE_1ST_DIF_ON_HOST_FLG_SHIFT 5
  622. #define RDMA_SQ_RDMA_WQE_1ST_RESERVED0_MASK 0x3
  623. #define RDMA_SQ_RDMA_WQE_1ST_RESERVED0_SHIFT 6
  624. u8 wqe_size;
  625. u8 prev_wqe_size;
  626. };
  627. /* Second element (16 bytes) of rdma wqe */
  628. struct rdma_sq_rdma_wqe_2nd {
  629. struct regpair remote_va;
  630. __le32 r_key;
  631. u8 dif_flags;
  632. #define RDMA_SQ_RDMA_WQE_2ND_DIF_BLOCK_SIZE_MASK 0x1
  633. #define RDMA_SQ_RDMA_WQE_2ND_DIF_BLOCK_SIZE_SHIFT 0
  634. #define RDMA_SQ_RDMA_WQE_2ND_DIF_FIRST_SEGMENT_FLG_MASK 0x1
  635. #define RDMA_SQ_RDMA_WQE_2ND_DIF_FIRST_SEGMENT_FLG_SHIFT 1
  636. #define RDMA_SQ_RDMA_WQE_2ND_DIF_LAST_SEGMENT_FLG_MASK 0x1
  637. #define RDMA_SQ_RDMA_WQE_2ND_DIF_LAST_SEGMENT_FLG_SHIFT 2
  638. #define RDMA_SQ_RDMA_WQE_2ND_RESERVED1_MASK 0x1F
  639. #define RDMA_SQ_RDMA_WQE_2ND_RESERVED1_SHIFT 3
  640. u8 reserved2[3];
  641. };
  642. /* SQ WQE req type enumeration */
  643. enum rdma_sq_req_type {
  644. RDMA_SQ_REQ_TYPE_SEND,
  645. RDMA_SQ_REQ_TYPE_SEND_WITH_IMM,
  646. RDMA_SQ_REQ_TYPE_SEND_WITH_INVALIDATE,
  647. RDMA_SQ_REQ_TYPE_RDMA_WR,
  648. RDMA_SQ_REQ_TYPE_RDMA_WR_WITH_IMM,
  649. RDMA_SQ_REQ_TYPE_RDMA_RD,
  650. RDMA_SQ_REQ_TYPE_ATOMIC_CMP_AND_SWAP,
  651. RDMA_SQ_REQ_TYPE_ATOMIC_ADD,
  652. RDMA_SQ_REQ_TYPE_LOCAL_INVALIDATE,
  653. RDMA_SQ_REQ_TYPE_FAST_MR,
  654. RDMA_SQ_REQ_TYPE_BIND,
  655. RDMA_SQ_REQ_TYPE_INVALID,
  656. MAX_RDMA_SQ_REQ_TYPE
  657. };
  658. struct rdma_sq_send_wqe {
  659. __le32 inv_key_or_imm_data;
  660. __le32 length;
  661. __le32 xrc_srq;
  662. u8 req_type;
  663. u8 flags;
  664. #define RDMA_SQ_SEND_WQE_COMP_FLG_MASK 0x1
  665. #define RDMA_SQ_SEND_WQE_COMP_FLG_SHIFT 0
  666. #define RDMA_SQ_SEND_WQE_RD_FENCE_FLG_MASK 0x1
  667. #define RDMA_SQ_SEND_WQE_RD_FENCE_FLG_SHIFT 1
  668. #define RDMA_SQ_SEND_WQE_INV_FENCE_FLG_MASK 0x1
  669. #define RDMA_SQ_SEND_WQE_INV_FENCE_FLG_SHIFT 2
  670. #define RDMA_SQ_SEND_WQE_SE_FLG_MASK 0x1
  671. #define RDMA_SQ_SEND_WQE_SE_FLG_SHIFT 3
  672. #define RDMA_SQ_SEND_WQE_INLINE_FLG_MASK 0x1
  673. #define RDMA_SQ_SEND_WQE_INLINE_FLG_SHIFT 4
  674. #define RDMA_SQ_SEND_WQE_DIF_ON_HOST_FLG_MASK 0x1
  675. #define RDMA_SQ_SEND_WQE_DIF_ON_HOST_FLG_SHIFT 5
  676. #define RDMA_SQ_SEND_WQE_RESERVED0_MASK 0x3
  677. #define RDMA_SQ_SEND_WQE_RESERVED0_SHIFT 6
  678. u8 wqe_size;
  679. u8 prev_wqe_size;
  680. __le32 reserved1[4];
  681. };
  682. struct rdma_sq_send_wqe_1st {
  683. __le32 inv_key_or_imm_data;
  684. __le32 length;
  685. __le32 xrc_srq;
  686. u8 req_type;
  687. u8 flags;
  688. #define RDMA_SQ_SEND_WQE_1ST_COMP_FLG_MASK 0x1
  689. #define RDMA_SQ_SEND_WQE_1ST_COMP_FLG_SHIFT 0
  690. #define RDMA_SQ_SEND_WQE_1ST_RD_FENCE_FLG_MASK 0x1
  691. #define RDMA_SQ_SEND_WQE_1ST_RD_FENCE_FLG_SHIFT 1
  692. #define RDMA_SQ_SEND_WQE_1ST_INV_FENCE_FLG_MASK 0x1
  693. #define RDMA_SQ_SEND_WQE_1ST_INV_FENCE_FLG_SHIFT 2
  694. #define RDMA_SQ_SEND_WQE_1ST_SE_FLG_MASK 0x1
  695. #define RDMA_SQ_SEND_WQE_1ST_SE_FLG_SHIFT 3
  696. #define RDMA_SQ_SEND_WQE_1ST_INLINE_FLG_MASK 0x1
  697. #define RDMA_SQ_SEND_WQE_1ST_INLINE_FLG_SHIFT 4
  698. #define RDMA_SQ_SEND_WQE_1ST_RESERVED0_MASK 0x7
  699. #define RDMA_SQ_SEND_WQE_1ST_RESERVED0_SHIFT 5
  700. u8 wqe_size;
  701. u8 prev_wqe_size;
  702. };
  703. struct rdma_sq_send_wqe_2st {
  704. __le32 reserved1[4];
  705. };
  706. #endif /* __QED_HSI_RDMA__ */