qedr_hsi_rdma.h 25 KB

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