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