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