Linux Audio

Check our new training course

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