cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rxe_opcode.c (27116B)


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