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