hns_roce_hw_v1.h 33 KB

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