hns_roce_hw_v1.h 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111
  1. /*
  2. * Copyright (c) 2016 Hisilicon Limited.
  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 _HNS_ROCE_HW_V1_H
  33. #define _HNS_ROCE_HW_V1_H
  34. #define CQ_STATE_VALID 2
  35. #define HNS_ROCE_V1_MAX_PD_NUM 0x8000
  36. #define HNS_ROCE_V1_MAX_CQ_NUM 0x10000
  37. #define HNS_ROCE_V1_MAX_CQE_NUM 0x8000
  38. #define HNS_ROCE_V1_MAX_QP_NUM 0x40000
  39. #define HNS_ROCE_V1_MAX_WQE_NUM 0x4000
  40. #define HNS_ROCE_V1_MAX_MTPT_NUM 0x80000
  41. #define HNS_ROCE_V1_MAX_MTT_SEGS 0x100000
  42. #define HNS_ROCE_V1_MAX_QP_INIT_RDMA 128
  43. #define HNS_ROCE_V1_MAX_QP_DEST_RDMA 128
  44. #define HNS_ROCE_V1_MAX_SQ_DESC_SZ 64
  45. #define HNS_ROCE_V1_MAX_RQ_DESC_SZ 64
  46. #define HNS_ROCE_V1_SG_NUM 2
  47. #define HNS_ROCE_V1_INLINE_SIZE 32
  48. #define HNS_ROCE_V1_UAR_NUM 256
  49. #define HNS_ROCE_V1_PHY_UAR_NUM 8
  50. #define HNS_ROCE_V1_GID_NUM 16
  51. #define HNS_ROCE_V1_RESV_QP 8
  52. #define HNS_ROCE_V1_MAX_IRQ_NUM 34
  53. #define HNS_ROCE_V1_COMP_VEC_NUM 32
  54. #define HNS_ROCE_V1_AEQE_VEC_NUM 1
  55. #define HNS_ROCE_V1_ABNORMAL_VEC_NUM 1
  56. #define HNS_ROCE_V1_COMP_EQE_NUM 0x8000
  57. #define HNS_ROCE_V1_ASYNC_EQE_NUM 0x400
  58. #define HNS_ROCE_V1_QPC_ENTRY_SIZE 256
  59. #define HNS_ROCE_V1_IRRL_ENTRY_SIZE 8
  60. #define HNS_ROCE_V1_CQC_ENTRY_SIZE 64
  61. #define HNS_ROCE_V1_MTPT_ENTRY_SIZE 64
  62. #define HNS_ROCE_V1_MTT_ENTRY_SIZE 64
  63. #define HNS_ROCE_V1_CQE_ENTRY_SIZE 32
  64. #define HNS_ROCE_V1_PAGE_SIZE_SUPPORT 0xFFFFF000
  65. #define HNS_ROCE_V1_TABLE_CHUNK_SIZE (1 << 17)
  66. #define HNS_ROCE_V1_EXT_RAQ_WF 8
  67. #define HNS_ROCE_V1_RAQ_ENTRY 64
  68. #define HNS_ROCE_V1_RAQ_DEPTH 32768
  69. #define HNS_ROCE_V1_RAQ_SIZE (HNS_ROCE_V1_RAQ_ENTRY * HNS_ROCE_V1_RAQ_DEPTH)
  70. #define HNS_ROCE_V1_SDB_DEPTH 0x400
  71. #define HNS_ROCE_V1_ODB_DEPTH 0x400
  72. #define HNS_ROCE_V1_DB_RSVD 0x80
  73. #define HNS_ROCE_V1_SDB_ALEPT HNS_ROCE_V1_DB_RSVD
  74. #define HNS_ROCE_V1_SDB_ALFUL (HNS_ROCE_V1_SDB_DEPTH - HNS_ROCE_V1_DB_RSVD)
  75. #define HNS_ROCE_V1_ODB_ALEPT HNS_ROCE_V1_DB_RSVD
  76. #define HNS_ROCE_V1_ODB_ALFUL (HNS_ROCE_V1_ODB_DEPTH - HNS_ROCE_V1_DB_RSVD)
  77. #define HNS_ROCE_V1_EXT_SDB_DEPTH 0x4000
  78. #define HNS_ROCE_V1_EXT_ODB_DEPTH 0x4000
  79. #define HNS_ROCE_V1_EXT_SDB_ENTRY 16
  80. #define HNS_ROCE_V1_EXT_ODB_ENTRY 16
  81. #define HNS_ROCE_V1_EXT_SDB_SIZE \
  82. (HNS_ROCE_V1_EXT_SDB_DEPTH * HNS_ROCE_V1_EXT_SDB_ENTRY)
  83. #define HNS_ROCE_V1_EXT_ODB_SIZE \
  84. (HNS_ROCE_V1_EXT_ODB_DEPTH * HNS_ROCE_V1_EXT_ODB_ENTRY)
  85. #define HNS_ROCE_V1_EXT_SDB_ALEPT HNS_ROCE_V1_DB_RSVD
  86. #define HNS_ROCE_V1_EXT_SDB_ALFUL \
  87. (HNS_ROCE_V1_EXT_SDB_DEPTH - HNS_ROCE_V1_DB_RSVD)
  88. #define HNS_ROCE_V1_EXT_ODB_ALEPT HNS_ROCE_V1_DB_RSVD
  89. #define HNS_ROCE_V1_EXT_ODB_ALFUL \
  90. (HNS_ROCE_V1_EXT_ODB_DEPTH - HNS_ROCE_V1_DB_RSVD)
  91. #define HNS_ROCE_V1_DB_WAIT_OK 0
  92. #define HNS_ROCE_V1_DB_STAGE1 1
  93. #define HNS_ROCE_V1_DB_STAGE2 2
  94. #define HNS_ROCE_V1_CHECK_DB_TIMEOUT_MSECS 10000
  95. #define HNS_ROCE_V1_CHECK_DB_SLEEP_MSECS 20
  96. #define HNS_ROCE_V1_FREE_MR_TIMEOUT_MSECS 50000
  97. #define HNS_ROCE_V1_RECREATE_LP_QP_TIMEOUT_MSECS 10000
  98. #define HNS_ROCE_V1_FREE_MR_WAIT_VALUE 5
  99. #define HNS_ROCE_V1_RECREATE_LP_QP_WAIT_VALUE 20
  100. #define HNS_ROCE_BT_RSV_BUF_SIZE (1 << 17)
  101. #define HNS_ROCE_V1_TPTR_ENTRY_SIZE 2
  102. #define HNS_ROCE_V1_TPTR_BUF_SIZE \
  103. (HNS_ROCE_V1_TPTR_ENTRY_SIZE * HNS_ROCE_V1_MAX_CQ_NUM)
  104. #define HNS_ROCE_ODB_POLL_MODE 0
  105. #define HNS_ROCE_SDB_NORMAL_MODE 0
  106. #define HNS_ROCE_SDB_EXTEND_MODE 1
  107. #define HNS_ROCE_ODB_EXTEND_MODE 1
  108. #define KEY_VALID 0x02
  109. #define HNS_ROCE_CQE_QPN_MASK 0x3ffff
  110. #define HNS_ROCE_CQE_STATUS_MASK 0x1f
  111. #define HNS_ROCE_CQE_OPCODE_MASK 0xf
  112. #define HNS_ROCE_CQE_SUCCESS 0x00
  113. #define HNS_ROCE_CQE_SYNDROME_LOCAL_LENGTH_ERR 0x01
  114. #define HNS_ROCE_CQE_SYNDROME_LOCAL_QP_OP_ERR 0x02
  115. #define HNS_ROCE_CQE_SYNDROME_LOCAL_PROT_ERR 0x03
  116. #define HNS_ROCE_CQE_SYNDROME_WR_FLUSH_ERR 0x04
  117. #define HNS_ROCE_CQE_SYNDROME_MEM_MANAGE_OPERATE_ERR 0x05
  118. #define HNS_ROCE_CQE_SYNDROME_BAD_RESP_ERR 0x06
  119. #define HNS_ROCE_CQE_SYNDROME_LOCAL_ACCESS_ERR 0x07
  120. #define HNS_ROCE_CQE_SYNDROME_REMOTE_INVAL_REQ_ERR 0x08
  121. #define HNS_ROCE_CQE_SYNDROME_REMOTE_ACCESS_ERR 0x09
  122. #define HNS_ROCE_CQE_SYNDROME_REMOTE_OP_ERR 0x0a
  123. #define HNS_ROCE_CQE_SYNDROME_TRANSPORT_RETRY_EXC_ERR 0x0b
  124. #define HNS_ROCE_CQE_SYNDROME_RNR_RETRY_EXC_ERR 0x0c
  125. #define QP1C_CFGN_OFFSET 0x28
  126. #define PHY_PORT_OFFSET 0x8
  127. #define MTPT_IDX_SHIFT 16
  128. #define ALL_PORT_VAL_OPEN 0x3f
  129. #define POL_TIME_INTERVAL_VAL 0x80
  130. #define SLEEP_TIME_INTERVAL 20
  131. #define SQ_PSN_SHIFT 8
  132. #define QKEY_VAL 0x80010000
  133. #define SDB_INV_CNT_OFFSET 8
  134. #define SDB_ST_CMP_VAL 8
  135. #define HNS_ROCE_CEQ_DEFAULT_INTERVAL 0x10
  136. #define HNS_ROCE_CEQ_DEFAULT_BURST_NUM 0x10
  137. #define HNS_ROCE_INT_MASK_DISABLE 0
  138. #define HNS_ROCE_INT_MASK_ENABLE 1
  139. #define CEQ_REG_OFFSET 0x18
  140. #define HNS_ROCE_CEQE_CEQE_COMP_OWNER_S 0
  141. #define HNS_ROCE_V1_CONS_IDX_M GENMASK(15, 0)
  142. #define HNS_ROCE_CEQE_CEQE_COMP_CQN_S 16
  143. #define HNS_ROCE_CEQE_CEQE_COMP_CQN_M GENMASK(31, 16)
  144. #define HNS_ROCE_AEQE_U32_4_EVENT_TYPE_S 16
  145. #define HNS_ROCE_AEQE_U32_4_EVENT_TYPE_M GENMASK(23, 16)
  146. #define HNS_ROCE_AEQE_U32_4_EVENT_SUB_TYPE_S 24
  147. #define HNS_ROCE_AEQE_U32_4_EVENT_SUB_TYPE_M GENMASK(30, 24)
  148. #define HNS_ROCE_AEQE_U32_4_OWNER_S 31
  149. #define HNS_ROCE_AEQE_EVENT_QP_EVENT_QP_QPN_S 0
  150. #define HNS_ROCE_AEQE_EVENT_QP_EVENT_QP_QPN_M GENMASK(23, 0)
  151. #define HNS_ROCE_AEQE_EVENT_QP_EVENT_PORT_NUM_S 25
  152. #define HNS_ROCE_AEQE_EVENT_QP_EVENT_PORT_NUM_M GENMASK(27, 25)
  153. #define HNS_ROCE_AEQE_EVENT_CQ_EVENT_CQ_CQN_S 0
  154. #define HNS_ROCE_AEQE_EVENT_CQ_EVENT_CQ_CQN_M GENMASK(15, 0)
  155. #define HNS_ROCE_AEQE_EVENT_CE_EVENT_CEQE_CEQN_S 0
  156. #define HNS_ROCE_AEQE_EVENT_CE_EVENT_CEQE_CEQN_M GENMASK(4, 0)
  157. struct hns_roce_cq_context {
  158. __le32 cqc_byte_4;
  159. __le32 cq_bt_l;
  160. __le32 cqc_byte_12;
  161. __le32 cur_cqe_ba0_l;
  162. __le32 cqc_byte_20;
  163. __le32 cqe_tptr_addr_l;
  164. __le32 cur_cqe_ba1_l;
  165. __le32 cqc_byte_32;
  166. };
  167. #define CQ_CONTEXT_CQC_BYTE_4_CQC_STATE_S 0
  168. #define CQ_CONTEXT_CQC_BYTE_4_CQC_STATE_M \
  169. (((1UL << 2) - 1) << CQ_CONTEXT_CQC_BYTE_4_CQC_STATE_S)
  170. #define CQ_CONTEXT_CQC_BYTE_4_CQN_S 16
  171. #define CQ_CONTEXT_CQC_BYTE_4_CQN_M \
  172. (((1UL << 16) - 1) << CQ_CONTEXT_CQC_BYTE_4_CQN_S)
  173. #define CQ_CONTEXT_CQC_BYTE_12_CQ_BT_H_S 0
  174. #define CQ_CONTEXT_CQC_BYTE_12_CQ_BT_H_M \
  175. (((1UL << 17) - 1) << CQ_CONTEXT_CQC_BYTE_12_CQ_BT_H_S)
  176. #define CQ_CONTEXT_CQC_BYTE_12_CQ_CQE_SHIFT_S 20
  177. #define CQ_CONTEXT_CQC_BYTE_12_CQ_CQE_SHIFT_M \
  178. (((1UL << 4) - 1) << CQ_CONTEXT_CQC_BYTE_12_CQ_CQE_SHIFT_S)
  179. #define CQ_CONTEXT_CQC_BYTE_12_CEQN_S 24
  180. #define CQ_CONTEXT_CQC_BYTE_12_CEQN_M \
  181. (((1UL << 5) - 1) << CQ_CONTEXT_CQC_BYTE_12_CEQN_S)
  182. #define CQ_CONTEXT_CQC_BYTE_20_CUR_CQE_BA0_H_S 0
  183. #define CQ_CONTEXT_CQC_BYTE_20_CUR_CQE_BA0_H_M \
  184. (((1UL << 5) - 1) << CQ_CONTEXT_CQC_BYTE_20_CUR_CQE_BA0_H_S)
  185. #define CQ_CONTEXT_CQC_BYTE_20_CQ_CUR_INDEX_S 16
  186. #define CQ_CONTEXT_CQC_BYTE_20_CQ_CUR_INDEX_M \
  187. (((1UL << 16) - 1) << CQ_CONTEXT_CQC_BYTE_20_CQ_CUR_INDEX_S)
  188. #define CQ_CONTEXT_CQC_BYTE_20_CQE_TPTR_ADDR_H_S 8
  189. #define CQ_CONTEXT_CQC_BYTE_20_CQE_TPTR_ADDR_H_M \
  190. (((1UL << 5) - 1) << CQ_CONTEXT_CQC_BYTE_20_CQE_TPTR_ADDR_H_S)
  191. #define CQ_CONTEXT_CQC_BYTE_32_CUR_CQE_BA1_H_S 0
  192. #define CQ_CONTEXT_CQC_BYTE_32_CUR_CQE_BA1_H_M \
  193. (((1UL << 5) - 1) << CQ_CONTEXT_CQC_BYTE_32_CUR_CQE_BA1_H_S)
  194. #define CQ_CONTEXT_CQC_BYTE_32_SE_FLAG_S 9
  195. #define CQ_CONTEXT_CQC_BYTE_32_CE_FLAG_S 8
  196. #define CQ_CONTEXT_CQC_BYTE_32_NOTIFICATION_FLAG_S 14
  197. #define CQ_CQNTEXT_CQC_BYTE_32_TYPE_OF_COMPLETION_NOTIFICATION_S 15
  198. #define CQ_CONTEXT_CQC_BYTE_32_CQ_CONS_IDX_S 16
  199. #define CQ_CONTEXT_CQC_BYTE_32_CQ_CONS_IDX_M \
  200. (((1UL << 16) - 1) << CQ_CONTEXT_CQC_BYTE_32_CQ_CONS_IDX_S)
  201. struct hns_roce_cqe {
  202. __le32 cqe_byte_4;
  203. union {
  204. __le32 r_key;
  205. __le32 immediate_data;
  206. };
  207. __le32 byte_cnt;
  208. __le32 cqe_byte_16;
  209. __le32 cqe_byte_20;
  210. __le32 s_mac_l;
  211. __le32 cqe_byte_28;
  212. __le32 reserved;
  213. };
  214. #define CQE_BYTE_4_OWNER_S 7
  215. #define CQE_BYTE_4_SQ_RQ_FLAG_S 14
  216. #define CQE_BYTE_4_STATUS_OF_THE_OPERATION_S 8
  217. #define CQE_BYTE_4_STATUS_OF_THE_OPERATION_M \
  218. (((1UL << 5) - 1) << CQE_BYTE_4_STATUS_OF_THE_OPERATION_S)
  219. #define CQE_BYTE_4_WQE_INDEX_S 16
  220. #define CQE_BYTE_4_WQE_INDEX_M (((1UL << 14) - 1) << CQE_BYTE_4_WQE_INDEX_S)
  221. #define CQE_BYTE_4_OPERATION_TYPE_S 0
  222. #define CQE_BYTE_4_OPERATION_TYPE_M \
  223. (((1UL << 4) - 1) << CQE_BYTE_4_OPERATION_TYPE_S)
  224. #define CQE_BYTE_4_IMM_INDICATOR_S 15
  225. #define CQE_BYTE_16_LOCAL_QPN_S 0
  226. #define CQE_BYTE_16_LOCAL_QPN_M (((1UL << 24) - 1) << CQE_BYTE_16_LOCAL_QPN_S)
  227. #define CQE_BYTE_20_PORT_NUM_S 26
  228. #define CQE_BYTE_20_PORT_NUM_M (((1UL << 3) - 1) << CQE_BYTE_20_PORT_NUM_S)
  229. #define CQE_BYTE_20_SL_S 24
  230. #define CQE_BYTE_20_SL_M (((1UL << 2) - 1) << CQE_BYTE_20_SL_S)
  231. #define CQE_BYTE_20_REMOTE_QPN_S 0
  232. #define CQE_BYTE_20_REMOTE_QPN_M \
  233. (((1UL << 24) - 1) << CQE_BYTE_20_REMOTE_QPN_S)
  234. #define CQE_BYTE_20_GRH_PRESENT_S 29
  235. #define CQE_BYTE_28_P_KEY_IDX_S 16
  236. #define CQE_BYTE_28_P_KEY_IDX_M (((1UL << 16) - 1) << CQE_BYTE_28_P_KEY_IDX_S)
  237. #define CQ_DB_REQ_NOT_SOL 0
  238. #define CQ_DB_REQ_NOT (1 << 16)
  239. struct hns_roce_v1_mpt_entry {
  240. __le32 mpt_byte_4;
  241. __le32 pbl_addr_l;
  242. __le32 mpt_byte_12;
  243. __le32 virt_addr_l;
  244. __le32 virt_addr_h;
  245. __le32 length;
  246. __le32 mpt_byte_28;
  247. __le32 pa0_l;
  248. __le32 mpt_byte_36;
  249. __le32 mpt_byte_40;
  250. __le32 mpt_byte_44;
  251. __le32 mpt_byte_48;
  252. __le32 pa4_l;
  253. __le32 mpt_byte_56;
  254. __le32 mpt_byte_60;
  255. __le32 mpt_byte_64;
  256. };
  257. #define MPT_BYTE_4_KEY_STATE_S 0
  258. #define MPT_BYTE_4_KEY_STATE_M (((1UL << 2) - 1) << MPT_BYTE_4_KEY_STATE_S)
  259. #define MPT_BYTE_4_KEY_S 8
  260. #define MPT_BYTE_4_KEY_M (((1UL << 8) - 1) << MPT_BYTE_4_KEY_S)
  261. #define MPT_BYTE_4_PAGE_SIZE_S 16
  262. #define MPT_BYTE_4_PAGE_SIZE_M (((1UL << 2) - 1) << MPT_BYTE_4_PAGE_SIZE_S)
  263. #define MPT_BYTE_4_MW_TYPE_S 20
  264. #define MPT_BYTE_4_MW_BIND_ENABLE_S 21
  265. #define MPT_BYTE_4_OWN_S 22
  266. #define MPT_BYTE_4_MEMORY_LOCATION_TYPE_S 24
  267. #define MPT_BYTE_4_MEMORY_LOCATION_TYPE_M \
  268. (((1UL << 2) - 1) << MPT_BYTE_4_MEMORY_LOCATION_TYPE_S)
  269. #define MPT_BYTE_4_REMOTE_ATOMIC_S 26
  270. #define MPT_BYTE_4_LOCAL_WRITE_S 27
  271. #define MPT_BYTE_4_REMOTE_WRITE_S 28
  272. #define MPT_BYTE_4_REMOTE_READ_S 29
  273. #define MPT_BYTE_4_REMOTE_INVAL_ENABLE_S 30
  274. #define MPT_BYTE_4_ADDRESS_TYPE_S 31
  275. #define MPT_BYTE_12_PBL_ADDR_H_S 0
  276. #define MPT_BYTE_12_PBL_ADDR_H_M \
  277. (((1UL << 17) - 1) << MPT_BYTE_12_PBL_ADDR_H_S)
  278. #define MPT_BYTE_12_MW_BIND_COUNTER_S 17
  279. #define MPT_BYTE_12_MW_BIND_COUNTER_M \
  280. (((1UL << 15) - 1) << MPT_BYTE_12_MW_BIND_COUNTER_S)
  281. #define MPT_BYTE_28_PD_S 0
  282. #define MPT_BYTE_28_PD_M (((1UL << 16) - 1) << MPT_BYTE_28_PD_S)
  283. #define MPT_BYTE_28_L_KEY_IDX_L_S 16
  284. #define MPT_BYTE_28_L_KEY_IDX_L_M \
  285. (((1UL << 16) - 1) << MPT_BYTE_28_L_KEY_IDX_L_S)
  286. #define MPT_BYTE_36_PA0_H_S 0
  287. #define MPT_BYTE_36_PA0_H_M (((1UL << 5) - 1) << MPT_BYTE_36_PA0_H_S)
  288. #define MPT_BYTE_36_PA1_L_S 8
  289. #define MPT_BYTE_36_PA1_L_M (((1UL << 24) - 1) << MPT_BYTE_36_PA1_L_S)
  290. #define MPT_BYTE_40_PA1_H_S 0
  291. #define MPT_BYTE_40_PA1_H_M (((1UL << 13) - 1) << MPT_BYTE_40_PA1_H_S)
  292. #define MPT_BYTE_40_PA2_L_S 16
  293. #define MPT_BYTE_40_PA2_L_M (((1UL << 16) - 1) << MPT_BYTE_40_PA2_L_S)
  294. #define MPT_BYTE_44_PA2_H_S 0
  295. #define MPT_BYTE_44_PA2_H_M (((1UL << 21) - 1) << MPT_BYTE_44_PA2_H_S)
  296. #define MPT_BYTE_44_PA3_L_S 24
  297. #define MPT_BYTE_44_PA3_L_M (((1UL << 8) - 1) << MPT_BYTE_44_PA3_L_S)
  298. #define MPT_BYTE_48_PA3_H_S 0
  299. #define MPT_BYTE_48_PA3_H_M (((1UL << 29) - 1) << MPT_BYTE_48_PA3_H_S)
  300. #define MPT_BYTE_56_PA4_H_S 0
  301. #define MPT_BYTE_56_PA4_H_M (((1UL << 5) - 1) << MPT_BYTE_56_PA4_H_S)
  302. #define MPT_BYTE_56_PA5_L_S 8
  303. #define MPT_BYTE_56_PA5_L_M (((1UL << 24) - 1) << MPT_BYTE_56_PA5_L_S)
  304. #define MPT_BYTE_60_PA5_H_S 0
  305. #define MPT_BYTE_60_PA5_H_M (((1UL << 13) - 1) << MPT_BYTE_60_PA5_H_S)
  306. #define MPT_BYTE_60_PA6_L_S 16
  307. #define MPT_BYTE_60_PA6_L_M (((1UL << 16) - 1) << MPT_BYTE_60_PA6_L_S)
  308. #define MPT_BYTE_64_PA6_H_S 0
  309. #define MPT_BYTE_64_PA6_H_M (((1UL << 21) - 1) << MPT_BYTE_64_PA6_H_S)
  310. #define MPT_BYTE_64_L_KEY_IDX_H_S 24
  311. #define MPT_BYTE_64_L_KEY_IDX_H_M \
  312. (((1UL << 8) - 1) << MPT_BYTE_64_L_KEY_IDX_H_S)
  313. struct hns_roce_wqe_ctrl_seg {
  314. __le32 sgl_pa_h;
  315. __le32 flag;
  316. union {
  317. __be32 imm_data;
  318. __le32 inv_key;
  319. };
  320. __le32 msg_length;
  321. };
  322. struct hns_roce_wqe_data_seg {
  323. __le64 addr;
  324. __le32 lkey;
  325. __le32 len;
  326. };
  327. struct hns_roce_wqe_raddr_seg {
  328. __le32 rkey;
  329. __le32 len;/* reserved */
  330. __le64 raddr;
  331. };
  332. struct hns_roce_rq_wqe_ctrl {
  333. __le32 rwqe_byte_4;
  334. __le32 rocee_sgl_ba_l;
  335. __le32 rwqe_byte_12;
  336. __le32 reserved[5];
  337. };
  338. #define RQ_WQE_CTRL_RWQE_BYTE_12_RWQE_SGE_NUM_S 16
  339. #define RQ_WQE_CTRL_RWQE_BYTE_12_RWQE_SGE_NUM_M \
  340. (((1UL << 6) - 1) << RQ_WQE_CTRL_RWQE_BYTE_12_RWQE_SGE_NUM_S)
  341. #define HNS_ROCE_QP_DESTROY_TIMEOUT_MSECS 10000
  342. #define GID_LEN 16
  343. struct hns_roce_ud_send_wqe {
  344. __le32 dmac_h;
  345. __le32 u32_8;
  346. __le32 immediate_data;
  347. __le32 u32_16;
  348. union {
  349. unsigned char dgid[GID_LEN];
  350. struct {
  351. __le32 u32_20;
  352. __le32 u32_24;
  353. __le32 u32_28;
  354. __le32 u32_32;
  355. };
  356. };
  357. __le32 u32_36;
  358. __le32 u32_40;
  359. __le32 va0_l;
  360. __le32 va0_h;
  361. __le32 l_key0;
  362. __le32 va1_l;
  363. __le32 va1_h;
  364. __le32 l_key1;
  365. };
  366. #define UD_SEND_WQE_U32_4_DMAC_0_S 0
  367. #define UD_SEND_WQE_U32_4_DMAC_0_M \
  368. (((1UL << 8) - 1) << UD_SEND_WQE_U32_4_DMAC_0_S)
  369. #define UD_SEND_WQE_U32_4_DMAC_1_S 8
  370. #define UD_SEND_WQE_U32_4_DMAC_1_M \
  371. (((1UL << 8) - 1) << UD_SEND_WQE_U32_4_DMAC_1_S)
  372. #define UD_SEND_WQE_U32_4_DMAC_2_S 16
  373. #define UD_SEND_WQE_U32_4_DMAC_2_M \
  374. (((1UL << 8) - 1) << UD_SEND_WQE_U32_4_DMAC_2_S)
  375. #define UD_SEND_WQE_U32_4_DMAC_3_S 24
  376. #define UD_SEND_WQE_U32_4_DMAC_3_M \
  377. (((1UL << 8) - 1) << UD_SEND_WQE_U32_4_DMAC_3_S)
  378. #define UD_SEND_WQE_U32_8_DMAC_4_S 0
  379. #define UD_SEND_WQE_U32_8_DMAC_4_M \
  380. (((1UL << 8) - 1) << UD_SEND_WQE_U32_8_DMAC_4_S)
  381. #define UD_SEND_WQE_U32_8_DMAC_5_S 8
  382. #define UD_SEND_WQE_U32_8_DMAC_5_M \
  383. (((1UL << 8) - 1) << UD_SEND_WQE_U32_8_DMAC_5_S)
  384. #define UD_SEND_WQE_U32_8_LOOPBACK_INDICATOR_S 22
  385. #define UD_SEND_WQE_U32_8_OPERATION_TYPE_S 16
  386. #define UD_SEND_WQE_U32_8_OPERATION_TYPE_M \
  387. (((1UL << 4) - 1) << UD_SEND_WQE_U32_8_OPERATION_TYPE_S)
  388. #define UD_SEND_WQE_U32_8_NUMBER_OF_DATA_SEG_S 24
  389. #define UD_SEND_WQE_U32_8_NUMBER_OF_DATA_SEG_M \
  390. (((1UL << 6) - 1) << UD_SEND_WQE_U32_8_NUMBER_OF_DATA_SEG_S)
  391. #define UD_SEND_WQE_U32_8_SEND_GL_ROUTING_HDR_FLAG_S 31
  392. #define UD_SEND_WQE_U32_16_DEST_QP_S 0
  393. #define UD_SEND_WQE_U32_16_DEST_QP_M \
  394. (((1UL << 24) - 1) << UD_SEND_WQE_U32_16_DEST_QP_S)
  395. #define UD_SEND_WQE_U32_16_MAX_STATIC_RATE_S 24
  396. #define UD_SEND_WQE_U32_16_MAX_STATIC_RATE_M \
  397. (((1UL << 8) - 1) << UD_SEND_WQE_U32_16_MAX_STATIC_RATE_S)
  398. #define UD_SEND_WQE_U32_36_FLOW_LABEL_S 0
  399. #define UD_SEND_WQE_U32_36_FLOW_LABEL_M \
  400. (((1UL << 20) - 1) << UD_SEND_WQE_U32_36_FLOW_LABEL_S)
  401. #define UD_SEND_WQE_U32_36_PRIORITY_S 20
  402. #define UD_SEND_WQE_U32_36_PRIORITY_M \
  403. (((1UL << 4) - 1) << UD_SEND_WQE_U32_36_PRIORITY_S)
  404. #define UD_SEND_WQE_U32_36_SGID_INDEX_S 24
  405. #define UD_SEND_WQE_U32_36_SGID_INDEX_M \
  406. (((1UL << 8) - 1) << UD_SEND_WQE_U32_36_SGID_INDEX_S)
  407. #define UD_SEND_WQE_U32_40_HOP_LIMIT_S 0
  408. #define UD_SEND_WQE_U32_40_HOP_LIMIT_M \
  409. (((1UL << 8) - 1) << UD_SEND_WQE_U32_40_HOP_LIMIT_S)
  410. #define UD_SEND_WQE_U32_40_TRAFFIC_CLASS_S 8
  411. #define UD_SEND_WQE_U32_40_TRAFFIC_CLASS_M \
  412. (((1UL << 8) - 1) << UD_SEND_WQE_U32_40_TRAFFIC_CLASS_S)
  413. struct hns_roce_sqp_context {
  414. __le32 qp1c_bytes_4;
  415. __le32 sq_rq_bt_l;
  416. __le32 qp1c_bytes_12;
  417. __le32 qp1c_bytes_16;
  418. __le32 qp1c_bytes_20;
  419. __le32 cur_rq_wqe_ba_l;
  420. __le32 qp1c_bytes_28;
  421. __le32 qp1c_bytes_32;
  422. __le32 cur_sq_wqe_ba_l;
  423. __le32 qp1c_bytes_40;
  424. };
  425. #define QP1C_BYTES_4_QP_STATE_S 0
  426. #define QP1C_BYTES_4_QP_STATE_M \
  427. (((1UL << 3) - 1) << QP1C_BYTES_4_QP_STATE_S)
  428. #define QP1C_BYTES_4_SQ_WQE_SHIFT_S 8
  429. #define QP1C_BYTES_4_SQ_WQE_SHIFT_M \
  430. (((1UL << 4) - 1) << QP1C_BYTES_4_SQ_WQE_SHIFT_S)
  431. #define QP1C_BYTES_4_RQ_WQE_SHIFT_S 12
  432. #define QP1C_BYTES_4_RQ_WQE_SHIFT_M \
  433. (((1UL << 4) - 1) << QP1C_BYTES_4_RQ_WQE_SHIFT_S)
  434. #define QP1C_BYTES_4_PD_S 16
  435. #define QP1C_BYTES_4_PD_M (((1UL << 16) - 1) << QP1C_BYTES_4_PD_S)
  436. #define QP1C_BYTES_12_SQ_RQ_BT_H_S 0
  437. #define QP1C_BYTES_12_SQ_RQ_BT_H_M \
  438. (((1UL << 17) - 1) << QP1C_BYTES_12_SQ_RQ_BT_H_S)
  439. #define QP1C_BYTES_16_RQ_HEAD_S 0
  440. #define QP1C_BYTES_16_RQ_HEAD_M (((1UL << 15) - 1) << QP1C_BYTES_16_RQ_HEAD_S)
  441. #define QP1C_BYTES_16_PORT_NUM_S 16
  442. #define QP1C_BYTES_16_PORT_NUM_M \
  443. (((1UL << 3) - 1) << QP1C_BYTES_16_PORT_NUM_S)
  444. #define QP1C_BYTES_16_SIGNALING_TYPE_S 27
  445. #define QP1C_BYTES_16_LOCAL_ENABLE_E2E_CREDIT_S 28
  446. #define QP1C_BYTES_16_RQ_BA_FLG_S 29
  447. #define QP1C_BYTES_16_SQ_BA_FLG_S 30
  448. #define QP1C_BYTES_16_QP1_ERR_S 31
  449. #define QP1C_BYTES_20_SQ_HEAD_S 0
  450. #define QP1C_BYTES_20_SQ_HEAD_M (((1UL << 15) - 1) << QP1C_BYTES_20_SQ_HEAD_S)
  451. #define QP1C_BYTES_20_PKEY_IDX_S 16
  452. #define QP1C_BYTES_20_PKEY_IDX_M \
  453. (((1UL << 16) - 1) << QP1C_BYTES_20_PKEY_IDX_S)
  454. #define QP1C_BYTES_28_CUR_RQ_WQE_BA_H_S 0
  455. #define QP1C_BYTES_28_CUR_RQ_WQE_BA_H_M \
  456. (((1UL << 5) - 1) << QP1C_BYTES_28_CUR_RQ_WQE_BA_H_S)
  457. #define QP1C_BYTES_28_RQ_CUR_IDX_S 16
  458. #define QP1C_BYTES_28_RQ_CUR_IDX_M \
  459. (((1UL << 15) - 1) << QP1C_BYTES_28_RQ_CUR_IDX_S)
  460. #define QP1C_BYTES_32_TX_CQ_NUM_S 0
  461. #define QP1C_BYTES_32_TX_CQ_NUM_M \
  462. (((1UL << 16) - 1) << QP1C_BYTES_32_TX_CQ_NUM_S)
  463. #define QP1C_BYTES_32_RX_CQ_NUM_S 16
  464. #define QP1C_BYTES_32_RX_CQ_NUM_M \
  465. (((1UL << 16) - 1) << QP1C_BYTES_32_RX_CQ_NUM_S)
  466. #define QP1C_BYTES_40_CUR_SQ_WQE_BA_H_S 0
  467. #define QP1C_BYTES_40_CUR_SQ_WQE_BA_H_M \
  468. (((1UL << 5) - 1) << QP1C_BYTES_40_CUR_SQ_WQE_BA_H_S)
  469. #define QP1C_BYTES_40_SQ_CUR_IDX_S 16
  470. #define QP1C_BYTES_40_SQ_CUR_IDX_M \
  471. (((1UL << 15) - 1) << QP1C_BYTES_40_SQ_CUR_IDX_S)
  472. #define HNS_ROCE_WQE_INLINE (1UL<<31)
  473. #define HNS_ROCE_WQE_SE (1UL<<30)
  474. #define HNS_ROCE_WQE_SGE_NUM_BIT 24
  475. #define HNS_ROCE_WQE_IMM (1UL<<23)
  476. #define HNS_ROCE_WQE_FENCE (1UL<<21)
  477. #define HNS_ROCE_WQE_CQ_NOTIFY (1UL<<20)
  478. #define HNS_ROCE_WQE_OPCODE_SEND (0<<16)
  479. #define HNS_ROCE_WQE_OPCODE_RDMA_READ (1<<16)
  480. #define HNS_ROCE_WQE_OPCODE_RDMA_WRITE (2<<16)
  481. #define HNS_ROCE_WQE_OPCODE_LOCAL_INV (4<<16)
  482. #define HNS_ROCE_WQE_OPCODE_UD_SEND (7<<16)
  483. #define HNS_ROCE_WQE_OPCODE_MASK (15<<16)
  484. struct hns_roce_qp_context {
  485. __le32 qpc_bytes_4;
  486. __le32 qpc_bytes_8;
  487. __le32 qpc_bytes_12;
  488. __le32 qpc_bytes_16;
  489. __le32 sq_rq_bt_l;
  490. __le32 qpc_bytes_24;
  491. __le32 irrl_ba_l;
  492. __le32 qpc_bytes_32;
  493. __le32 qpc_bytes_36;
  494. __le32 dmac_l;
  495. __le32 qpc_bytes_44;
  496. __le32 qpc_bytes_48;
  497. u8 dgid[16];
  498. __le32 qpc_bytes_68;
  499. __le32 cur_rq_wqe_ba_l;
  500. __le32 qpc_bytes_76;
  501. __le32 rx_rnr_time;
  502. __le32 qpc_bytes_84;
  503. __le32 qpc_bytes_88;
  504. union {
  505. __le32 rx_sge_len;
  506. __le32 dma_length;
  507. };
  508. union {
  509. __le32 rx_sge_num;
  510. __le32 rx_send_pktn;
  511. __le32 r_key;
  512. };
  513. __le32 va_l;
  514. __le32 va_h;
  515. __le32 qpc_bytes_108;
  516. __le32 qpc_bytes_112;
  517. __le32 rx_cur_sq_wqe_ba_l;
  518. __le32 qpc_bytes_120;
  519. __le32 qpc_bytes_124;
  520. __le32 qpc_bytes_128;
  521. __le32 qpc_bytes_132;
  522. __le32 qpc_bytes_136;
  523. __le32 qpc_bytes_140;
  524. __le32 qpc_bytes_144;
  525. __le32 qpc_bytes_148;
  526. union {
  527. __le32 rnr_retry;
  528. __le32 ack_time;
  529. };
  530. __le32 qpc_bytes_156;
  531. __le32 pkt_use_len;
  532. __le32 qpc_bytes_164;
  533. __le32 qpc_bytes_168;
  534. union {
  535. __le32 sge_use_len;
  536. __le32 pa_use_len;
  537. };
  538. __le32 qpc_bytes_176;
  539. __le32 qpc_bytes_180;
  540. __le32 tx_cur_sq_wqe_ba_l;
  541. __le32 qpc_bytes_188;
  542. __le32 rvd21;
  543. };
  544. #define QP_CONTEXT_QPC_BYTES_4_TRANSPORT_SERVICE_TYPE_S 0
  545. #define QP_CONTEXT_QPC_BYTES_4_TRANSPORT_SERVICE_TYPE_M \
  546. (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_4_TRANSPORT_SERVICE_TYPE_S)
  547. #define QP_CONTEXT_QPC_BYTE_4_ENABLE_FPMR_S 3
  548. #define QP_CONTEXT_QPC_BYTE_4_RDMA_READ_ENABLE_S 4
  549. #define QP_CONTEXT_QPC_BYTE_4_RDMA_WRITE_ENABLE_S 5
  550. #define QP_CONTEXT_QPC_BYTE_4_ATOMIC_OPERATION_ENABLE_S 6
  551. #define QP_CONTEXT_QPC_BYTE_4_RDMAR_USE_S 7
  552. #define QP_CONTEXT_QPC_BYTES_4_SQ_WQE_SHIFT_S 8
  553. #define QP_CONTEXT_QPC_BYTES_4_SQ_WQE_SHIFT_M \
  554. (((1UL << 4) - 1) << QP_CONTEXT_QPC_BYTES_4_SQ_WQE_SHIFT_S)
  555. #define QP_CONTEXT_QPC_BYTES_4_RQ_WQE_SHIFT_S 12
  556. #define QP_CONTEXT_QPC_BYTES_4_RQ_WQE_SHIFT_M \
  557. (((1UL << 4) - 1) << QP_CONTEXT_QPC_BYTES_4_RQ_WQE_SHIFT_S)
  558. #define QP_CONTEXT_QPC_BYTES_4_PD_S 16
  559. #define QP_CONTEXT_QPC_BYTES_4_PD_M \
  560. (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_4_PD_S)
  561. #define QP_CONTEXT_QPC_BYTES_8_TX_COMPLETION_S 0
  562. #define QP_CONTEXT_QPC_BYTES_8_TX_COMPLETION_M \
  563. (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_8_TX_COMPLETION_S)
  564. #define QP_CONTEXT_QPC_BYTES_8_RX_COMPLETION_S 16
  565. #define QP_CONTEXT_QPC_BYTES_8_RX_COMPLETION_M \
  566. (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_8_RX_COMPLETION_S)
  567. #define QP_CONTEXT_QPC_BYTES_12_SRQ_NUMBER_S 0
  568. #define QP_CONTEXT_QPC_BYTES_12_SRQ_NUMBER_M \
  569. (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_12_SRQ_NUMBER_S)
  570. #define QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_S 16
  571. #define QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_M \
  572. (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_12_P_KEY_INDEX_S)
  573. #define QP_CONTEXT_QPC_BYTES_16_QP_NUM_S 0
  574. #define QP_CONTEXT_QPC_BYTES_16_QP_NUM_M \
  575. (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_16_QP_NUM_S)
  576. #define QP_CONTEXT_QPC_BYTES_24_SQ_RQ_BT_H_S 0
  577. #define QP_CONTEXT_QPC_BYTES_24_SQ_RQ_BT_H_M \
  578. (((1UL << 17) - 1) << QP_CONTEXT_QPC_BYTES_24_SQ_RQ_BT_H_S)
  579. #define QP_CONTEXT_QPC_BYTES_24_MINIMUM_RNR_NAK_TIMER_S 18
  580. #define QP_CONTEXT_QPC_BYTES_24_MINIMUM_RNR_NAK_TIMER_M \
  581. (((1UL << 5) - 1) << QP_CONTEXT_QPC_BYTES_24_MINIMUM_RNR_NAK_TIMER_S)
  582. #define QP_CONTEXT_QPC_BYTE_24_REMOTE_ENABLE_E2E_CREDITS_S 23
  583. #define QP_CONTEXT_QPC_BYTES_32_IRRL_BA_H_S 0
  584. #define QP_CONTEXT_QPC_BYTES_32_IRRL_BA_H_M \
  585. (((1UL << 17) - 1) << QP_CONTEXT_QPC_BYTES_32_IRRL_BA_H_S)
  586. #define QP_CONTEXT_QPC_BYTES_32_MIG_STATE_S 18
  587. #define QP_CONTEXT_QPC_BYTES_32_MIG_STATE_M \
  588. (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_32_MIG_STATE_S)
  589. #define QP_CONTEXT_QPC_BYTE_32_LOCAL_ENABLE_E2E_CREDITS_S 20
  590. #define QP_CONTEXT_QPC_BYTE_32_SIGNALING_TYPE_S 21
  591. #define QP_CONTEXT_QPC_BYTE_32_LOOPBACK_INDICATOR_S 22
  592. #define QP_CONTEXT_QPC_BYTE_32_GLOBAL_HEADER_S 23
  593. #define QP_CONTEXT_QPC_BYTES_32_RESPONDER_RESOURCES_S 24
  594. #define QP_CONTEXT_QPC_BYTES_32_RESPONDER_RESOURCES_M \
  595. (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_32_RESPONDER_RESOURCES_S)
  596. #define QP_CONTEXT_QPC_BYTES_36_DEST_QP_S 0
  597. #define QP_CONTEXT_QPC_BYTES_36_DEST_QP_M \
  598. (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_36_DEST_QP_S)
  599. #define QP_CONTEXT_QPC_BYTES_36_SGID_INDEX_S 24
  600. #define QP_CONTEXT_QPC_BYTES_36_SGID_INDEX_M \
  601. (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_36_SGID_INDEX_S)
  602. #define QP_CONTEXT_QPC_BYTES_44_DMAC_H_S 0
  603. #define QP_CONTEXT_QPC_BYTES_44_DMAC_H_M \
  604. (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_44_DMAC_H_S)
  605. #define QP_CONTEXT_QPC_BYTES_44_MAXIMUM_STATIC_RATE_S 16
  606. #define QP_CONTEXT_QPC_BYTES_44_MAXIMUM_STATIC_RATE_M \
  607. (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_44_MAXIMUM_STATIC_RATE_S)
  608. #define QP_CONTEXT_QPC_BYTES_44_HOPLMT_S 24
  609. #define QP_CONTEXT_QPC_BYTES_44_HOPLMT_M \
  610. (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_44_HOPLMT_S)
  611. #define QP_CONTEXT_QPC_BYTES_48_FLOWLABEL_S 0
  612. #define QP_CONTEXT_QPC_BYTES_48_FLOWLABEL_M \
  613. (((1UL << 20) - 1) << QP_CONTEXT_QPC_BYTES_48_FLOWLABEL_S)
  614. #define QP_CONTEXT_QPC_BYTES_48_TCLASS_S 20
  615. #define QP_CONTEXT_QPC_BYTES_48_TCLASS_M \
  616. (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_48_TCLASS_S)
  617. #define QP_CONTEXT_QPC_BYTES_48_MTU_S 28
  618. #define QP_CONTEXT_QPC_BYTES_48_MTU_M \
  619. (((1UL << 4) - 1) << QP_CONTEXT_QPC_BYTES_48_MTU_S)
  620. #define QP_CONTEXT_QPC_BYTES_68_RQ_HEAD_S 0
  621. #define QP_CONTEXT_QPC_BYTES_68_RQ_HEAD_M \
  622. (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_68_RQ_HEAD_S)
  623. #define QP_CONTEXT_QPC_BYTES_68_RQ_CUR_INDEX_S 16
  624. #define QP_CONTEXT_QPC_BYTES_68_RQ_CUR_INDEX_M \
  625. (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_68_RQ_CUR_INDEX_S)
  626. #define QP_CONTEXT_QPC_BYTES_76_CUR_RQ_WQE_BA_H_S 0
  627. #define QP_CONTEXT_QPC_BYTES_76_CUR_RQ_WQE_BA_H_M \
  628. (((1UL << 5) - 1) << QP_CONTEXT_QPC_BYTES_76_CUR_RQ_WQE_BA_H_S)
  629. #define QP_CONTEXT_QPC_BYTES_76_RX_REQ_MSN_S 8
  630. #define QP_CONTEXT_QPC_BYTES_76_RX_REQ_MSN_M \
  631. (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_76_RX_REQ_MSN_S)
  632. #define QP_CONTEXT_QPC_BYTES_84_LAST_ACK_PSN_S 0
  633. #define QP_CONTEXT_QPC_BYTES_84_LAST_ACK_PSN_M \
  634. (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_84_LAST_ACK_PSN_S)
  635. #define QP_CONTEXT_QPC_BYTES_84_TRRL_HEAD_S 24
  636. #define QP_CONTEXT_QPC_BYTES_84_TRRL_HEAD_M \
  637. (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_84_TRRL_HEAD_S)
  638. #define QP_CONTEXT_QPC_BYTES_88_RX_REQ_EPSN_S 0
  639. #define QP_CONTEXT_QPC_BYTES_88_RX_REQ_EPSN_M \
  640. (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_88_RX_REQ_EPSN_S)
  641. #define QP_CONTEXT_QPC_BYTES_88_RX_REQ_PSN_ERR_FLAG_S 24
  642. #define QP_CONTEXT_QPC_BYTES_88_RX_LAST_OPCODE_FLG_S 25
  643. #define QP_CONTEXT_QPC_BYTES_88_RQ_REQ_LAST_OPERATION_TYPE_S 26
  644. #define QP_CONTEXT_QPC_BYTES_88_RQ_REQ_LAST_OPERATION_TYPE_M \
  645. (((1UL << 2) - 1) << \
  646. QP_CONTEXT_QPC_BYTES_88_RQ_REQ_LAST_OPERATION_TYPE_S)
  647. #define QP_CONTEXT_QPC_BYTES_88_RQ_REQ_RDMA_WR_FLAG_S 29
  648. #define QP_CONTEXT_QPC_BYTES_88_RQ_REQ_RDMA_WR_FLAG_M \
  649. (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_88_RQ_REQ_RDMA_WR_FLAG_S)
  650. #define QP_CONTEXT_QPC_BYTES_108_TRRL_SDB_PSN_S 0
  651. #define QP_CONTEXT_QPC_BYTES_108_TRRL_SDB_PSN_M \
  652. (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_108_TRRL_SDB_PSN_S)
  653. #define QP_CONTEXT_QPC_BYTES_108_TRRL_SDB_PSN_FLG_S 24
  654. #define QP_CONTEXT_QPC_BYTES_108_TRRL_TDB_PSN_FLG_S 25
  655. #define QP_CONTEXT_QPC_BYTES_112_TRRL_TDB_PSN_S 0
  656. #define QP_CONTEXT_QPC_BYTES_112_TRRL_TDB_PSN_M \
  657. (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_112_TRRL_TDB_PSN_S)
  658. #define QP_CONTEXT_QPC_BYTES_112_TRRL_TAIL_S 24
  659. #define QP_CONTEXT_QPC_BYTES_112_TRRL_TAIL_M \
  660. (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_112_TRRL_TAIL_S)
  661. #define QP_CONTEXT_QPC_BYTES_120_RX_CUR_SQ_WQE_BA_H_S 0
  662. #define QP_CONTEXT_QPC_BYTES_120_RX_CUR_SQ_WQE_BA_H_M \
  663. (((1UL << 5) - 1) << QP_CONTEXT_QPC_BYTES_120_RX_CUR_SQ_WQE_BA_H_S)
  664. #define QP_CONTEXT_QPC_BYTES_124_RX_ACK_MSN_S 0
  665. #define QP_CONTEXT_QPC_BYTES_124_RX_ACK_MSN_M \
  666. (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_124_RX_ACK_MSN_S)
  667. #define QP_CONTEXT_QPC_BYTES_124_IRRL_MSG_IDX_S 16
  668. #define QP_CONTEXT_QPC_BYTES_124_IRRL_MSG_IDX_M \
  669. (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_124_IRRL_MSG_IDX_S)
  670. #define QP_CONTEXT_QPC_BYTES_128_RX_ACK_EPSN_S 0
  671. #define QP_CONTEXT_QPC_BYTES_128_RX_ACK_EPSN_M \
  672. (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_128_RX_ACK_EPSN_S)
  673. #define QP_CONTEXT_QPC_BYTES_128_RX_ACK_PSN_ERR_FLG_S 24
  674. #define QP_CONTEXT_QPC_BYTES_128_ACK_LAST_OPERATION_TYPE_S 25
  675. #define QP_CONTEXT_QPC_BYTES_128_ACK_LAST_OPERATION_TYPE_M \
  676. (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_128_ACK_LAST_OPERATION_TYPE_S)
  677. #define QP_CONTEXT_QPC_BYTES_128_IRRL_PSN_VLD_FLG_S 27
  678. #define QP_CONTEXT_QPC_BYTES_132_IRRL_PSN_S 0
  679. #define QP_CONTEXT_QPC_BYTES_132_IRRL_PSN_M \
  680. (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_132_IRRL_PSN_S)
  681. #define QP_CONTEXT_QPC_BYTES_132_IRRL_TAIL_S 24
  682. #define QP_CONTEXT_QPC_BYTES_132_IRRL_TAIL_M \
  683. (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_132_IRRL_TAIL_S)
  684. #define QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_PSN_S 0
  685. #define QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_PSN_M \
  686. (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_PSN_S)
  687. #define QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_FPKT_PSN_L_S 24
  688. #define QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_FPKT_PSN_L_M \
  689. (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_136_RETRY_MSG_FPKT_PSN_L_S)
  690. #define QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_FPKT_PSN_H_S 0
  691. #define QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_FPKT_PSN_H_M \
  692. (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_FPKT_PSN_H_S)
  693. #define QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_MSN_S 16
  694. #define QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_MSN_M \
  695. (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_140_RETRY_MSG_MSN_S)
  696. #define QP_CONTEXT_QPC_BYTES_140_RNR_RETRY_FLG_S 31
  697. #define QP_CONTEXT_QPC_BYTES_144_QP_STATE_S 0
  698. #define QP_CONTEXT_QPC_BYTES_144_QP_STATE_M \
  699. (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_144_QP_STATE_S)
  700. #define QP_CONTEXT_QPC_BYTES_148_CHECK_FLAG_S 0
  701. #define QP_CONTEXT_QPC_BYTES_148_CHECK_FLAG_M \
  702. (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_148_CHECK_FLAG_S)
  703. #define QP_CONTEXT_QPC_BYTES_148_RETRY_COUNT_S 2
  704. #define QP_CONTEXT_QPC_BYTES_148_RETRY_COUNT_M \
  705. (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_148_RETRY_COUNT_S)
  706. #define QP_CONTEXT_QPC_BYTES_148_RNR_RETRY_COUNT_S 5
  707. #define QP_CONTEXT_QPC_BYTES_148_RNR_RETRY_COUNT_M \
  708. (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_148_RNR_RETRY_COUNT_S)
  709. #define QP_CONTEXT_QPC_BYTES_148_LSN_S 8
  710. #define QP_CONTEXT_QPC_BYTES_148_LSN_M \
  711. (((1UL << 16) - 1) << QP_CONTEXT_QPC_BYTES_148_LSN_S)
  712. #define QP_CONTEXT_QPC_BYTES_156_RETRY_COUNT_INIT_S 0
  713. #define QP_CONTEXT_QPC_BYTES_156_RETRY_COUNT_INIT_M \
  714. (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_156_RETRY_COUNT_INIT_S)
  715. #define QP_CONTEXT_QPC_BYTES_156_ACK_TIMEOUT_S 3
  716. #define QP_CONTEXT_QPC_BYTES_156_ACK_TIMEOUT_M \
  717. (((1UL << 5) - 1) << QP_CONTEXT_QPC_BYTES_156_ACK_TIMEOUT_S)
  718. #define QP_CONTEXT_QPC_BYTES_156_RNR_RETRY_COUNT_INIT_S 8
  719. #define QP_CONTEXT_QPC_BYTES_156_RNR_RETRY_COUNT_INIT_M \
  720. (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_156_RNR_RETRY_COUNT_INIT_S)
  721. #define QP_CONTEXT_QPC_BYTES_156_PORT_NUM_S 11
  722. #define QP_CONTEXT_QPC_BYTES_156_PORT_NUM_M \
  723. (((1UL << 3) - 1) << QP_CONTEXT_QPC_BYTES_156_PORT_NUM_S)
  724. #define QP_CONTEXT_QPC_BYTES_156_SL_S 14
  725. #define QP_CONTEXT_QPC_BYTES_156_SL_M \
  726. (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_156_SL_S)
  727. #define QP_CONTEXT_QPC_BYTES_156_INITIATOR_DEPTH_S 16
  728. #define QP_CONTEXT_QPC_BYTES_156_INITIATOR_DEPTH_M \
  729. (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_156_INITIATOR_DEPTH_S)
  730. #define QP_CONTEXT_QPC_BYTES_156_ACK_REQ_IND_S 24
  731. #define QP_CONTEXT_QPC_BYTES_156_ACK_REQ_IND_M \
  732. (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_156_ACK_REQ_IND_S)
  733. #define QP_CONTEXT_QPC_BYTES_164_SQ_PSN_S 0
  734. #define QP_CONTEXT_QPC_BYTES_164_SQ_PSN_M \
  735. (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_164_SQ_PSN_S)
  736. #define QP_CONTEXT_QPC_BYTES_164_IRRL_HEAD_S 24
  737. #define QP_CONTEXT_QPC_BYTES_164_IRRL_HEAD_M \
  738. (((1UL << 8) - 1) << QP_CONTEXT_QPC_BYTES_164_IRRL_HEAD_S)
  739. #define QP_CONTEXT_QPC_BYTES_168_RETRY_SQ_PSN_S 0
  740. #define QP_CONTEXT_QPC_BYTES_168_RETRY_SQ_PSN_M \
  741. (((1UL << 24) - 1) << QP_CONTEXT_QPC_BYTES_168_RETRY_SQ_PSN_S)
  742. #define QP_CONTEXT_QPC_BYTES_168_SGE_USE_FLA_S 24
  743. #define QP_CONTEXT_QPC_BYTES_168_SGE_USE_FLA_M \
  744. (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_168_SGE_USE_FLA_S)
  745. #define QP_CONTEXT_QPC_BYTES_168_DB_TYPE_S 26
  746. #define QP_CONTEXT_QPC_BYTES_168_DB_TYPE_M \
  747. (((1UL << 2) - 1) << QP_CONTEXT_QPC_BYTES_168_DB_TYPE_S)
  748. #define QP_CONTEXT_QPC_BYTES_168_MSG_LP_IND_S 28
  749. #define QP_CONTEXT_QPC_BYTES_168_CSDB_LP_IND_S 29
  750. #define QP_CONTEXT_QPC_BYTES_168_QP_ERR_FLG_S 30
  751. #define QP_CONTEXT_QPC_BYTES_176_DB_CUR_INDEX_S 0
  752. #define QP_CONTEXT_QPC_BYTES_176_DB_CUR_INDEX_M \
  753. (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_176_DB_CUR_INDEX_S)
  754. #define QP_CONTEXT_QPC_BYTES_176_RETRY_DB_CUR_INDEX_S 16
  755. #define QP_CONTEXT_QPC_BYTES_176_RETRY_DB_CUR_INDEX_M \
  756. (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_176_RETRY_DB_CUR_INDEX_S)
  757. #define QP_CONTEXT_QPC_BYTES_180_SQ_HEAD_S 0
  758. #define QP_CONTEXT_QPC_BYTES_180_SQ_HEAD_M \
  759. (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_180_SQ_HEAD_S)
  760. #define QP_CONTEXT_QPC_BYTES_180_SQ_CUR_INDEX_S 16
  761. #define QP_CONTEXT_QPC_BYTES_180_SQ_CUR_INDEX_M \
  762. (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_180_SQ_CUR_INDEX_S)
  763. #define QP_CONTEXT_QPC_BYTES_188_TX_CUR_SQ_WQE_BA_H_S 0
  764. #define QP_CONTEXT_QPC_BYTES_188_TX_CUR_SQ_WQE_BA_H_M \
  765. (((1UL << 5) - 1) << QP_CONTEXT_QPC_BYTES_188_TX_CUR_SQ_WQE_BA_H_S)
  766. #define QP_CONTEXT_QPC_BYTES_188_PKT_RETRY_FLG_S 8
  767. #define QP_CONTEXT_QPC_BYTES_188_TX_RETRY_CUR_INDEX_S 16
  768. #define QP_CONTEXT_QPC_BYTES_188_TX_RETRY_CUR_INDEX_M \
  769. (((1UL << 15) - 1) << QP_CONTEXT_QPC_BYTES_188_TX_RETRY_CUR_INDEX_S)
  770. #define STATUS_MASK 0xff
  771. #define GO_BIT_TIMEOUT_MSECS 10000
  772. #define HCR_STATUS_OFFSET 0x18
  773. #define HCR_GO_BIT 15
  774. struct hns_roce_rq_db {
  775. __le32 u32_4;
  776. __le32 u32_8;
  777. };
  778. #define RQ_DOORBELL_U32_4_RQ_HEAD_S 0
  779. #define RQ_DOORBELL_U32_4_RQ_HEAD_M \
  780. (((1UL << 15) - 1) << RQ_DOORBELL_U32_4_RQ_HEAD_S)
  781. #define RQ_DOORBELL_U32_8_QPN_S 0
  782. #define RQ_DOORBELL_U32_8_QPN_M (((1UL << 24) - 1) << RQ_DOORBELL_U32_8_QPN_S)
  783. #define RQ_DOORBELL_U32_8_CMD_S 28
  784. #define RQ_DOORBELL_U32_8_CMD_M (((1UL << 3) - 1) << RQ_DOORBELL_U32_8_CMD_S)
  785. #define RQ_DOORBELL_U32_8_HW_SYNC_S 31
  786. struct hns_roce_sq_db {
  787. __le32 u32_4;
  788. __le32 u32_8;
  789. };
  790. #define SQ_DOORBELL_U32_4_SQ_HEAD_S 0
  791. #define SQ_DOORBELL_U32_4_SQ_HEAD_M \
  792. (((1UL << 15) - 1) << SQ_DOORBELL_U32_4_SQ_HEAD_S)
  793. #define SQ_DOORBELL_U32_4_SL_S 16
  794. #define SQ_DOORBELL_U32_4_SL_M \
  795. (((1UL << 2) - 1) << SQ_DOORBELL_U32_4_SL_S)
  796. #define SQ_DOORBELL_U32_4_PORT_S 18
  797. #define SQ_DOORBELL_U32_4_PORT_M (((1UL << 3) - 1) << SQ_DOORBELL_U32_4_PORT_S)
  798. #define SQ_DOORBELL_U32_8_QPN_S 0
  799. #define SQ_DOORBELL_U32_8_QPN_M (((1UL << 24) - 1) << SQ_DOORBELL_U32_8_QPN_S)
  800. #define SQ_DOORBELL_HW_SYNC_S 31
  801. struct hns_roce_ext_db {
  802. int esdb_dep;
  803. int eodb_dep;
  804. struct hns_roce_buf_list *sdb_buf_list;
  805. struct hns_roce_buf_list *odb_buf_list;
  806. };
  807. struct hns_roce_db_table {
  808. int sdb_ext_mod;
  809. int odb_ext_mod;
  810. struct hns_roce_ext_db *ext_db;
  811. };
  812. struct hns_roce_bt_table {
  813. struct hns_roce_buf_list qpc_buf;
  814. struct hns_roce_buf_list mtpt_buf;
  815. struct hns_roce_buf_list cqc_buf;
  816. };
  817. struct hns_roce_tptr_table {
  818. struct hns_roce_buf_list tptr_buf;
  819. };
  820. struct hns_roce_qp_work {
  821. struct work_struct work;
  822. struct ib_device *ib_dev;
  823. struct hns_roce_qp *qp;
  824. u32 db_wait_stage;
  825. u32 sdb_issue_ptr;
  826. u32 sdb_inv_cnt;
  827. u32 sche_cnt;
  828. };
  829. struct hns_roce_des_qp {
  830. struct workqueue_struct *qp_wq;
  831. int requeue_flag;
  832. };
  833. struct hns_roce_mr_free_work {
  834. struct work_struct work;
  835. struct ib_device *ib_dev;
  836. struct completion *comp;
  837. int comp_flag;
  838. void *mr;
  839. };
  840. struct hns_roce_recreate_lp_qp_work {
  841. struct work_struct work;
  842. struct ib_device *ib_dev;
  843. struct completion *comp;
  844. int comp_flag;
  845. };
  846. struct hns_roce_free_mr {
  847. struct workqueue_struct *free_mr_wq;
  848. struct hns_roce_qp *mr_free_qp[HNS_ROCE_V1_RESV_QP];
  849. struct hns_roce_cq *mr_free_cq;
  850. struct hns_roce_pd *mr_free_pd;
  851. };
  852. struct hns_roce_v1_priv {
  853. struct hns_roce_db_table db_table;
  854. struct hns_roce_raq_table raq_table;
  855. struct hns_roce_bt_table bt_table;
  856. struct hns_roce_tptr_table tptr_table;
  857. struct hns_roce_des_qp des_qp;
  858. struct hns_roce_free_mr free_mr;
  859. };
  860. int hns_dsaf_roce_reset(struct fwnode_handle *dsaf_fwnode, bool dereset);
  861. int hns_roce_v1_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc);
  862. int hns_roce_v1_destroy_qp(struct ib_qp *ibqp);
  863. #endif