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