root/drivers/infiniband/sw/rxe/rxe_opcode.c
// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
/*
 * Copyright (c) 2016 Mellanox Technologies Ltd. All rights reserved.
 * Copyright (c) 2015 System Fabric Works, Inc. All rights reserved.
 */

#include <rdma/ib_pack.h>
#include "rxe_opcode.h"
#include "rxe_hdr.h"

/* useful information about work request opcodes and pkt opcodes in
 * table form
 */
struct rxe_wr_opcode_info rxe_wr_opcode_info[] = {
        [IB_WR_RDMA_WRITE]                              = {
                .name   = "IB_WR_RDMA_WRITE",
                .mask   = {
                        [IB_QPT_RC]     = WR_INLINE_MASK | WR_WRITE_MASK,
                        [IB_QPT_UC]     = WR_INLINE_MASK | WR_WRITE_MASK,
                },
        },
        [IB_WR_RDMA_WRITE_WITH_IMM]                     = {
                .name   = "IB_WR_RDMA_WRITE_WITH_IMM",
                .mask   = {
                        [IB_QPT_RC]     = WR_INLINE_MASK | WR_WRITE_MASK,
                        [IB_QPT_UC]     = WR_INLINE_MASK | WR_WRITE_MASK,
                },
        },
        [IB_WR_SEND]                                    = {
                .name   = "IB_WR_SEND",
                .mask   = {
                        [IB_QPT_GSI]    = WR_INLINE_MASK | WR_SEND_MASK,
                        [IB_QPT_RC]     = WR_INLINE_MASK | WR_SEND_MASK,
                        [IB_QPT_UC]     = WR_INLINE_MASK | WR_SEND_MASK,
                        [IB_QPT_UD]     = WR_INLINE_MASK | WR_SEND_MASK,
                },
        },
        [IB_WR_SEND_WITH_IMM]                           = {
                .name   = "IB_WR_SEND_WITH_IMM",
                .mask   = {
                        [IB_QPT_GSI]    = WR_INLINE_MASK | WR_SEND_MASK,
                        [IB_QPT_RC]     = WR_INLINE_MASK | WR_SEND_MASK,
                        [IB_QPT_UC]     = WR_INLINE_MASK | WR_SEND_MASK,
                        [IB_QPT_UD]     = WR_INLINE_MASK | WR_SEND_MASK,
                },
        },
        [IB_WR_RDMA_READ]                               = {
                .name   = "IB_WR_RDMA_READ",
                .mask   = {
                        [IB_QPT_RC]     = WR_READ_MASK,
                },
        },
        [IB_WR_ATOMIC_CMP_AND_SWP]                      = {
                .name   = "IB_WR_ATOMIC_CMP_AND_SWP",
                .mask   = {
                        [IB_QPT_RC]     = WR_ATOMIC_MASK,
                },
        },
        [IB_WR_ATOMIC_FETCH_AND_ADD]                    = {
                .name   = "IB_WR_ATOMIC_FETCH_AND_ADD",
                .mask   = {
                        [IB_QPT_RC]     = WR_ATOMIC_MASK,
                },
        },
        [IB_WR_LSO]                                     = {
                .name   = "IB_WR_LSO",
                .mask   = {
                        /* not supported */
                },
        },
        [IB_WR_SEND_WITH_INV]                           = {
                .name   = "IB_WR_SEND_WITH_INV",
                .mask   = {
                        [IB_QPT_RC]     = WR_INLINE_MASK | WR_SEND_MASK,
                        [IB_QPT_UC]     = WR_INLINE_MASK | WR_SEND_MASK,
                        [IB_QPT_UD]     = WR_INLINE_MASK | WR_SEND_MASK,
                },
        },
        [IB_WR_RDMA_READ_WITH_INV]                      = {
                .name   = "IB_WR_RDMA_READ_WITH_INV",
                .mask   = {
                        [IB_QPT_RC]     = WR_READ_MASK,
                },
        },
        [IB_WR_LOCAL_INV]                               = {
                .name   = "IB_WR_LOCAL_INV",
                .mask   = {
                        [IB_QPT_RC]     = WR_LOCAL_OP_MASK,
                },
        },
        [IB_WR_REG_MR]                                  = {
                .name   = "IB_WR_REG_MR",
                .mask   = {
                        [IB_QPT_RC]     = WR_LOCAL_OP_MASK,
                },
        },
        [IB_WR_BIND_MW]                                 = {
                .name   = "IB_WR_BIND_MW",
                .mask   = {
                        [IB_QPT_RC]     = WR_LOCAL_OP_MASK,
                        [IB_QPT_UC]     = WR_LOCAL_OP_MASK,
                },
        },
        [IB_WR_FLUSH]                                   = {
                .name   = "IB_WR_FLUSH",
                .mask   = {
                        [IB_QPT_RC]     = WR_FLUSH_MASK,
                },
        },
        [IB_WR_ATOMIC_WRITE]                       = {
                .name   = "IB_WR_ATOMIC_WRITE",
                .mask   = {
                        [IB_QPT_RC]     = WR_ATOMIC_WRITE_MASK,
                },
        },
};

struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = {
        [IB_OPCODE_RC_SEND_FIRST]                       = {
                .name   = "IB_OPCODE_RC_SEND_FIRST",
                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK |
                          RXE_SEND_MASK | RXE_START_MASK,
                .length = RXE_BTH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
                }
        },
        [IB_OPCODE_RC_SEND_MIDDLE]              = {
                .name   = "IB_OPCODE_RC_SEND_MIDDLE",
                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK |
                          RXE_MIDDLE_MASK,
                .length = RXE_BTH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
                }
        },
        [IB_OPCODE_RC_SEND_LAST]                        = {
                .name   = "IB_OPCODE_RC_SEND_LAST",
                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
                          RXE_SEND_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
                }
        },
        [IB_OPCODE_RC_SEND_LAST_WITH_IMMEDIATE]         = {
                .name   = "IB_OPCODE_RC_SEND_LAST_WITH_IMMEDIATE",
                .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_IMMDT]     = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_IMMDT_BYTES,
                }
        },
        [IB_OPCODE_RC_SEND_ONLY]                        = {
                .name   = "IB_OPCODE_RC_SEND_ONLY",
                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
                          RXE_RWR_MASK | RXE_SEND_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
                }
        },
        [IB_OPCODE_RC_SEND_ONLY_WITH_IMMEDIATE]         = {
                .name   = "IB_OPCODE_RC_SEND_ONLY_WITH_IMMEDIATE",
                .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_IMMDT]     = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_IMMDT_BYTES,
                }
        },
        [IB_OPCODE_RC_RDMA_WRITE_FIRST]         = {
                .name   = "IB_OPCODE_RC_RDMA_WRITE_FIRST",
                .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_WRITE_MASK | RXE_START_MASK,
                .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RETH]      = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RETH_BYTES,
                }
        },
        [IB_OPCODE_RC_RDMA_WRITE_MIDDLE]                = {
                .name   = "IB_OPCODE_RC_RDMA_WRITE_MIDDLE",
                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
                          RXE_MIDDLE_MASK,
                .length = RXE_BTH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
                }
        },
        [IB_OPCODE_RC_RDMA_WRITE_LAST]                  = {
                .name   = "IB_OPCODE_RC_RDMA_WRITE_LAST",
                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
                          RXE_END_MASK,
                .length = RXE_BTH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
                }
        },
        [IB_OPCODE_RC_RDMA_WRITE_LAST_WITH_IMMEDIATE]           = {
                .name   = "IB_OPCODE_RC_RDMA_WRITE_LAST_WITH_IMMEDIATE",
                .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
                          RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_IMMDT]     = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_IMMDT_BYTES,
                }
        },
        [IB_OPCODE_RC_RDMA_WRITE_ONLY]                  = {
                .name   = "IB_OPCODE_RC_RDMA_WRITE_ONLY",
                .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_WRITE_MASK | RXE_START_MASK |
                          RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RETH]      = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RETH_BYTES,
                }
        },
        [IB_OPCODE_RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE]           = {
                .name   = "IB_OPCODE_RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
                .mask   = RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
                          RXE_REQ_MASK | RXE_WRITE_MASK |
                          RXE_COMP_MASK | RXE_RWR_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RETH]      = RXE_BTH_BYTES,
                        [RXE_IMMDT]     = RXE_BTH_BYTES +
                                          RXE_RETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RETH_BYTES +
                                          RXE_IMMDT_BYTES,
                }
        },
        [IB_OPCODE_RC_RDMA_READ_REQUEST]                        = {
                .name   = "IB_OPCODE_RC_RDMA_READ_REQUEST",
                .mask   = RXE_RETH_MASK | RXE_REQ_MASK | RXE_READ_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RETH]      = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RETH_BYTES,
                }
        },
        [IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST]         = {
                .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST",
                .mask   = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
                          RXE_START_MASK,
                .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_AETH]      = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_AETH_BYTES,
                }
        },
        [IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE]                = {
                .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE",
                .mask   = RXE_PAYLOAD_MASK | RXE_ACK_MASK | RXE_MIDDLE_MASK,
                .length = RXE_BTH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
                }
        },
        [IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST]          = {
                .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST",
                .mask   = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
                          RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_AETH]      = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_AETH_BYTES,
                }
        },
        [IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY]          = {
                .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY",
                .mask   = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_AETH]      = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_AETH_BYTES,
                }
        },
        [IB_OPCODE_RC_ACKNOWLEDGE]                      = {
                .name   = "IB_OPCODE_RC_ACKNOWLEDGE",
                .mask   = RXE_AETH_MASK | RXE_ACK_MASK | RXE_START_MASK |
                          RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_AETH]      = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_AETH_BYTES,
                }
        },
        [IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE]                       = {
                .name   = "IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE",
                .mask   = RXE_AETH_MASK | RXE_ATMACK_MASK | RXE_ACK_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_ATMACK_BYTES + RXE_AETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_AETH]      = RXE_BTH_BYTES,
                        [RXE_ATMACK]    = RXE_BTH_BYTES +
                                          RXE_AETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_ATMACK_BYTES +
                                          RXE_AETH_BYTES,
                }
        },
        [IB_OPCODE_RC_COMPARE_SWAP]                     = {
                .name   = "IB_OPCODE_RC_COMPARE_SWAP",
                .mask   = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_ATMETH]    = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_ATMETH_BYTES,
                }
        },
        [IB_OPCODE_RC_FETCH_ADD]                        = {
                .name   = "IB_OPCODE_RC_FETCH_ADD",
                .mask   = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_ATMETH]    = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_ATMETH_BYTES,
                }
        },
        [IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE]                = {
                .name   = "IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE",
                .mask   = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_IETH]      = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_IETH_BYTES,
                }
        },
        [IB_OPCODE_RC_SEND_ONLY_WITH_INVALIDATE]                = {
                .name   = "IB_OPCODE_RC_SEND_ONLY_INV",
                .mask   = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
                          RXE_END_MASK  | RXE_START_MASK,
                .length = RXE_BTH_BYTES + RXE_IETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_IETH]      = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_IETH_BYTES,
                }
        },
        [IB_OPCODE_RC_FLUSH]                                    = {
                .name   = "IB_OPCODE_RC_FLUSH",
                .mask   = RXE_FETH_MASK | RXE_RETH_MASK | RXE_FLUSH_MASK |
                          RXE_START_MASK | RXE_END_MASK | RXE_REQ_MASK,
                .length = RXE_BTH_BYTES + RXE_FETH_BYTES + RXE_RETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_FETH]      = RXE_BTH_BYTES,
                        [RXE_RETH]      = RXE_BTH_BYTES + RXE_FETH_BYTES,
                }
        },
        [IB_OPCODE_RC_ATOMIC_WRITE]                        = {
                .name   = "IB_OPCODE_RC_ATOMIC_WRITE",
                .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_ATOMIC_WRITE_MASK | RXE_START_MASK |
                          RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RETH]      = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES + RXE_RETH_BYTES,
                }
        },

        /* UC */
        [IB_OPCODE_UC_SEND_FIRST]                       = {
                .name   = "IB_OPCODE_UC_SEND_FIRST",
                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK |
                          RXE_SEND_MASK | RXE_START_MASK,
                .length = RXE_BTH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
                }
        },
        [IB_OPCODE_UC_SEND_MIDDLE]              = {
                .name   = "IB_OPCODE_UC_SEND_MIDDLE",
                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK |
                          RXE_MIDDLE_MASK,
                .length = RXE_BTH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
                }
        },
        [IB_OPCODE_UC_SEND_LAST]                        = {
                .name   = "IB_OPCODE_UC_SEND_LAST",
                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
                          RXE_SEND_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
                }
        },
        [IB_OPCODE_UC_SEND_LAST_WITH_IMMEDIATE]         = {
                .name   = "IB_OPCODE_UC_SEND_LAST_WITH_IMMEDIATE",
                .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_IMMDT]     = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_IMMDT_BYTES,
                }
        },
        [IB_OPCODE_UC_SEND_ONLY]                        = {
                .name   = "IB_OPCODE_UC_SEND_ONLY",
                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
                          RXE_RWR_MASK | RXE_SEND_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
                }
        },
        [IB_OPCODE_UC_SEND_ONLY_WITH_IMMEDIATE]         = {
                .name   = "IB_OPCODE_UC_SEND_ONLY_WITH_IMMEDIATE",
                .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_IMMDT]     = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_IMMDT_BYTES,
                }
        },
        [IB_OPCODE_UC_RDMA_WRITE_FIRST]         = {
                .name   = "IB_OPCODE_UC_RDMA_WRITE_FIRST",
                .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_WRITE_MASK | RXE_START_MASK,
                .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RETH]      = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RETH_BYTES,
                }
        },
        [IB_OPCODE_UC_RDMA_WRITE_MIDDLE]                = {
                .name   = "IB_OPCODE_UC_RDMA_WRITE_MIDDLE",
                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
                          RXE_MIDDLE_MASK,
                .length = RXE_BTH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
                }
        },
        [IB_OPCODE_UC_RDMA_WRITE_LAST]                  = {
                .name   = "IB_OPCODE_UC_RDMA_WRITE_LAST",
                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
                          RXE_END_MASK,
                .length = RXE_BTH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
                }
        },
        [IB_OPCODE_UC_RDMA_WRITE_LAST_WITH_IMMEDIATE]           = {
                .name   = "IB_OPCODE_UC_RDMA_WRITE_LAST_WITH_IMMEDIATE",
                .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
                          RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_IMMDT]     = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_IMMDT_BYTES,
                }
        },
        [IB_OPCODE_UC_RDMA_WRITE_ONLY]                  = {
                .name   = "IB_OPCODE_UC_RDMA_WRITE_ONLY",
                .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_WRITE_MASK | RXE_START_MASK |
                          RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RETH]      = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RETH_BYTES,
                }
        },
        [IB_OPCODE_UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE]           = {
                .name   = "IB_OPCODE_UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
                .mask   = RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
                          RXE_REQ_MASK | RXE_WRITE_MASK |
                          RXE_COMP_MASK | RXE_RWR_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RETH]      = RXE_BTH_BYTES,
                        [RXE_IMMDT]     = RXE_BTH_BYTES +
                                          RXE_RETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RETH_BYTES +
                                          RXE_IMMDT_BYTES,
                }
        },

        /* RD */
        [IB_OPCODE_RD_SEND_FIRST]                       = {
                .name   = "IB_OPCODE_RD_SEND_FIRST",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
                          RXE_REQ_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
                          RXE_START_MASK,
                .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                }
        },
        [IB_OPCODE_RD_SEND_MIDDLE]              = {
                .name   = "IB_OPCODE_RD_SEND_MIDDLE",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
                          RXE_REQ_MASK | RXE_SEND_MASK |
                          RXE_MIDDLE_MASK,
                .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                }
        },
        [IB_OPCODE_RD_SEND_LAST]                        = {
                .name   = "IB_OPCODE_RD_SEND_LAST",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
                          RXE_REQ_MASK | RXE_COMP_MASK | RXE_SEND_MASK |
                          RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                }
        },
        [IB_OPCODE_RD_SEND_LAST_WITH_IMMEDIATE]         = {
                .name   = "IB_OPCODE_RD_SEND_LAST_WITH_IMMEDIATE",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK |
                          RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_COMP_MASK | RXE_SEND_MASK |
                          RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES +
                          RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_IMMDT]     = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES +
                                          RXE_IMMDT_BYTES,
                }
        },
        [IB_OPCODE_RD_SEND_ONLY]                        = {
                .name   = "IB_OPCODE_RD_SEND_ONLY",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
                          RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
                          RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                }
        },
        [IB_OPCODE_RD_SEND_ONLY_WITH_IMMEDIATE]         = {
                .name   = "IB_OPCODE_RD_SEND_ONLY_WITH_IMMEDIATE",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK |
                          RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES +
                          RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_IMMDT]     = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES +
                                          RXE_IMMDT_BYTES,
                }
        },
        [IB_OPCODE_RD_RDMA_WRITE_FIRST]         = {
                .name   = "IB_OPCODE_RD_RDMA_WRITE_FIRST",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
                          RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_WRITE_MASK | RXE_START_MASK,
                .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES +
                          RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_RETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES +
                                          RXE_RETH_BYTES,
                }
        },
        [IB_OPCODE_RD_RDMA_WRITE_MIDDLE]                = {
                .name   = "IB_OPCODE_RD_RDMA_WRITE_MIDDLE",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
                          RXE_REQ_MASK | RXE_WRITE_MASK |
                          RXE_MIDDLE_MASK,
                .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                }
        },
        [IB_OPCODE_RD_RDMA_WRITE_LAST]                  = {
                .name   = "IB_OPCODE_RD_RDMA_WRITE_LAST",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
                          RXE_REQ_MASK | RXE_WRITE_MASK |
                          RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                }
        },
        [IB_OPCODE_RD_RDMA_WRITE_LAST_WITH_IMMEDIATE]           = {
                .name   = "IB_OPCODE_RD_RDMA_WRITE_LAST_WITH_IMMEDIATE",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK |
                          RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
                          RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES +
                          RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_IMMDT]     = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES +
                                          RXE_IMMDT_BYTES,
                }
        },
        [IB_OPCODE_RD_RDMA_WRITE_ONLY]                  = {
                .name   = "IB_OPCODE_RD_RDMA_WRITE_ONLY",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
                                RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                                RXE_WRITE_MASK | RXE_START_MASK |
                                RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES +
                          RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_RETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES +
                                          RXE_RETH_BYTES,
                }
        },
        [IB_OPCODE_RD_RDMA_WRITE_ONLY_WITH_IMMEDIATE]           = {
                .name   = "IB_OPCODE_RD_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
                          RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
                          RXE_REQ_MASK | RXE_WRITE_MASK |
                          RXE_COMP_MASK | RXE_RWR_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES +
                          RXE_DETH_BYTES + RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_RETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                        [RXE_IMMDT]     = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES +
                                          RXE_RETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES +
                                          RXE_RETH_BYTES +
                                          RXE_IMMDT_BYTES,
                }
        },
        [IB_OPCODE_RD_RDMA_READ_REQUEST]                        = {
                .name   = "IB_OPCODE_RD_RDMA_READ_REQUEST",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
                          RXE_REQ_MASK | RXE_READ_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES +
                          RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_RETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RETH_BYTES +
                                          RXE_DETH_BYTES +
                                          RXE_RDETH_BYTES,
                }
        },
        [IB_OPCODE_RD_RDMA_READ_RESPONSE_FIRST]         = {
                .name   = "IB_OPCODE_RD_RDMA_READ_RESPONSE_FIRST",
                .mask   = RXE_RDETH_MASK | RXE_AETH_MASK |
                          RXE_PAYLOAD_MASK | RXE_ACK_MASK |
                          RXE_START_MASK,
                .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_AETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_AETH_BYTES,
                }
        },
        [IB_OPCODE_RD_RDMA_READ_RESPONSE_MIDDLE]                = {
                .name   = "IB_OPCODE_RD_RDMA_READ_RESPONSE_MIDDLE",
                .mask   = RXE_RDETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
                          RXE_MIDDLE_MASK,
                .length = RXE_BTH_BYTES + RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                }
        },
        [IB_OPCODE_RD_RDMA_READ_RESPONSE_LAST]          = {
                .name   = "IB_OPCODE_RD_RDMA_READ_RESPONSE_LAST",
                .mask   = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK |
                          RXE_ACK_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_AETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_AETH_BYTES,
                }
        },
        [IB_OPCODE_RD_RDMA_READ_RESPONSE_ONLY]          = {
                .name   = "IB_OPCODE_RD_RDMA_READ_RESPONSE_ONLY",
                .mask   = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK |
                          RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_AETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_AETH_BYTES,
                }
        },
        [IB_OPCODE_RD_ACKNOWLEDGE]                      = {
                .name   = "IB_OPCODE_RD_ACKNOWLEDGE",
                .mask   = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ACK_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_AETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                }
        },
        [IB_OPCODE_RD_ATOMIC_ACKNOWLEDGE]                       = {
                .name   = "IB_OPCODE_RD_ATOMIC_ACKNOWLEDGE",
                .mask   = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ATMACK_MASK |
                          RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_ATMACK_BYTES + RXE_AETH_BYTES +
                          RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_AETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_ATMACK]    = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_AETH_BYTES,
                }
        },
        [IB_OPCODE_RD_COMPARE_SWAP]                     = {
                .name   = "RD_COMPARE_SWAP",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK |
                          RXE_REQ_MASK | RXE_ATOMIC_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES +
                          RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_ATMETH]    = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_ATMETH_BYTES +
                                          RXE_DETH_BYTES +
                                          RXE_RDETH_BYTES,
                }
        },
        [IB_OPCODE_RD_FETCH_ADD]                        = {
                .name   = "IB_OPCODE_RD_FETCH_ADD",
                .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK |
                          RXE_REQ_MASK | RXE_ATOMIC_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES +
                          RXE_RDETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_RDETH]     = RXE_BTH_BYTES,
                        [RXE_DETH]      = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES,
                        [RXE_ATMETH]    = RXE_BTH_BYTES +
                                          RXE_RDETH_BYTES +
                                          RXE_DETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_ATMETH_BYTES +
                                          RXE_DETH_BYTES +
                                          RXE_RDETH_BYTES,
                }
        },

        /* UD */
        [IB_OPCODE_UD_SEND_ONLY]                        = {
                .name   = "IB_OPCODE_UD_SEND_ONLY",
                .mask   = RXE_DETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
                          RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
                          RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_DETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_DETH]      = RXE_BTH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_DETH_BYTES,
                }
        },
        [IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE]         = {
                .name   = "IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE",
                .mask   = RXE_DETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
                          RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
                          RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES,
                .offset = {
                        [RXE_BTH]       = 0,
                        [RXE_DETH]      = RXE_BTH_BYTES,
                        [RXE_IMMDT]     = RXE_BTH_BYTES +
                                          RXE_DETH_BYTES,
                        [RXE_PAYLOAD]   = RXE_BTH_BYTES +
                                          RXE_DETH_BYTES +
                                          RXE_IMMDT_BYTES,
                }
        },

};