rxe_opcode.c 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940
  1. // SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
  2. /*
  3. * Copyright (c) 2016 Mellanox Technologies Ltd. All rights reserved.
  4. * Copyright (c) 2015 System Fabric Works, Inc. All rights reserved.
  5. */
  6. #include <rdma/ib_pack.h>
  7. #include "rxe_opcode.h"
  8. #include "rxe_hdr.h"
  9. /* useful information about work request opcodes and pkt opcodes in
  10. * table form
  11. */
  12. struct rxe_wr_opcode_info rxe_wr_opcode_info[] = {
  13. [IB_WR_RDMA_WRITE] = {
  14. .name = "IB_WR_RDMA_WRITE",
  15. .mask = {
  16. [IB_QPT_RC] = WR_INLINE_MASK | WR_WRITE_MASK,
  17. [IB_QPT_UC] = WR_INLINE_MASK | WR_WRITE_MASK,
  18. },
  19. },
  20. [IB_WR_RDMA_WRITE_WITH_IMM] = {
  21. .name = "IB_WR_RDMA_WRITE_WITH_IMM",
  22. .mask = {
  23. [IB_QPT_RC] = WR_INLINE_MASK | WR_WRITE_MASK,
  24. [IB_QPT_UC] = WR_INLINE_MASK | WR_WRITE_MASK,
  25. },
  26. },
  27. [IB_WR_SEND] = {
  28. .name = "IB_WR_SEND",
  29. .mask = {
  30. [IB_QPT_GSI] = WR_INLINE_MASK | WR_SEND_MASK,
  31. [IB_QPT_RC] = WR_INLINE_MASK | WR_SEND_MASK,
  32. [IB_QPT_UC] = WR_INLINE_MASK | WR_SEND_MASK,
  33. [IB_QPT_UD] = WR_INLINE_MASK | WR_SEND_MASK,
  34. },
  35. },
  36. [IB_WR_SEND_WITH_IMM] = {
  37. .name = "IB_WR_SEND_WITH_IMM",
  38. .mask = {
  39. [IB_QPT_GSI] = WR_INLINE_MASK | WR_SEND_MASK,
  40. [IB_QPT_RC] = WR_INLINE_MASK | WR_SEND_MASK,
  41. [IB_QPT_UC] = WR_INLINE_MASK | WR_SEND_MASK,
  42. [IB_QPT_UD] = WR_INLINE_MASK | WR_SEND_MASK,
  43. },
  44. },
  45. [IB_WR_RDMA_READ] = {
  46. .name = "IB_WR_RDMA_READ",
  47. .mask = {
  48. [IB_QPT_RC] = WR_READ_MASK,
  49. },
  50. },
  51. [IB_WR_ATOMIC_CMP_AND_SWP] = {
  52. .name = "IB_WR_ATOMIC_CMP_AND_SWP",
  53. .mask = {
  54. [IB_QPT_RC] = WR_ATOMIC_MASK,
  55. },
  56. },
  57. [IB_WR_ATOMIC_FETCH_AND_ADD] = {
  58. .name = "IB_WR_ATOMIC_FETCH_AND_ADD",
  59. .mask = {
  60. [IB_QPT_RC] = WR_ATOMIC_MASK,
  61. },
  62. },
  63. [IB_WR_LSO] = {
  64. .name = "IB_WR_LSO",
  65. .mask = {
  66. /* not supported */
  67. },
  68. },
  69. [IB_WR_SEND_WITH_INV] = {
  70. .name = "IB_WR_SEND_WITH_INV",
  71. .mask = {
  72. [IB_QPT_RC] = WR_INLINE_MASK | WR_SEND_MASK,
  73. [IB_QPT_UC] = WR_INLINE_MASK | WR_SEND_MASK,
  74. [IB_QPT_UD] = WR_INLINE_MASK | WR_SEND_MASK,
  75. },
  76. },
  77. [IB_WR_RDMA_READ_WITH_INV] = {
  78. .name = "IB_WR_RDMA_READ_WITH_INV",
  79. .mask = {
  80. [IB_QPT_RC] = WR_READ_MASK,
  81. },
  82. },
  83. [IB_WR_LOCAL_INV] = {
  84. .name = "IB_WR_LOCAL_INV",
  85. .mask = {
  86. [IB_QPT_RC] = WR_LOCAL_OP_MASK,
  87. },
  88. },
  89. [IB_WR_REG_MR] = {
  90. .name = "IB_WR_REG_MR",
  91. .mask = {
  92. [IB_QPT_RC] = WR_LOCAL_OP_MASK,
  93. },
  94. },
  95. [IB_WR_BIND_MW] = {
  96. .name = "IB_WR_BIND_MW",
  97. .mask = {
  98. [IB_QPT_RC] = WR_LOCAL_OP_MASK,
  99. [IB_QPT_UC] = WR_LOCAL_OP_MASK,
  100. },
  101. },
  102. };
  103. struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = {
  104. [IB_OPCODE_RC_SEND_FIRST] = {
  105. .name = "IB_OPCODE_RC_SEND_FIRST",
  106. .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK |
  107. RXE_SEND_MASK | RXE_START_MASK,
  108. .length = RXE_BTH_BYTES,
  109. .offset = {
  110. [RXE_BTH] = 0,
  111. [RXE_PAYLOAD] = RXE_BTH_BYTES,
  112. }
  113. },
  114. [IB_OPCODE_RC_SEND_MIDDLE] = {
  115. .name = "IB_OPCODE_RC_SEND_MIDDLE",
  116. .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK |
  117. RXE_MIDDLE_MASK,
  118. .length = RXE_BTH_BYTES,
  119. .offset = {
  120. [RXE_BTH] = 0,
  121. [RXE_PAYLOAD] = RXE_BTH_BYTES,
  122. }
  123. },
  124. [IB_OPCODE_RC_SEND_LAST] = {
  125. .name = "IB_OPCODE_RC_SEND_LAST",
  126. .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
  127. RXE_SEND_MASK | RXE_END_MASK,
  128. .length = RXE_BTH_BYTES,
  129. .offset = {
  130. [RXE_BTH] = 0,
  131. [RXE_PAYLOAD] = RXE_BTH_BYTES,
  132. }
  133. },
  134. [IB_OPCODE_RC_SEND_LAST_WITH_IMMEDIATE] = {
  135. .name = "IB_OPCODE_RC_SEND_LAST_WITH_IMMEDIATE",
  136. .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  137. RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
  138. .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
  139. .offset = {
  140. [RXE_BTH] = 0,
  141. [RXE_IMMDT] = RXE_BTH_BYTES,
  142. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  143. RXE_IMMDT_BYTES,
  144. }
  145. },
  146. [IB_OPCODE_RC_SEND_ONLY] = {
  147. .name = "IB_OPCODE_RC_SEND_ONLY",
  148. .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
  149. RXE_RWR_MASK | RXE_SEND_MASK |
  150. RXE_START_MASK | RXE_END_MASK,
  151. .length = RXE_BTH_BYTES,
  152. .offset = {
  153. [RXE_BTH] = 0,
  154. [RXE_PAYLOAD] = RXE_BTH_BYTES,
  155. }
  156. },
  157. [IB_OPCODE_RC_SEND_ONLY_WITH_IMMEDIATE] = {
  158. .name = "IB_OPCODE_RC_SEND_ONLY_WITH_IMMEDIATE",
  159. .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  160. RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
  161. RXE_START_MASK | RXE_END_MASK,
  162. .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
  163. .offset = {
  164. [RXE_BTH] = 0,
  165. [RXE_IMMDT] = RXE_BTH_BYTES,
  166. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  167. RXE_IMMDT_BYTES,
  168. }
  169. },
  170. [IB_OPCODE_RC_RDMA_WRITE_FIRST] = {
  171. .name = "IB_OPCODE_RC_RDMA_WRITE_FIRST",
  172. .mask = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  173. RXE_WRITE_MASK | RXE_START_MASK,
  174. .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
  175. .offset = {
  176. [RXE_BTH] = 0,
  177. [RXE_RETH] = RXE_BTH_BYTES,
  178. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  179. RXE_RETH_BYTES,
  180. }
  181. },
  182. [IB_OPCODE_RC_RDMA_WRITE_MIDDLE] = {
  183. .name = "IB_OPCODE_RC_RDMA_WRITE_MIDDLE",
  184. .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
  185. RXE_MIDDLE_MASK,
  186. .length = RXE_BTH_BYTES,
  187. .offset = {
  188. [RXE_BTH] = 0,
  189. [RXE_PAYLOAD] = RXE_BTH_BYTES,
  190. }
  191. },
  192. [IB_OPCODE_RC_RDMA_WRITE_LAST] = {
  193. .name = "IB_OPCODE_RC_RDMA_WRITE_LAST",
  194. .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
  195. RXE_END_MASK,
  196. .length = RXE_BTH_BYTES,
  197. .offset = {
  198. [RXE_BTH] = 0,
  199. [RXE_PAYLOAD] = RXE_BTH_BYTES,
  200. }
  201. },
  202. [IB_OPCODE_RC_RDMA_WRITE_LAST_WITH_IMMEDIATE] = {
  203. .name = "IB_OPCODE_RC_RDMA_WRITE_LAST_WITH_IMMEDIATE",
  204. .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  205. RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
  206. RXE_END_MASK,
  207. .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
  208. .offset = {
  209. [RXE_BTH] = 0,
  210. [RXE_IMMDT] = RXE_BTH_BYTES,
  211. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  212. RXE_IMMDT_BYTES,
  213. }
  214. },
  215. [IB_OPCODE_RC_RDMA_WRITE_ONLY] = {
  216. .name = "IB_OPCODE_RC_RDMA_WRITE_ONLY",
  217. .mask = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  218. RXE_WRITE_MASK | RXE_START_MASK |
  219. RXE_END_MASK,
  220. .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
  221. .offset = {
  222. [RXE_BTH] = 0,
  223. [RXE_RETH] = RXE_BTH_BYTES,
  224. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  225. RXE_RETH_BYTES,
  226. }
  227. },
  228. [IB_OPCODE_RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE] = {
  229. .name = "IB_OPCODE_RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
  230. .mask = RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
  231. RXE_REQ_MASK | RXE_WRITE_MASK |
  232. RXE_COMP_MASK | RXE_RWR_MASK |
  233. RXE_START_MASK | RXE_END_MASK,
  234. .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES,
  235. .offset = {
  236. [RXE_BTH] = 0,
  237. [RXE_RETH] = RXE_BTH_BYTES,
  238. [RXE_IMMDT] = RXE_BTH_BYTES +
  239. RXE_RETH_BYTES,
  240. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  241. RXE_RETH_BYTES +
  242. RXE_IMMDT_BYTES,
  243. }
  244. },
  245. [IB_OPCODE_RC_RDMA_READ_REQUEST] = {
  246. .name = "IB_OPCODE_RC_RDMA_READ_REQUEST",
  247. .mask = RXE_RETH_MASK | RXE_REQ_MASK | RXE_READ_MASK |
  248. RXE_START_MASK | RXE_END_MASK,
  249. .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
  250. .offset = {
  251. [RXE_BTH] = 0,
  252. [RXE_RETH] = RXE_BTH_BYTES,
  253. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  254. RXE_RETH_BYTES,
  255. }
  256. },
  257. [IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST] = {
  258. .name = "IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST",
  259. .mask = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
  260. RXE_START_MASK,
  261. .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
  262. .offset = {
  263. [RXE_BTH] = 0,
  264. [RXE_AETH] = RXE_BTH_BYTES,
  265. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  266. RXE_AETH_BYTES,
  267. }
  268. },
  269. [IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE] = {
  270. .name = "IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE",
  271. .mask = RXE_PAYLOAD_MASK | RXE_ACK_MASK | RXE_MIDDLE_MASK,
  272. .length = RXE_BTH_BYTES,
  273. .offset = {
  274. [RXE_BTH] = 0,
  275. [RXE_PAYLOAD] = RXE_BTH_BYTES,
  276. }
  277. },
  278. [IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST] = {
  279. .name = "IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST",
  280. .mask = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
  281. RXE_END_MASK,
  282. .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
  283. .offset = {
  284. [RXE_BTH] = 0,
  285. [RXE_AETH] = RXE_BTH_BYTES,
  286. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  287. RXE_AETH_BYTES,
  288. }
  289. },
  290. [IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY] = {
  291. .name = "IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY",
  292. .mask = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
  293. RXE_START_MASK | RXE_END_MASK,
  294. .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
  295. .offset = {
  296. [RXE_BTH] = 0,
  297. [RXE_AETH] = RXE_BTH_BYTES,
  298. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  299. RXE_AETH_BYTES,
  300. }
  301. },
  302. [IB_OPCODE_RC_ACKNOWLEDGE] = {
  303. .name = "IB_OPCODE_RC_ACKNOWLEDGE",
  304. .mask = RXE_AETH_MASK | RXE_ACK_MASK | RXE_START_MASK |
  305. RXE_END_MASK,
  306. .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
  307. .offset = {
  308. [RXE_BTH] = 0,
  309. [RXE_AETH] = RXE_BTH_BYTES,
  310. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  311. RXE_AETH_BYTES,
  312. }
  313. },
  314. [IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE] = {
  315. .name = "IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE",
  316. .mask = RXE_AETH_MASK | RXE_ATMACK_MASK | RXE_ACK_MASK |
  317. RXE_START_MASK | RXE_END_MASK,
  318. .length = RXE_BTH_BYTES + RXE_ATMACK_BYTES + RXE_AETH_BYTES,
  319. .offset = {
  320. [RXE_BTH] = 0,
  321. [RXE_AETH] = RXE_BTH_BYTES,
  322. [RXE_ATMACK] = RXE_BTH_BYTES +
  323. RXE_AETH_BYTES,
  324. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  325. RXE_ATMACK_BYTES +
  326. RXE_AETH_BYTES,
  327. }
  328. },
  329. [IB_OPCODE_RC_COMPARE_SWAP] = {
  330. .name = "IB_OPCODE_RC_COMPARE_SWAP",
  331. .mask = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK |
  332. RXE_START_MASK | RXE_END_MASK,
  333. .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
  334. .offset = {
  335. [RXE_BTH] = 0,
  336. [RXE_ATMETH] = RXE_BTH_BYTES,
  337. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  338. RXE_ATMETH_BYTES,
  339. }
  340. },
  341. [IB_OPCODE_RC_FETCH_ADD] = {
  342. .name = "IB_OPCODE_RC_FETCH_ADD",
  343. .mask = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK |
  344. RXE_START_MASK | RXE_END_MASK,
  345. .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
  346. .offset = {
  347. [RXE_BTH] = 0,
  348. [RXE_ATMETH] = RXE_BTH_BYTES,
  349. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  350. RXE_ATMETH_BYTES,
  351. }
  352. },
  353. [IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE] = {
  354. .name = "IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE",
  355. .mask = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  356. RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
  357. .length = RXE_BTH_BYTES + RXE_IETH_BYTES,
  358. .offset = {
  359. [RXE_BTH] = 0,
  360. [RXE_IETH] = RXE_BTH_BYTES,
  361. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  362. RXE_IETH_BYTES,
  363. }
  364. },
  365. [IB_OPCODE_RC_SEND_ONLY_WITH_INVALIDATE] = {
  366. .name = "IB_OPCODE_RC_SEND_ONLY_INV",
  367. .mask = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  368. RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
  369. RXE_END_MASK | RXE_START_MASK,
  370. .length = RXE_BTH_BYTES + RXE_IETH_BYTES,
  371. .offset = {
  372. [RXE_BTH] = 0,
  373. [RXE_IETH] = RXE_BTH_BYTES,
  374. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  375. RXE_IETH_BYTES,
  376. }
  377. },
  378. /* UC */
  379. [IB_OPCODE_UC_SEND_FIRST] = {
  380. .name = "IB_OPCODE_UC_SEND_FIRST",
  381. .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK |
  382. RXE_SEND_MASK | RXE_START_MASK,
  383. .length = RXE_BTH_BYTES,
  384. .offset = {
  385. [RXE_BTH] = 0,
  386. [RXE_PAYLOAD] = RXE_BTH_BYTES,
  387. }
  388. },
  389. [IB_OPCODE_UC_SEND_MIDDLE] = {
  390. .name = "IB_OPCODE_UC_SEND_MIDDLE",
  391. .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK |
  392. RXE_MIDDLE_MASK,
  393. .length = RXE_BTH_BYTES,
  394. .offset = {
  395. [RXE_BTH] = 0,
  396. [RXE_PAYLOAD] = RXE_BTH_BYTES,
  397. }
  398. },
  399. [IB_OPCODE_UC_SEND_LAST] = {
  400. .name = "IB_OPCODE_UC_SEND_LAST",
  401. .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
  402. RXE_SEND_MASK | RXE_END_MASK,
  403. .length = RXE_BTH_BYTES,
  404. .offset = {
  405. [RXE_BTH] = 0,
  406. [RXE_PAYLOAD] = RXE_BTH_BYTES,
  407. }
  408. },
  409. [IB_OPCODE_UC_SEND_LAST_WITH_IMMEDIATE] = {
  410. .name = "IB_OPCODE_UC_SEND_LAST_WITH_IMMEDIATE",
  411. .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  412. RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
  413. .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
  414. .offset = {
  415. [RXE_BTH] = 0,
  416. [RXE_IMMDT] = RXE_BTH_BYTES,
  417. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  418. RXE_IMMDT_BYTES,
  419. }
  420. },
  421. [IB_OPCODE_UC_SEND_ONLY] = {
  422. .name = "IB_OPCODE_UC_SEND_ONLY",
  423. .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
  424. RXE_RWR_MASK | RXE_SEND_MASK |
  425. RXE_START_MASK | RXE_END_MASK,
  426. .length = RXE_BTH_BYTES,
  427. .offset = {
  428. [RXE_BTH] = 0,
  429. [RXE_PAYLOAD] = RXE_BTH_BYTES,
  430. }
  431. },
  432. [IB_OPCODE_UC_SEND_ONLY_WITH_IMMEDIATE] = {
  433. .name = "IB_OPCODE_UC_SEND_ONLY_WITH_IMMEDIATE",
  434. .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  435. RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
  436. RXE_START_MASK | RXE_END_MASK,
  437. .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
  438. .offset = {
  439. [RXE_BTH] = 0,
  440. [RXE_IMMDT] = RXE_BTH_BYTES,
  441. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  442. RXE_IMMDT_BYTES,
  443. }
  444. },
  445. [IB_OPCODE_UC_RDMA_WRITE_FIRST] = {
  446. .name = "IB_OPCODE_UC_RDMA_WRITE_FIRST",
  447. .mask = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  448. RXE_WRITE_MASK | RXE_START_MASK,
  449. .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
  450. .offset = {
  451. [RXE_BTH] = 0,
  452. [RXE_RETH] = RXE_BTH_BYTES,
  453. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  454. RXE_RETH_BYTES,
  455. }
  456. },
  457. [IB_OPCODE_UC_RDMA_WRITE_MIDDLE] = {
  458. .name = "IB_OPCODE_UC_RDMA_WRITE_MIDDLE",
  459. .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
  460. RXE_MIDDLE_MASK,
  461. .length = RXE_BTH_BYTES,
  462. .offset = {
  463. [RXE_BTH] = 0,
  464. [RXE_PAYLOAD] = RXE_BTH_BYTES,
  465. }
  466. },
  467. [IB_OPCODE_UC_RDMA_WRITE_LAST] = {
  468. .name = "IB_OPCODE_UC_RDMA_WRITE_LAST",
  469. .mask = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
  470. RXE_END_MASK,
  471. .length = RXE_BTH_BYTES,
  472. .offset = {
  473. [RXE_BTH] = 0,
  474. [RXE_PAYLOAD] = RXE_BTH_BYTES,
  475. }
  476. },
  477. [IB_OPCODE_UC_RDMA_WRITE_LAST_WITH_IMMEDIATE] = {
  478. .name = "IB_OPCODE_UC_RDMA_WRITE_LAST_WITH_IMMEDIATE",
  479. .mask = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  480. RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
  481. RXE_END_MASK,
  482. .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
  483. .offset = {
  484. [RXE_BTH] = 0,
  485. [RXE_IMMDT] = RXE_BTH_BYTES,
  486. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  487. RXE_IMMDT_BYTES,
  488. }
  489. },
  490. [IB_OPCODE_UC_RDMA_WRITE_ONLY] = {
  491. .name = "IB_OPCODE_UC_RDMA_WRITE_ONLY",
  492. .mask = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  493. RXE_WRITE_MASK | RXE_START_MASK |
  494. RXE_END_MASK,
  495. .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
  496. .offset = {
  497. [RXE_BTH] = 0,
  498. [RXE_RETH] = RXE_BTH_BYTES,
  499. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  500. RXE_RETH_BYTES,
  501. }
  502. },
  503. [IB_OPCODE_UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE] = {
  504. .name = "IB_OPCODE_UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
  505. .mask = RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
  506. RXE_REQ_MASK | RXE_WRITE_MASK |
  507. RXE_COMP_MASK | RXE_RWR_MASK |
  508. RXE_START_MASK | RXE_END_MASK,
  509. .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES,
  510. .offset = {
  511. [RXE_BTH] = 0,
  512. [RXE_RETH] = RXE_BTH_BYTES,
  513. [RXE_IMMDT] = RXE_BTH_BYTES +
  514. RXE_RETH_BYTES,
  515. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  516. RXE_RETH_BYTES +
  517. RXE_IMMDT_BYTES,
  518. }
  519. },
  520. /* RD */
  521. [IB_OPCODE_RD_SEND_FIRST] = {
  522. .name = "IB_OPCODE_RD_SEND_FIRST",
  523. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
  524. RXE_REQ_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
  525. RXE_START_MASK,
  526. .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
  527. .offset = {
  528. [RXE_BTH] = 0,
  529. [RXE_RDETH] = RXE_BTH_BYTES,
  530. [RXE_DETH] = RXE_BTH_BYTES +
  531. RXE_RDETH_BYTES,
  532. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  533. RXE_RDETH_BYTES +
  534. RXE_DETH_BYTES,
  535. }
  536. },
  537. [IB_OPCODE_RD_SEND_MIDDLE] = {
  538. .name = "IB_OPCODE_RD_SEND_MIDDLE",
  539. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
  540. RXE_REQ_MASK | RXE_SEND_MASK |
  541. RXE_MIDDLE_MASK,
  542. .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
  543. .offset = {
  544. [RXE_BTH] = 0,
  545. [RXE_RDETH] = RXE_BTH_BYTES,
  546. [RXE_DETH] = RXE_BTH_BYTES +
  547. RXE_RDETH_BYTES,
  548. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  549. RXE_RDETH_BYTES +
  550. RXE_DETH_BYTES,
  551. }
  552. },
  553. [IB_OPCODE_RD_SEND_LAST] = {
  554. .name = "IB_OPCODE_RD_SEND_LAST",
  555. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
  556. RXE_REQ_MASK | RXE_COMP_MASK | RXE_SEND_MASK |
  557. RXE_END_MASK,
  558. .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
  559. .offset = {
  560. [RXE_BTH] = 0,
  561. [RXE_RDETH] = RXE_BTH_BYTES,
  562. [RXE_DETH] = RXE_BTH_BYTES +
  563. RXE_RDETH_BYTES,
  564. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  565. RXE_RDETH_BYTES +
  566. RXE_DETH_BYTES,
  567. }
  568. },
  569. [IB_OPCODE_RD_SEND_LAST_WITH_IMMEDIATE] = {
  570. .name = "IB_OPCODE_RD_SEND_LAST_WITH_IMMEDIATE",
  571. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK |
  572. RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  573. RXE_COMP_MASK | RXE_SEND_MASK |
  574. RXE_END_MASK,
  575. .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES +
  576. RXE_RDETH_BYTES,
  577. .offset = {
  578. [RXE_BTH] = 0,
  579. [RXE_RDETH] = RXE_BTH_BYTES,
  580. [RXE_DETH] = RXE_BTH_BYTES +
  581. RXE_RDETH_BYTES,
  582. [RXE_IMMDT] = RXE_BTH_BYTES +
  583. RXE_RDETH_BYTES +
  584. RXE_DETH_BYTES,
  585. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  586. RXE_RDETH_BYTES +
  587. RXE_DETH_BYTES +
  588. RXE_IMMDT_BYTES,
  589. }
  590. },
  591. [IB_OPCODE_RD_SEND_ONLY] = {
  592. .name = "IB_OPCODE_RD_SEND_ONLY",
  593. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
  594. RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
  595. RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
  596. .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
  597. .offset = {
  598. [RXE_BTH] = 0,
  599. [RXE_RDETH] = RXE_BTH_BYTES,
  600. [RXE_DETH] = RXE_BTH_BYTES +
  601. RXE_RDETH_BYTES,
  602. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  603. RXE_RDETH_BYTES +
  604. RXE_DETH_BYTES,
  605. }
  606. },
  607. [IB_OPCODE_RD_SEND_ONLY_WITH_IMMEDIATE] = {
  608. .name = "IB_OPCODE_RD_SEND_ONLY_WITH_IMMEDIATE",
  609. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK |
  610. RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  611. RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
  612. RXE_START_MASK | RXE_END_MASK,
  613. .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES +
  614. RXE_RDETH_BYTES,
  615. .offset = {
  616. [RXE_BTH] = 0,
  617. [RXE_RDETH] = RXE_BTH_BYTES,
  618. [RXE_DETH] = RXE_BTH_BYTES +
  619. RXE_RDETH_BYTES,
  620. [RXE_IMMDT] = RXE_BTH_BYTES +
  621. RXE_RDETH_BYTES +
  622. RXE_DETH_BYTES,
  623. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  624. RXE_RDETH_BYTES +
  625. RXE_DETH_BYTES +
  626. RXE_IMMDT_BYTES,
  627. }
  628. },
  629. [IB_OPCODE_RD_RDMA_WRITE_FIRST] = {
  630. .name = "IB_OPCODE_RD_RDMA_WRITE_FIRST",
  631. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
  632. RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  633. RXE_WRITE_MASK | RXE_START_MASK,
  634. .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES +
  635. RXE_RDETH_BYTES,
  636. .offset = {
  637. [RXE_BTH] = 0,
  638. [RXE_RDETH] = RXE_BTH_BYTES,
  639. [RXE_DETH] = RXE_BTH_BYTES +
  640. RXE_RDETH_BYTES,
  641. [RXE_RETH] = RXE_BTH_BYTES +
  642. RXE_RDETH_BYTES +
  643. RXE_DETH_BYTES,
  644. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  645. RXE_RDETH_BYTES +
  646. RXE_DETH_BYTES +
  647. RXE_RETH_BYTES,
  648. }
  649. },
  650. [IB_OPCODE_RD_RDMA_WRITE_MIDDLE] = {
  651. .name = "IB_OPCODE_RD_RDMA_WRITE_MIDDLE",
  652. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
  653. RXE_REQ_MASK | RXE_WRITE_MASK |
  654. RXE_MIDDLE_MASK,
  655. .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
  656. .offset = {
  657. [RXE_BTH] = 0,
  658. [RXE_RDETH] = RXE_BTH_BYTES,
  659. [RXE_DETH] = RXE_BTH_BYTES +
  660. RXE_RDETH_BYTES,
  661. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  662. RXE_RDETH_BYTES +
  663. RXE_DETH_BYTES,
  664. }
  665. },
  666. [IB_OPCODE_RD_RDMA_WRITE_LAST] = {
  667. .name = "IB_OPCODE_RD_RDMA_WRITE_LAST",
  668. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
  669. RXE_REQ_MASK | RXE_WRITE_MASK |
  670. RXE_END_MASK,
  671. .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
  672. .offset = {
  673. [RXE_BTH] = 0,
  674. [RXE_RDETH] = RXE_BTH_BYTES,
  675. [RXE_DETH] = RXE_BTH_BYTES +
  676. RXE_RDETH_BYTES,
  677. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  678. RXE_RDETH_BYTES +
  679. RXE_DETH_BYTES,
  680. }
  681. },
  682. [IB_OPCODE_RD_RDMA_WRITE_LAST_WITH_IMMEDIATE] = {
  683. .name = "IB_OPCODE_RD_RDMA_WRITE_LAST_WITH_IMMEDIATE",
  684. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK |
  685. RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  686. RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
  687. RXE_END_MASK,
  688. .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES +
  689. RXE_RDETH_BYTES,
  690. .offset = {
  691. [RXE_BTH] = 0,
  692. [RXE_RDETH] = RXE_BTH_BYTES,
  693. [RXE_DETH] = RXE_BTH_BYTES +
  694. RXE_RDETH_BYTES,
  695. [RXE_IMMDT] = RXE_BTH_BYTES +
  696. RXE_RDETH_BYTES +
  697. RXE_DETH_BYTES,
  698. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  699. RXE_RDETH_BYTES +
  700. RXE_DETH_BYTES +
  701. RXE_IMMDT_BYTES,
  702. }
  703. },
  704. [IB_OPCODE_RD_RDMA_WRITE_ONLY] = {
  705. .name = "IB_OPCODE_RD_RDMA_WRITE_ONLY",
  706. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
  707. RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  708. RXE_WRITE_MASK | RXE_START_MASK |
  709. RXE_END_MASK,
  710. .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES +
  711. RXE_RDETH_BYTES,
  712. .offset = {
  713. [RXE_BTH] = 0,
  714. [RXE_RDETH] = RXE_BTH_BYTES,
  715. [RXE_DETH] = RXE_BTH_BYTES +
  716. RXE_RDETH_BYTES,
  717. [RXE_RETH] = RXE_BTH_BYTES +
  718. RXE_RDETH_BYTES +
  719. RXE_DETH_BYTES,
  720. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  721. RXE_RDETH_BYTES +
  722. RXE_DETH_BYTES +
  723. RXE_RETH_BYTES,
  724. }
  725. },
  726. [IB_OPCODE_RD_RDMA_WRITE_ONLY_WITH_IMMEDIATE] = {
  727. .name = "IB_OPCODE_RD_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
  728. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
  729. RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
  730. RXE_REQ_MASK | RXE_WRITE_MASK |
  731. RXE_COMP_MASK | RXE_RWR_MASK |
  732. RXE_START_MASK | RXE_END_MASK,
  733. .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES +
  734. RXE_DETH_BYTES + RXE_RDETH_BYTES,
  735. .offset = {
  736. [RXE_BTH] = 0,
  737. [RXE_RDETH] = RXE_BTH_BYTES,
  738. [RXE_DETH] = RXE_BTH_BYTES +
  739. RXE_RDETH_BYTES,
  740. [RXE_RETH] = RXE_BTH_BYTES +
  741. RXE_RDETH_BYTES +
  742. RXE_DETH_BYTES,
  743. [RXE_IMMDT] = RXE_BTH_BYTES +
  744. RXE_RDETH_BYTES +
  745. RXE_DETH_BYTES +
  746. RXE_RETH_BYTES,
  747. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  748. RXE_RDETH_BYTES +
  749. RXE_DETH_BYTES +
  750. RXE_RETH_BYTES +
  751. RXE_IMMDT_BYTES,
  752. }
  753. },
  754. [IB_OPCODE_RD_RDMA_READ_REQUEST] = {
  755. .name = "IB_OPCODE_RD_RDMA_READ_REQUEST",
  756. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
  757. RXE_REQ_MASK | RXE_READ_MASK |
  758. RXE_START_MASK | RXE_END_MASK,
  759. .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES +
  760. RXE_RDETH_BYTES,
  761. .offset = {
  762. [RXE_BTH] = 0,
  763. [RXE_RDETH] = RXE_BTH_BYTES,
  764. [RXE_DETH] = RXE_BTH_BYTES +
  765. RXE_RDETH_BYTES,
  766. [RXE_RETH] = RXE_BTH_BYTES +
  767. RXE_RDETH_BYTES +
  768. RXE_DETH_BYTES,
  769. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  770. RXE_RETH_BYTES +
  771. RXE_DETH_BYTES +
  772. RXE_RDETH_BYTES,
  773. }
  774. },
  775. [IB_OPCODE_RD_RDMA_READ_RESPONSE_FIRST] = {
  776. .name = "IB_OPCODE_RD_RDMA_READ_RESPONSE_FIRST",
  777. .mask = RXE_RDETH_MASK | RXE_AETH_MASK |
  778. RXE_PAYLOAD_MASK | RXE_ACK_MASK |
  779. RXE_START_MASK,
  780. .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
  781. .offset = {
  782. [RXE_BTH] = 0,
  783. [RXE_RDETH] = RXE_BTH_BYTES,
  784. [RXE_AETH] = RXE_BTH_BYTES +
  785. RXE_RDETH_BYTES,
  786. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  787. RXE_RDETH_BYTES +
  788. RXE_AETH_BYTES,
  789. }
  790. },
  791. [IB_OPCODE_RD_RDMA_READ_RESPONSE_MIDDLE] = {
  792. .name = "IB_OPCODE_RD_RDMA_READ_RESPONSE_MIDDLE",
  793. .mask = RXE_RDETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
  794. RXE_MIDDLE_MASK,
  795. .length = RXE_BTH_BYTES + RXE_RDETH_BYTES,
  796. .offset = {
  797. [RXE_BTH] = 0,
  798. [RXE_RDETH] = RXE_BTH_BYTES,
  799. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  800. RXE_RDETH_BYTES,
  801. }
  802. },
  803. [IB_OPCODE_RD_RDMA_READ_RESPONSE_LAST] = {
  804. .name = "IB_OPCODE_RD_RDMA_READ_RESPONSE_LAST",
  805. .mask = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK |
  806. RXE_ACK_MASK | RXE_END_MASK,
  807. .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
  808. .offset = {
  809. [RXE_BTH] = 0,
  810. [RXE_RDETH] = RXE_BTH_BYTES,
  811. [RXE_AETH] = RXE_BTH_BYTES +
  812. RXE_RDETH_BYTES,
  813. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  814. RXE_RDETH_BYTES +
  815. RXE_AETH_BYTES,
  816. }
  817. },
  818. [IB_OPCODE_RD_RDMA_READ_RESPONSE_ONLY] = {
  819. .name = "IB_OPCODE_RD_RDMA_READ_RESPONSE_ONLY",
  820. .mask = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK |
  821. RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
  822. .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
  823. .offset = {
  824. [RXE_BTH] = 0,
  825. [RXE_RDETH] = RXE_BTH_BYTES,
  826. [RXE_AETH] = RXE_BTH_BYTES +
  827. RXE_RDETH_BYTES,
  828. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  829. RXE_RDETH_BYTES +
  830. RXE_AETH_BYTES,
  831. }
  832. },
  833. [IB_OPCODE_RD_ACKNOWLEDGE] = {
  834. .name = "IB_OPCODE_RD_ACKNOWLEDGE",
  835. .mask = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ACK_MASK |
  836. RXE_START_MASK | RXE_END_MASK,
  837. .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
  838. .offset = {
  839. [RXE_BTH] = 0,
  840. [RXE_RDETH] = RXE_BTH_BYTES,
  841. [RXE_AETH] = RXE_BTH_BYTES +
  842. RXE_RDETH_BYTES,
  843. }
  844. },
  845. [IB_OPCODE_RD_ATOMIC_ACKNOWLEDGE] = {
  846. .name = "IB_OPCODE_RD_ATOMIC_ACKNOWLEDGE",
  847. .mask = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ATMACK_MASK |
  848. RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
  849. .length = RXE_BTH_BYTES + RXE_ATMACK_BYTES + RXE_AETH_BYTES +
  850. RXE_RDETH_BYTES,
  851. .offset = {
  852. [RXE_BTH] = 0,
  853. [RXE_RDETH] = RXE_BTH_BYTES,
  854. [RXE_AETH] = RXE_BTH_BYTES +
  855. RXE_RDETH_BYTES,
  856. [RXE_ATMACK] = RXE_BTH_BYTES +
  857. RXE_RDETH_BYTES +
  858. RXE_AETH_BYTES,
  859. }
  860. },
  861. [IB_OPCODE_RD_COMPARE_SWAP] = {
  862. .name = "RD_COMPARE_SWAP",
  863. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK |
  864. RXE_REQ_MASK | RXE_ATOMIC_MASK |
  865. RXE_START_MASK | RXE_END_MASK,
  866. .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES +
  867. RXE_RDETH_BYTES,
  868. .offset = {
  869. [RXE_BTH] = 0,
  870. [RXE_RDETH] = RXE_BTH_BYTES,
  871. [RXE_DETH] = RXE_BTH_BYTES +
  872. RXE_RDETH_BYTES,
  873. [RXE_ATMETH] = RXE_BTH_BYTES +
  874. RXE_RDETH_BYTES +
  875. RXE_DETH_BYTES,
  876. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  877. RXE_ATMETH_BYTES +
  878. RXE_DETH_BYTES +
  879. RXE_RDETH_BYTES,
  880. }
  881. },
  882. [IB_OPCODE_RD_FETCH_ADD] = {
  883. .name = "IB_OPCODE_RD_FETCH_ADD",
  884. .mask = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK |
  885. RXE_REQ_MASK | RXE_ATOMIC_MASK |
  886. RXE_START_MASK | RXE_END_MASK,
  887. .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES +
  888. RXE_RDETH_BYTES,
  889. .offset = {
  890. [RXE_BTH] = 0,
  891. [RXE_RDETH] = RXE_BTH_BYTES,
  892. [RXE_DETH] = RXE_BTH_BYTES +
  893. RXE_RDETH_BYTES,
  894. [RXE_ATMETH] = RXE_BTH_BYTES +
  895. RXE_RDETH_BYTES +
  896. RXE_DETH_BYTES,
  897. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  898. RXE_ATMETH_BYTES +
  899. RXE_DETH_BYTES +
  900. RXE_RDETH_BYTES,
  901. }
  902. },
  903. /* UD */
  904. [IB_OPCODE_UD_SEND_ONLY] = {
  905. .name = "IB_OPCODE_UD_SEND_ONLY",
  906. .mask = RXE_DETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
  907. RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
  908. RXE_START_MASK | RXE_END_MASK,
  909. .length = RXE_BTH_BYTES + RXE_DETH_BYTES,
  910. .offset = {
  911. [RXE_BTH] = 0,
  912. [RXE_DETH] = RXE_BTH_BYTES,
  913. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  914. RXE_DETH_BYTES,
  915. }
  916. },
  917. [IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE] = {
  918. .name = "IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE",
  919. .mask = RXE_DETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
  920. RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
  921. RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
  922. .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES,
  923. .offset = {
  924. [RXE_BTH] = 0,
  925. [RXE_DETH] = RXE_BTH_BYTES,
  926. [RXE_IMMDT] = RXE_BTH_BYTES +
  927. RXE_DETH_BYTES,
  928. [RXE_PAYLOAD] = RXE_BTH_BYTES +
  929. RXE_DETH_BYTES +
  930. RXE_IMMDT_BYTES,
  931. }
  932. },
  933. };