Linux Audio

Check our new training course

Loading...
v4.10.11
 
  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};
v5.14.15
  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_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
108struct 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 + RXE_AETH_BYTES,
331		}
332	},
333	[IB_OPCODE_RC_COMPARE_SWAP]			= {
334		.name	= "IB_OPCODE_RC_COMPARE_SWAP",
335		.mask	= RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK
336				| RXE_START_MASK | RXE_END_MASK,
337		.length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
338		.offset = {
339			[RXE_BTH]	= 0,
340			[RXE_ATMETH]	= RXE_BTH_BYTES,
341			[RXE_PAYLOAD]	= RXE_BTH_BYTES
342						+ RXE_ATMETH_BYTES,
343		}
344	},
345	[IB_OPCODE_RC_FETCH_ADD]			= {
346		.name	= "IB_OPCODE_RC_FETCH_ADD",
347		.mask	= RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK
348				| RXE_START_MASK | RXE_END_MASK,
349		.length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
350		.offset = {
351			[RXE_BTH]	= 0,
352			[RXE_ATMETH]	= RXE_BTH_BYTES,
353			[RXE_PAYLOAD]	= RXE_BTH_BYTES
354						+ RXE_ATMETH_BYTES,
355		}
356	},
357	[IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE]		= {
358		.name	= "IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE",
359		.mask	= RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
360				| RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
361		.length = RXE_BTH_BYTES + RXE_IETH_BYTES,
362		.offset = {
363			[RXE_BTH]	= 0,
364			[RXE_IETH]	= RXE_BTH_BYTES,
365			[RXE_PAYLOAD]	= RXE_BTH_BYTES
366						+ RXE_IETH_BYTES,
367		}
368	},
369	[IB_OPCODE_RC_SEND_ONLY_WITH_INVALIDATE]		= {
370		.name	= "IB_OPCODE_RC_SEND_ONLY_INV",
371		.mask	= RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
372				| RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
373				| RXE_END_MASK  | RXE_START_MASK,
374		.length = RXE_BTH_BYTES + RXE_IETH_BYTES,
375		.offset = {
376			[RXE_BTH]	= 0,
377			[RXE_IETH]	= RXE_BTH_BYTES,
378			[RXE_PAYLOAD]	= RXE_BTH_BYTES
379						+ RXE_IETH_BYTES,
380		}
381	},
382
383	/* UC */
384	[IB_OPCODE_UC_SEND_FIRST]			= {
385		.name	= "IB_OPCODE_UC_SEND_FIRST",
386		.mask	= RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK
387				| RXE_SEND_MASK | RXE_START_MASK,
388		.length = RXE_BTH_BYTES,
389		.offset = {
390			[RXE_BTH]	= 0,
391			[RXE_PAYLOAD]	= RXE_BTH_BYTES,
392		}
393	},
394	[IB_OPCODE_UC_SEND_MIDDLE]		= {
395		.name	= "IB_OPCODE_UC_SEND_MIDDLE",
396		.mask	= RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK
397				| RXE_MIDDLE_MASK,
398		.length = RXE_BTH_BYTES,
399		.offset = {
400			[RXE_BTH]	= 0,
401			[RXE_PAYLOAD]	= RXE_BTH_BYTES,
402		}
403	},
404	[IB_OPCODE_UC_SEND_LAST]			= {
405		.name	= "IB_OPCODE_UC_SEND_LAST",
406		.mask	= RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK
407				| RXE_SEND_MASK | RXE_END_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_LAST_WITH_IMMEDIATE]		= {
415		.name	= "IB_OPCODE_UC_SEND_LAST_WITH_IMMEDIATE",
416		.mask	= RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
417				| RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
418		.length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
419		.offset = {
420			[RXE_BTH]	= 0,
421			[RXE_IMMDT]	= RXE_BTH_BYTES,
422			[RXE_PAYLOAD]	= RXE_BTH_BYTES
423						+ RXE_IMMDT_BYTES,
424		}
425	},
426	[IB_OPCODE_UC_SEND_ONLY]			= {
427		.name	= "IB_OPCODE_UC_SEND_ONLY",
428		.mask	= RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK
429				| RXE_RWR_MASK | RXE_SEND_MASK
430				| RXE_START_MASK | RXE_END_MASK,
431		.length = RXE_BTH_BYTES,
432		.offset = {
433			[RXE_BTH]	= 0,
434			[RXE_PAYLOAD]	= RXE_BTH_BYTES,
435		}
436	},
437	[IB_OPCODE_UC_SEND_ONLY_WITH_IMMEDIATE]		= {
438		.name	= "IB_OPCODE_UC_SEND_ONLY_WITH_IMMEDIATE",
439		.mask	= RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
440				| RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
441				| RXE_START_MASK | RXE_END_MASK,
442		.length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
443		.offset = {
444			[RXE_BTH]	= 0,
445			[RXE_IMMDT]	= RXE_BTH_BYTES,
446			[RXE_PAYLOAD]	= RXE_BTH_BYTES
447						+ RXE_IMMDT_BYTES,
448		}
449	},
450	[IB_OPCODE_UC_RDMA_WRITE_FIRST]		= {
451		.name	= "IB_OPCODE_UC_RDMA_WRITE_FIRST",
452		.mask	= RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
453				| RXE_WRITE_MASK | RXE_START_MASK,
454		.length = RXE_BTH_BYTES + RXE_RETH_BYTES,
455		.offset = {
456			[RXE_BTH]	= 0,
457			[RXE_RETH]	= RXE_BTH_BYTES,
458			[RXE_PAYLOAD]	= RXE_BTH_BYTES
459						+ RXE_RETH_BYTES,
460		}
461	},
462	[IB_OPCODE_UC_RDMA_WRITE_MIDDLE]		= {
463		.name	= "IB_OPCODE_UC_RDMA_WRITE_MIDDLE",
464		.mask	= RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK
465				| RXE_MIDDLE_MASK,
466		.length = RXE_BTH_BYTES,
467		.offset = {
468			[RXE_BTH]	= 0,
469			[RXE_PAYLOAD]	= RXE_BTH_BYTES,
470		}
471	},
472	[IB_OPCODE_UC_RDMA_WRITE_LAST]			= {
473		.name	= "IB_OPCODE_UC_RDMA_WRITE_LAST",
474		.mask	= RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK
475				| RXE_END_MASK,
476		.length = RXE_BTH_BYTES,
477		.offset = {
478			[RXE_BTH]	= 0,
479			[RXE_PAYLOAD]	= RXE_BTH_BYTES,
480		}
481	},
482	[IB_OPCODE_UC_RDMA_WRITE_LAST_WITH_IMMEDIATE]		= {
483		.name	= "IB_OPCODE_UC_RDMA_WRITE_LAST_WITH_IMMEDIATE",
484		.mask	= RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
485				| RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK
486				| RXE_END_MASK,
487		.length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
488		.offset = {
489			[RXE_BTH]	= 0,
490			[RXE_IMMDT]	= RXE_BTH_BYTES,
491			[RXE_PAYLOAD]	= RXE_BTH_BYTES
492						+ RXE_IMMDT_BYTES,
493		}
494	},
495	[IB_OPCODE_UC_RDMA_WRITE_ONLY]			= {
496		.name	= "IB_OPCODE_UC_RDMA_WRITE_ONLY",
497		.mask	= RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
498				| RXE_WRITE_MASK | RXE_START_MASK
499				| RXE_END_MASK,
500		.length = RXE_BTH_BYTES + RXE_RETH_BYTES,
501		.offset = {
502			[RXE_BTH]	= 0,
503			[RXE_RETH]	= RXE_BTH_BYTES,
504			[RXE_PAYLOAD]	= RXE_BTH_BYTES
505						+ RXE_RETH_BYTES,
506		}
507	},
508	[IB_OPCODE_UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE]		= {
509		.name	= "IB_OPCODE_UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
510		.mask	= RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK
511				| RXE_REQ_MASK | RXE_WRITE_MASK
512				| RXE_COMP_MASK | RXE_RWR_MASK
513				| RXE_START_MASK | RXE_END_MASK,
514		.length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES,
515		.offset = {
516			[RXE_BTH]	= 0,
517			[RXE_RETH]	= RXE_BTH_BYTES,
518			[RXE_IMMDT]	= RXE_BTH_BYTES
519						+ RXE_RETH_BYTES,
520			[RXE_PAYLOAD]	= RXE_BTH_BYTES
521						+ RXE_RETH_BYTES
522						+ RXE_IMMDT_BYTES,
523		}
524	},
525
526	/* RD */
527	[IB_OPCODE_RD_SEND_FIRST]			= {
528		.name	= "IB_OPCODE_RD_SEND_FIRST",
529		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
530				| RXE_REQ_MASK | RXE_RWR_MASK | RXE_SEND_MASK
531				| RXE_START_MASK,
532		.length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
533		.offset = {
534			[RXE_BTH]	= 0,
535			[RXE_RDETH]	= RXE_BTH_BYTES,
536			[RXE_DETH]	= RXE_BTH_BYTES
537						+ RXE_RDETH_BYTES,
538			[RXE_PAYLOAD]	= RXE_BTH_BYTES
539						+ RXE_RDETH_BYTES
540						+ RXE_DETH_BYTES,
541		}
542	},
543	[IB_OPCODE_RD_SEND_MIDDLE]		= {
544		.name	= "IB_OPCODE_RD_SEND_MIDDLE",
545		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
546				| RXE_REQ_MASK | RXE_SEND_MASK
547				| RXE_MIDDLE_MASK,
548		.length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
549		.offset = {
550			[RXE_BTH]	= 0,
551			[RXE_RDETH]	= RXE_BTH_BYTES,
552			[RXE_DETH]	= RXE_BTH_BYTES
553						+ RXE_RDETH_BYTES,
554			[RXE_PAYLOAD]	= RXE_BTH_BYTES
555						+ RXE_RDETH_BYTES
556						+ RXE_DETH_BYTES,
557		}
558	},
559	[IB_OPCODE_RD_SEND_LAST]			= {
560		.name	= "IB_OPCODE_RD_SEND_LAST",
561		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
562				| RXE_REQ_MASK | RXE_COMP_MASK | RXE_SEND_MASK
563				| RXE_END_MASK,
564		.length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
565		.offset = {
566			[RXE_BTH]	= 0,
567			[RXE_RDETH]	= RXE_BTH_BYTES,
568			[RXE_DETH]	= RXE_BTH_BYTES
569						+ RXE_RDETH_BYTES,
570			[RXE_PAYLOAD]	= RXE_BTH_BYTES
571						+ RXE_RDETH_BYTES
572						+ RXE_DETH_BYTES,
573		}
574	},
575	[IB_OPCODE_RD_SEND_LAST_WITH_IMMEDIATE]		= {
576		.name	= "IB_OPCODE_RD_SEND_LAST_WITH_IMMEDIATE",
577		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK
578				| RXE_PAYLOAD_MASK | RXE_REQ_MASK
579				| RXE_COMP_MASK | RXE_SEND_MASK
580				| RXE_END_MASK,
581		.length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES
582				+ RXE_RDETH_BYTES,
583		.offset = {
584			[RXE_BTH]	= 0,
585			[RXE_RDETH]	= RXE_BTH_BYTES,
586			[RXE_DETH]	= RXE_BTH_BYTES
587						+ RXE_RDETH_BYTES,
588			[RXE_IMMDT]	= RXE_BTH_BYTES
589						+ RXE_RDETH_BYTES
590						+ RXE_DETH_BYTES,
591			[RXE_PAYLOAD]	= RXE_BTH_BYTES
592						+ RXE_RDETH_BYTES
593						+ RXE_DETH_BYTES
594						+ RXE_IMMDT_BYTES,
595		}
596	},
597	[IB_OPCODE_RD_SEND_ONLY]			= {
598		.name	= "IB_OPCODE_RD_SEND_ONLY",
599		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
600				| RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK
601				| RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
602		.length = RXE_BTH_BYTES + RXE_DETH_BYTES + 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_PAYLOAD]	= RXE_BTH_BYTES
609						+ RXE_RDETH_BYTES
610						+ RXE_DETH_BYTES,
611		}
612	},
613	[IB_OPCODE_RD_SEND_ONLY_WITH_IMMEDIATE]		= {
614		.name	= "IB_OPCODE_RD_SEND_ONLY_WITH_IMMEDIATE",
615		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK
616				| RXE_PAYLOAD_MASK | RXE_REQ_MASK
617				| RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
618				| RXE_START_MASK | RXE_END_MASK,
619		.length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES
620				+ RXE_RDETH_BYTES,
621		.offset = {
622			[RXE_BTH]	= 0,
623			[RXE_RDETH]	= RXE_BTH_BYTES,
624			[RXE_DETH]	= RXE_BTH_BYTES
625						+ RXE_RDETH_BYTES,
626			[RXE_IMMDT]	= RXE_BTH_BYTES
627						+ RXE_RDETH_BYTES
628						+ RXE_DETH_BYTES,
629			[RXE_PAYLOAD]	= RXE_BTH_BYTES
630						+ RXE_RDETH_BYTES
631						+ RXE_DETH_BYTES
632						+ RXE_IMMDT_BYTES,
633		}
634	},
635	[IB_OPCODE_RD_RDMA_WRITE_FIRST]		= {
636		.name	= "IB_OPCODE_RD_RDMA_WRITE_FIRST",
637		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK
638				| RXE_PAYLOAD_MASK | RXE_REQ_MASK
639				| RXE_WRITE_MASK | RXE_START_MASK,
640		.length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES
641				+ RXE_RDETH_BYTES,
642		.offset = {
643			[RXE_BTH]	= 0,
644			[RXE_RDETH]	= RXE_BTH_BYTES,
645			[RXE_DETH]	= RXE_BTH_BYTES
646						+ RXE_RDETH_BYTES,
647			[RXE_RETH]	= RXE_BTH_BYTES
648						+ RXE_RDETH_BYTES
649						+ RXE_DETH_BYTES,
650			[RXE_PAYLOAD]	= RXE_BTH_BYTES
651						+ RXE_RDETH_BYTES
652						+ RXE_DETH_BYTES
653						+ RXE_RETH_BYTES,
654		}
655	},
656	[IB_OPCODE_RD_RDMA_WRITE_MIDDLE]		= {
657		.name	= "IB_OPCODE_RD_RDMA_WRITE_MIDDLE",
658		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
659				| RXE_REQ_MASK | RXE_WRITE_MASK
660				| RXE_MIDDLE_MASK,
661		.length = RXE_BTH_BYTES + RXE_DETH_BYTES + 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_PAYLOAD]	= RXE_BTH_BYTES
668						+ RXE_RDETH_BYTES
669						+ RXE_DETH_BYTES,
670		}
671	},
672	[IB_OPCODE_RD_RDMA_WRITE_LAST]			= {
673		.name	= "IB_OPCODE_RD_RDMA_WRITE_LAST",
674		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
675				| RXE_REQ_MASK | RXE_WRITE_MASK
676				| RXE_END_MASK,
677		.length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
678		.offset = {
679			[RXE_BTH]	= 0,
680			[RXE_RDETH]	= RXE_BTH_BYTES,
681			[RXE_DETH]	= RXE_BTH_BYTES
682						+ RXE_RDETH_BYTES,
683			[RXE_PAYLOAD]	= RXE_BTH_BYTES
684						+ RXE_RDETH_BYTES
685						+ RXE_DETH_BYTES,
686		}
687	},
688	[IB_OPCODE_RD_RDMA_WRITE_LAST_WITH_IMMEDIATE]		= {
689		.name	= "IB_OPCODE_RD_RDMA_WRITE_LAST_WITH_IMMEDIATE",
690		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK
691				| RXE_PAYLOAD_MASK | RXE_REQ_MASK
692				| RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK
693				| RXE_END_MASK,
694		.length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES
695				+ RXE_RDETH_BYTES,
696		.offset = {
697			[RXE_BTH]	= 0,
698			[RXE_RDETH]	= RXE_BTH_BYTES,
699			[RXE_DETH]	= RXE_BTH_BYTES
700						+ RXE_RDETH_BYTES,
701			[RXE_IMMDT]	= RXE_BTH_BYTES
702						+ RXE_RDETH_BYTES
703						+ RXE_DETH_BYTES,
704			[RXE_PAYLOAD]	= RXE_BTH_BYTES
705						+ RXE_RDETH_BYTES
706						+ RXE_DETH_BYTES
707						+ RXE_IMMDT_BYTES,
708		}
709	},
710	[IB_OPCODE_RD_RDMA_WRITE_ONLY]			= {
711		.name	= "IB_OPCODE_RD_RDMA_WRITE_ONLY",
712		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK
713				| RXE_PAYLOAD_MASK | RXE_REQ_MASK
714				| RXE_WRITE_MASK | RXE_START_MASK
715				| RXE_END_MASK,
716		.length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES
717				+ RXE_RDETH_BYTES,
718		.offset = {
719			[RXE_BTH]	= 0,
720			[RXE_RDETH]	= RXE_BTH_BYTES,
721			[RXE_DETH]	= RXE_BTH_BYTES
722						+ RXE_RDETH_BYTES,
723			[RXE_RETH]	= RXE_BTH_BYTES
724						+ RXE_RDETH_BYTES
725						+ RXE_DETH_BYTES,
726			[RXE_PAYLOAD]	= RXE_BTH_BYTES
727						+ RXE_RDETH_BYTES
728						+ RXE_DETH_BYTES
729						+ RXE_RETH_BYTES,
730		}
731	},
732	[IB_OPCODE_RD_RDMA_WRITE_ONLY_WITH_IMMEDIATE]		= {
733		.name	= "IB_OPCODE_RD_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
734		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK
735				| RXE_IMMDT_MASK | RXE_PAYLOAD_MASK
736				| RXE_REQ_MASK | RXE_WRITE_MASK
737				| RXE_COMP_MASK | RXE_RWR_MASK
738				| RXE_START_MASK | RXE_END_MASK,
739		.length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES
740				+ RXE_DETH_BYTES + RXE_RDETH_BYTES,
741		.offset = {
742			[RXE_BTH]	= 0,
743			[RXE_RDETH]	= RXE_BTH_BYTES,
744			[RXE_DETH]	= RXE_BTH_BYTES
745						+ RXE_RDETH_BYTES,
746			[RXE_RETH]	= RXE_BTH_BYTES
747						+ RXE_RDETH_BYTES
748						+ RXE_DETH_BYTES,
749			[RXE_IMMDT]	= RXE_BTH_BYTES
750						+ RXE_RDETH_BYTES
751						+ RXE_DETH_BYTES
752						+ RXE_RETH_BYTES,
753			[RXE_PAYLOAD]	= RXE_BTH_BYTES
754						+ RXE_RDETH_BYTES
755						+ RXE_DETH_BYTES
756						+ RXE_RETH_BYTES
757						+ RXE_IMMDT_BYTES,
758		}
759	},
760	[IB_OPCODE_RD_RDMA_READ_REQUEST]			= {
761		.name	= "IB_OPCODE_RD_RDMA_READ_REQUEST",
762		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK
763				| RXE_REQ_MASK | RXE_READ_MASK
764				| RXE_START_MASK | RXE_END_MASK,
765		.length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES
766				+ RXE_RDETH_BYTES,
767		.offset = {
768			[RXE_BTH]	= 0,
769			[RXE_RDETH]	= RXE_BTH_BYTES,
770			[RXE_DETH]	= RXE_BTH_BYTES
771						+ RXE_RDETH_BYTES,
772			[RXE_RETH]	= RXE_BTH_BYTES
773						+ RXE_RDETH_BYTES
774						+ RXE_DETH_BYTES,
775			[RXE_PAYLOAD]	= RXE_BTH_BYTES
776						+ RXE_RETH_BYTES
777						+ RXE_DETH_BYTES
778						+ RXE_RDETH_BYTES,
779		}
780	},
781	[IB_OPCODE_RD_RDMA_READ_RESPONSE_FIRST]		= {
782		.name	= "IB_OPCODE_RD_RDMA_READ_RESPONSE_FIRST",
783		.mask	= RXE_RDETH_MASK | RXE_AETH_MASK
784				| RXE_PAYLOAD_MASK | RXE_ACK_MASK
785				| RXE_START_MASK,
786		.length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
787		.offset = {
788			[RXE_BTH]	= 0,
789			[RXE_RDETH]	= RXE_BTH_BYTES,
790			[RXE_AETH]	= RXE_BTH_BYTES
791						+ RXE_RDETH_BYTES,
792			[RXE_PAYLOAD]	= RXE_BTH_BYTES
793						+ RXE_RDETH_BYTES
794						+ RXE_AETH_BYTES,
795		}
796	},
797	[IB_OPCODE_RD_RDMA_READ_RESPONSE_MIDDLE]		= {
798		.name	= "IB_OPCODE_RD_RDMA_READ_RESPONSE_MIDDLE",
799		.mask	= RXE_RDETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK
800				| RXE_MIDDLE_MASK,
801		.length = RXE_BTH_BYTES + RXE_RDETH_BYTES,
802		.offset = {
803			[RXE_BTH]	= 0,
804			[RXE_RDETH]	= RXE_BTH_BYTES,
805			[RXE_PAYLOAD]	= RXE_BTH_BYTES
806						+ RXE_RDETH_BYTES,
807		}
808	},
809	[IB_OPCODE_RD_RDMA_READ_RESPONSE_LAST]		= {
810		.name	= "IB_OPCODE_RD_RDMA_READ_RESPONSE_LAST",
811		.mask	= RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK
812				| RXE_ACK_MASK | RXE_END_MASK,
813		.length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
814		.offset = {
815			[RXE_BTH]	= 0,
816			[RXE_RDETH]	= RXE_BTH_BYTES,
817			[RXE_AETH]	= RXE_BTH_BYTES
818						+ RXE_RDETH_BYTES,
819			[RXE_PAYLOAD]	= RXE_BTH_BYTES
820						+ RXE_RDETH_BYTES
821						+ RXE_AETH_BYTES,
822		}
823	},
824	[IB_OPCODE_RD_RDMA_READ_RESPONSE_ONLY]		= {
825		.name	= "IB_OPCODE_RD_RDMA_READ_RESPONSE_ONLY",
826		.mask	= RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK
827				| RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
828		.length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
829		.offset = {
830			[RXE_BTH]	= 0,
831			[RXE_RDETH]	= RXE_BTH_BYTES,
832			[RXE_AETH]	= RXE_BTH_BYTES
833						+ RXE_RDETH_BYTES,
834			[RXE_PAYLOAD]	= RXE_BTH_BYTES
835						+ RXE_RDETH_BYTES
836						+ RXE_AETH_BYTES,
837		}
838	},
839	[IB_OPCODE_RD_ACKNOWLEDGE]			= {
840		.name	= "IB_OPCODE_RD_ACKNOWLEDGE",
841		.mask	= RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ACK_MASK
842				| RXE_START_MASK | RXE_END_MASK,
843		.length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
844		.offset = {
845			[RXE_BTH]	= 0,
846			[RXE_RDETH]	= RXE_BTH_BYTES,
847			[RXE_AETH]	= RXE_BTH_BYTES
848						+ RXE_RDETH_BYTES,
849		}
850	},
851	[IB_OPCODE_RD_ATOMIC_ACKNOWLEDGE]			= {
852		.name	= "IB_OPCODE_RD_ATOMIC_ACKNOWLEDGE",
853		.mask	= RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ATMACK_MASK
854				| RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
855		.length = RXE_BTH_BYTES + RXE_ATMACK_BYTES + RXE_AETH_BYTES
856				+ RXE_RDETH_BYTES,
857		.offset = {
858			[RXE_BTH]	= 0,
859			[RXE_RDETH]	= RXE_BTH_BYTES,
860			[RXE_AETH]	= RXE_BTH_BYTES
861						+ RXE_RDETH_BYTES,
862			[RXE_ATMACK]	= RXE_BTH_BYTES
863						+ RXE_RDETH_BYTES
864						+ RXE_AETH_BYTES,
865		}
866	},
867	[IB_OPCODE_RD_COMPARE_SWAP]			= {
868		.name	= "RD_COMPARE_SWAP",
869		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK
870				| RXE_REQ_MASK | RXE_ATOMIC_MASK
871				| RXE_START_MASK | RXE_END_MASK,
872		.length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES
873				+ RXE_RDETH_BYTES,
874		.offset = {
875			[RXE_BTH]	= 0,
876			[RXE_RDETH]	= RXE_BTH_BYTES,
877			[RXE_DETH]	= RXE_BTH_BYTES
878						+ RXE_RDETH_BYTES,
879			[RXE_ATMETH]	= RXE_BTH_BYTES
880						+ RXE_RDETH_BYTES
881						+ RXE_DETH_BYTES,
882			[RXE_PAYLOAD]	= RXE_BTH_BYTES +
883						+ RXE_ATMETH_BYTES
884						+ RXE_DETH_BYTES +
885						+ RXE_RDETH_BYTES,
886		}
887	},
888	[IB_OPCODE_RD_FETCH_ADD]			= {
889		.name	= "IB_OPCODE_RD_FETCH_ADD",
890		.mask	= RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK
891				| RXE_REQ_MASK | RXE_ATOMIC_MASK
892				| RXE_START_MASK | RXE_END_MASK,
893		.length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES
894				+ RXE_RDETH_BYTES,
895		.offset = {
896			[RXE_BTH]	= 0,
897			[RXE_RDETH]	= RXE_BTH_BYTES,
898			[RXE_DETH]	= RXE_BTH_BYTES
899						+ RXE_RDETH_BYTES,
900			[RXE_ATMETH]	= RXE_BTH_BYTES
901						+ RXE_RDETH_BYTES
902						+ RXE_DETH_BYTES,
903			[RXE_PAYLOAD]	= RXE_BTH_BYTES +
904						+ RXE_ATMETH_BYTES
905						+ RXE_DETH_BYTES +
906						+ RXE_RDETH_BYTES,
907		}
908	},
909
910	/* UD */
911	[IB_OPCODE_UD_SEND_ONLY]			= {
912		.name	= "IB_OPCODE_UD_SEND_ONLY",
913		.mask	= RXE_DETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
914				| RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
915				| RXE_START_MASK | RXE_END_MASK,
916		.length = RXE_BTH_BYTES + RXE_DETH_BYTES,
917		.offset = {
918			[RXE_BTH]	= 0,
919			[RXE_DETH]	= RXE_BTH_BYTES,
920			[RXE_PAYLOAD]	= RXE_BTH_BYTES
921						+ RXE_DETH_BYTES,
922		}
923	},
924	[IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE]		= {
925		.name	= "IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE",
926		.mask	= RXE_DETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK
927				| RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK
928				| RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
929		.length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES,
930		.offset = {
931			[RXE_BTH]	= 0,
932			[RXE_DETH]	= RXE_BTH_BYTES,
933			[RXE_IMMDT]	= RXE_BTH_BYTES
934						+ RXE_DETH_BYTES,
935			[RXE_PAYLOAD]	= RXE_BTH_BYTES
936						+ RXE_DETH_BYTES
937						+ RXE_IMMDT_BYTES,
938		}
939	},
940
941};