Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
0002 /*
0003  * Copyright (c) 2016 Mellanox Technologies Ltd. All rights reserved.
0004  * Copyright (c) 2015 System Fabric Works, Inc. All rights reserved.
0005  */
0006 
0007 #include <rdma/ib_pack.h>
0008 #include "rxe_opcode.h"
0009 #include "rxe_hdr.h"
0010 
0011 /* useful information about work request opcodes and pkt opcodes in
0012  * table form
0013  */
0014 struct rxe_wr_opcode_info rxe_wr_opcode_info[] = {
0015     [IB_WR_RDMA_WRITE]              = {
0016         .name   = "IB_WR_RDMA_WRITE",
0017         .mask   = {
0018             [IB_QPT_RC] = WR_INLINE_MASK | WR_WRITE_MASK,
0019             [IB_QPT_UC] = WR_INLINE_MASK | WR_WRITE_MASK,
0020         },
0021     },
0022     [IB_WR_RDMA_WRITE_WITH_IMM]         = {
0023         .name   = "IB_WR_RDMA_WRITE_WITH_IMM",
0024         .mask   = {
0025             [IB_QPT_RC] = WR_INLINE_MASK | WR_WRITE_MASK,
0026             [IB_QPT_UC] = WR_INLINE_MASK | WR_WRITE_MASK,
0027         },
0028     },
0029     [IB_WR_SEND]                    = {
0030         .name   = "IB_WR_SEND",
0031         .mask   = {
0032             [IB_QPT_GSI]    = WR_INLINE_MASK | WR_SEND_MASK,
0033             [IB_QPT_RC] = WR_INLINE_MASK | WR_SEND_MASK,
0034             [IB_QPT_UC] = WR_INLINE_MASK | WR_SEND_MASK,
0035             [IB_QPT_UD] = WR_INLINE_MASK | WR_SEND_MASK,
0036         },
0037     },
0038     [IB_WR_SEND_WITH_IMM]               = {
0039         .name   = "IB_WR_SEND_WITH_IMM",
0040         .mask   = {
0041             [IB_QPT_GSI]    = WR_INLINE_MASK | WR_SEND_MASK,
0042             [IB_QPT_RC] = WR_INLINE_MASK | WR_SEND_MASK,
0043             [IB_QPT_UC] = WR_INLINE_MASK | WR_SEND_MASK,
0044             [IB_QPT_UD] = WR_INLINE_MASK | WR_SEND_MASK,
0045         },
0046     },
0047     [IB_WR_RDMA_READ]               = {
0048         .name   = "IB_WR_RDMA_READ",
0049         .mask   = {
0050             [IB_QPT_RC] = WR_READ_MASK,
0051         },
0052     },
0053     [IB_WR_ATOMIC_CMP_AND_SWP]          = {
0054         .name   = "IB_WR_ATOMIC_CMP_AND_SWP",
0055         .mask   = {
0056             [IB_QPT_RC] = WR_ATOMIC_MASK,
0057         },
0058     },
0059     [IB_WR_ATOMIC_FETCH_AND_ADD]            = {
0060         .name   = "IB_WR_ATOMIC_FETCH_AND_ADD",
0061         .mask   = {
0062             [IB_QPT_RC] = WR_ATOMIC_MASK,
0063         },
0064     },
0065     [IB_WR_LSO]                 = {
0066         .name   = "IB_WR_LSO",
0067         .mask   = {
0068             /* not supported */
0069         },
0070     },
0071     [IB_WR_SEND_WITH_INV]               = {
0072         .name   = "IB_WR_SEND_WITH_INV",
0073         .mask   = {
0074             [IB_QPT_RC] = WR_INLINE_MASK | WR_SEND_MASK,
0075             [IB_QPT_UC] = WR_INLINE_MASK | WR_SEND_MASK,
0076             [IB_QPT_UD] = WR_INLINE_MASK | WR_SEND_MASK,
0077         },
0078     },
0079     [IB_WR_RDMA_READ_WITH_INV]          = {
0080         .name   = "IB_WR_RDMA_READ_WITH_INV",
0081         .mask   = {
0082             [IB_QPT_RC] = WR_READ_MASK,
0083         },
0084     },
0085     [IB_WR_LOCAL_INV]               = {
0086         .name   = "IB_WR_LOCAL_INV",
0087         .mask   = {
0088             [IB_QPT_RC] = WR_LOCAL_OP_MASK,
0089         },
0090     },
0091     [IB_WR_REG_MR]                  = {
0092         .name   = "IB_WR_REG_MR",
0093         .mask   = {
0094             [IB_QPT_RC] = WR_LOCAL_OP_MASK,
0095         },
0096     },
0097     [IB_WR_BIND_MW]                 = {
0098         .name   = "IB_WR_BIND_MW",
0099         .mask   = {
0100             [IB_QPT_RC] = WR_LOCAL_OP_MASK,
0101             [IB_QPT_UC] = WR_LOCAL_OP_MASK,
0102         },
0103     },
0104 };
0105 
0106 struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = {
0107     [IB_OPCODE_RC_SEND_FIRST]           = {
0108         .name   = "IB_OPCODE_RC_SEND_FIRST",
0109         .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK |
0110               RXE_SEND_MASK | RXE_START_MASK,
0111         .length = RXE_BTH_BYTES,
0112         .offset = {
0113             [RXE_BTH]   = 0,
0114             [RXE_PAYLOAD]   = RXE_BTH_BYTES,
0115         }
0116     },
0117     [IB_OPCODE_RC_SEND_MIDDLE]      = {
0118         .name   = "IB_OPCODE_RC_SEND_MIDDLE",
0119         .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK |
0120               RXE_MIDDLE_MASK,
0121         .length = RXE_BTH_BYTES,
0122         .offset = {
0123             [RXE_BTH]   = 0,
0124             [RXE_PAYLOAD]   = RXE_BTH_BYTES,
0125         }
0126     },
0127     [IB_OPCODE_RC_SEND_LAST]            = {
0128         .name   = "IB_OPCODE_RC_SEND_LAST",
0129         .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
0130               RXE_SEND_MASK | RXE_END_MASK,
0131         .length = RXE_BTH_BYTES,
0132         .offset = {
0133             [RXE_BTH]   = 0,
0134             [RXE_PAYLOAD]   = RXE_BTH_BYTES,
0135         }
0136     },
0137     [IB_OPCODE_RC_SEND_LAST_WITH_IMMEDIATE]     = {
0138         .name   = "IB_OPCODE_RC_SEND_LAST_WITH_IMMEDIATE",
0139         .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0140               RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
0141         .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
0142         .offset = {
0143             [RXE_BTH]   = 0,
0144             [RXE_IMMDT] = RXE_BTH_BYTES,
0145             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0146                       RXE_IMMDT_BYTES,
0147         }
0148     },
0149     [IB_OPCODE_RC_SEND_ONLY]            = {
0150         .name   = "IB_OPCODE_RC_SEND_ONLY",
0151         .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
0152               RXE_RWR_MASK | RXE_SEND_MASK |
0153               RXE_START_MASK | RXE_END_MASK,
0154         .length = RXE_BTH_BYTES,
0155         .offset = {
0156             [RXE_BTH]   = 0,
0157             [RXE_PAYLOAD]   = RXE_BTH_BYTES,
0158         }
0159     },
0160     [IB_OPCODE_RC_SEND_ONLY_WITH_IMMEDIATE]     = {
0161         .name   = "IB_OPCODE_RC_SEND_ONLY_WITH_IMMEDIATE",
0162         .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0163               RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
0164               RXE_START_MASK | RXE_END_MASK,
0165         .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
0166         .offset = {
0167             [RXE_BTH]   = 0,
0168             [RXE_IMMDT] = RXE_BTH_BYTES,
0169             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0170                       RXE_IMMDT_BYTES,
0171         }
0172     },
0173     [IB_OPCODE_RC_RDMA_WRITE_FIRST]     = {
0174         .name   = "IB_OPCODE_RC_RDMA_WRITE_FIRST",
0175         .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0176               RXE_WRITE_MASK | RXE_START_MASK,
0177         .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
0178         .offset = {
0179             [RXE_BTH]   = 0,
0180             [RXE_RETH]  = RXE_BTH_BYTES,
0181             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0182                       RXE_RETH_BYTES,
0183         }
0184     },
0185     [IB_OPCODE_RC_RDMA_WRITE_MIDDLE]        = {
0186         .name   = "IB_OPCODE_RC_RDMA_WRITE_MIDDLE",
0187         .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
0188               RXE_MIDDLE_MASK,
0189         .length = RXE_BTH_BYTES,
0190         .offset = {
0191             [RXE_BTH]   = 0,
0192             [RXE_PAYLOAD]   = RXE_BTH_BYTES,
0193         }
0194     },
0195     [IB_OPCODE_RC_RDMA_WRITE_LAST]          = {
0196         .name   = "IB_OPCODE_RC_RDMA_WRITE_LAST",
0197         .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
0198               RXE_END_MASK,
0199         .length = RXE_BTH_BYTES,
0200         .offset = {
0201             [RXE_BTH]   = 0,
0202             [RXE_PAYLOAD]   = RXE_BTH_BYTES,
0203         }
0204     },
0205     [IB_OPCODE_RC_RDMA_WRITE_LAST_WITH_IMMEDIATE]       = {
0206         .name   = "IB_OPCODE_RC_RDMA_WRITE_LAST_WITH_IMMEDIATE",
0207         .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0208               RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
0209               RXE_END_MASK,
0210         .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
0211         .offset = {
0212             [RXE_BTH]   = 0,
0213             [RXE_IMMDT] = RXE_BTH_BYTES,
0214             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0215                       RXE_IMMDT_BYTES,
0216         }
0217     },
0218     [IB_OPCODE_RC_RDMA_WRITE_ONLY]          = {
0219         .name   = "IB_OPCODE_RC_RDMA_WRITE_ONLY",
0220         .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0221               RXE_WRITE_MASK | RXE_START_MASK |
0222               RXE_END_MASK,
0223         .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
0224         .offset = {
0225             [RXE_BTH]   = 0,
0226             [RXE_RETH]  = RXE_BTH_BYTES,
0227             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0228                       RXE_RETH_BYTES,
0229         }
0230     },
0231     [IB_OPCODE_RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE]       = {
0232         .name   = "IB_OPCODE_RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
0233         .mask   = RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
0234               RXE_REQ_MASK | RXE_WRITE_MASK |
0235               RXE_COMP_MASK | RXE_RWR_MASK |
0236               RXE_START_MASK | RXE_END_MASK,
0237         .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES,
0238         .offset = {
0239             [RXE_BTH]   = 0,
0240             [RXE_RETH]  = RXE_BTH_BYTES,
0241             [RXE_IMMDT] = RXE_BTH_BYTES +
0242                       RXE_RETH_BYTES,
0243             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0244                       RXE_RETH_BYTES +
0245                       RXE_IMMDT_BYTES,
0246         }
0247     },
0248     [IB_OPCODE_RC_RDMA_READ_REQUEST]            = {
0249         .name   = "IB_OPCODE_RC_RDMA_READ_REQUEST",
0250         .mask   = RXE_RETH_MASK | RXE_REQ_MASK | RXE_READ_MASK |
0251               RXE_START_MASK | RXE_END_MASK,
0252         .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
0253         .offset = {
0254             [RXE_BTH]   = 0,
0255             [RXE_RETH]  = RXE_BTH_BYTES,
0256             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0257                       RXE_RETH_BYTES,
0258         }
0259     },
0260     [IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST]     = {
0261         .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST",
0262         .mask   = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
0263               RXE_START_MASK,
0264         .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
0265         .offset = {
0266             [RXE_BTH]   = 0,
0267             [RXE_AETH]  = RXE_BTH_BYTES,
0268             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0269                       RXE_AETH_BYTES,
0270         }
0271     },
0272     [IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE]        = {
0273         .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE",
0274         .mask   = RXE_PAYLOAD_MASK | RXE_ACK_MASK | RXE_MIDDLE_MASK,
0275         .length = RXE_BTH_BYTES,
0276         .offset = {
0277             [RXE_BTH]   = 0,
0278             [RXE_PAYLOAD]   = RXE_BTH_BYTES,
0279         }
0280     },
0281     [IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST]      = {
0282         .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST",
0283         .mask   = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
0284               RXE_END_MASK,
0285         .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
0286         .offset = {
0287             [RXE_BTH]   = 0,
0288             [RXE_AETH]  = RXE_BTH_BYTES,
0289             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0290                       RXE_AETH_BYTES,
0291         }
0292     },
0293     [IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY]      = {
0294         .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY",
0295         .mask   = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
0296               RXE_START_MASK | RXE_END_MASK,
0297         .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
0298         .offset = {
0299             [RXE_BTH]   = 0,
0300             [RXE_AETH]  = RXE_BTH_BYTES,
0301             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0302                       RXE_AETH_BYTES,
0303         }
0304     },
0305     [IB_OPCODE_RC_ACKNOWLEDGE]          = {
0306         .name   = "IB_OPCODE_RC_ACKNOWLEDGE",
0307         .mask   = RXE_AETH_MASK | RXE_ACK_MASK | RXE_START_MASK |
0308               RXE_END_MASK,
0309         .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
0310         .offset = {
0311             [RXE_BTH]   = 0,
0312             [RXE_AETH]  = RXE_BTH_BYTES,
0313             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0314                       RXE_AETH_BYTES,
0315         }
0316     },
0317     [IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE]           = {
0318         .name   = "IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE",
0319         .mask   = RXE_AETH_MASK | RXE_ATMACK_MASK | RXE_ACK_MASK |
0320               RXE_START_MASK | RXE_END_MASK,
0321         .length = RXE_BTH_BYTES + RXE_ATMACK_BYTES + RXE_AETH_BYTES,
0322         .offset = {
0323             [RXE_BTH]   = 0,
0324             [RXE_AETH]  = RXE_BTH_BYTES,
0325             [RXE_ATMACK]    = RXE_BTH_BYTES +
0326                       RXE_AETH_BYTES,
0327             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0328                       RXE_ATMACK_BYTES +
0329                       RXE_AETH_BYTES,
0330         }
0331     },
0332     [IB_OPCODE_RC_COMPARE_SWAP]         = {
0333         .name   = "IB_OPCODE_RC_COMPARE_SWAP",
0334         .mask   = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK |
0335               RXE_START_MASK | RXE_END_MASK,
0336         .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
0337         .offset = {
0338             [RXE_BTH]   = 0,
0339             [RXE_ATMETH]    = RXE_BTH_BYTES,
0340             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0341                       RXE_ATMETH_BYTES,
0342         }
0343     },
0344     [IB_OPCODE_RC_FETCH_ADD]            = {
0345         .name   = "IB_OPCODE_RC_FETCH_ADD",
0346         .mask   = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK |
0347               RXE_START_MASK | RXE_END_MASK,
0348         .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
0349         .offset = {
0350             [RXE_BTH]   = 0,
0351             [RXE_ATMETH]    = RXE_BTH_BYTES,
0352             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0353                       RXE_ATMETH_BYTES,
0354         }
0355     },
0356     [IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE]        = {
0357         .name   = "IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE",
0358         .mask   = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0359               RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
0360         .length = RXE_BTH_BYTES + RXE_IETH_BYTES,
0361         .offset = {
0362             [RXE_BTH]   = 0,
0363             [RXE_IETH]  = RXE_BTH_BYTES,
0364             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0365                       RXE_IETH_BYTES,
0366         }
0367     },
0368     [IB_OPCODE_RC_SEND_ONLY_WITH_INVALIDATE]        = {
0369         .name   = "IB_OPCODE_RC_SEND_ONLY_INV",
0370         .mask   = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0371               RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
0372               RXE_END_MASK  | RXE_START_MASK,
0373         .length = RXE_BTH_BYTES + RXE_IETH_BYTES,
0374         .offset = {
0375             [RXE_BTH]   = 0,
0376             [RXE_IETH]  = RXE_BTH_BYTES,
0377             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0378                       RXE_IETH_BYTES,
0379         }
0380     },
0381 
0382     /* UC */
0383     [IB_OPCODE_UC_SEND_FIRST]           = {
0384         .name   = "IB_OPCODE_UC_SEND_FIRST",
0385         .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK |
0386               RXE_SEND_MASK | RXE_START_MASK,
0387         .length = RXE_BTH_BYTES,
0388         .offset = {
0389             [RXE_BTH]   = 0,
0390             [RXE_PAYLOAD]   = RXE_BTH_BYTES,
0391         }
0392     },
0393     [IB_OPCODE_UC_SEND_MIDDLE]      = {
0394         .name   = "IB_OPCODE_UC_SEND_MIDDLE",
0395         .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK |
0396               RXE_MIDDLE_MASK,
0397         .length = RXE_BTH_BYTES,
0398         .offset = {
0399             [RXE_BTH]   = 0,
0400             [RXE_PAYLOAD]   = RXE_BTH_BYTES,
0401         }
0402     },
0403     [IB_OPCODE_UC_SEND_LAST]            = {
0404         .name   = "IB_OPCODE_UC_SEND_LAST",
0405         .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
0406               RXE_SEND_MASK | RXE_END_MASK,
0407         .length = RXE_BTH_BYTES,
0408         .offset = {
0409             [RXE_BTH]   = 0,
0410             [RXE_PAYLOAD]   = RXE_BTH_BYTES,
0411         }
0412     },
0413     [IB_OPCODE_UC_SEND_LAST_WITH_IMMEDIATE]     = {
0414         .name   = "IB_OPCODE_UC_SEND_LAST_WITH_IMMEDIATE",
0415         .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0416               RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
0417         .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
0418         .offset = {
0419             [RXE_BTH]   = 0,
0420             [RXE_IMMDT] = RXE_BTH_BYTES,
0421             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0422                       RXE_IMMDT_BYTES,
0423         }
0424     },
0425     [IB_OPCODE_UC_SEND_ONLY]            = {
0426         .name   = "IB_OPCODE_UC_SEND_ONLY",
0427         .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK |
0428               RXE_RWR_MASK | RXE_SEND_MASK |
0429               RXE_START_MASK | RXE_END_MASK,
0430         .length = RXE_BTH_BYTES,
0431         .offset = {
0432             [RXE_BTH]   = 0,
0433             [RXE_PAYLOAD]   = RXE_BTH_BYTES,
0434         }
0435     },
0436     [IB_OPCODE_UC_SEND_ONLY_WITH_IMMEDIATE]     = {
0437         .name   = "IB_OPCODE_UC_SEND_ONLY_WITH_IMMEDIATE",
0438         .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0439               RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
0440               RXE_START_MASK | RXE_END_MASK,
0441         .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
0442         .offset = {
0443             [RXE_BTH]   = 0,
0444             [RXE_IMMDT] = RXE_BTH_BYTES,
0445             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0446                       RXE_IMMDT_BYTES,
0447         }
0448     },
0449     [IB_OPCODE_UC_RDMA_WRITE_FIRST]     = {
0450         .name   = "IB_OPCODE_UC_RDMA_WRITE_FIRST",
0451         .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0452               RXE_WRITE_MASK | RXE_START_MASK,
0453         .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
0454         .offset = {
0455             [RXE_BTH]   = 0,
0456             [RXE_RETH]  = RXE_BTH_BYTES,
0457             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0458                       RXE_RETH_BYTES,
0459         }
0460     },
0461     [IB_OPCODE_UC_RDMA_WRITE_MIDDLE]        = {
0462         .name   = "IB_OPCODE_UC_RDMA_WRITE_MIDDLE",
0463         .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
0464               RXE_MIDDLE_MASK,
0465         .length = RXE_BTH_BYTES,
0466         .offset = {
0467             [RXE_BTH]   = 0,
0468             [RXE_PAYLOAD]   = RXE_BTH_BYTES,
0469         }
0470     },
0471     [IB_OPCODE_UC_RDMA_WRITE_LAST]          = {
0472         .name   = "IB_OPCODE_UC_RDMA_WRITE_LAST",
0473         .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK |
0474               RXE_END_MASK,
0475         .length = RXE_BTH_BYTES,
0476         .offset = {
0477             [RXE_BTH]   = 0,
0478             [RXE_PAYLOAD]   = RXE_BTH_BYTES,
0479         }
0480     },
0481     [IB_OPCODE_UC_RDMA_WRITE_LAST_WITH_IMMEDIATE]       = {
0482         .name   = "IB_OPCODE_UC_RDMA_WRITE_LAST_WITH_IMMEDIATE",
0483         .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0484               RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
0485               RXE_END_MASK,
0486         .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
0487         .offset = {
0488             [RXE_BTH]   = 0,
0489             [RXE_IMMDT] = RXE_BTH_BYTES,
0490             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0491                       RXE_IMMDT_BYTES,
0492         }
0493     },
0494     [IB_OPCODE_UC_RDMA_WRITE_ONLY]          = {
0495         .name   = "IB_OPCODE_UC_RDMA_WRITE_ONLY",
0496         .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0497               RXE_WRITE_MASK | RXE_START_MASK |
0498               RXE_END_MASK,
0499         .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
0500         .offset = {
0501             [RXE_BTH]   = 0,
0502             [RXE_RETH]  = RXE_BTH_BYTES,
0503             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0504                       RXE_RETH_BYTES,
0505         }
0506     },
0507     [IB_OPCODE_UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE]       = {
0508         .name   = "IB_OPCODE_UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
0509         .mask   = RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
0510               RXE_REQ_MASK | RXE_WRITE_MASK |
0511               RXE_COMP_MASK | RXE_RWR_MASK |
0512               RXE_START_MASK | RXE_END_MASK,
0513         .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES,
0514         .offset = {
0515             [RXE_BTH]   = 0,
0516             [RXE_RETH]  = RXE_BTH_BYTES,
0517             [RXE_IMMDT] = RXE_BTH_BYTES +
0518                       RXE_RETH_BYTES,
0519             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0520                       RXE_RETH_BYTES +
0521                       RXE_IMMDT_BYTES,
0522         }
0523     },
0524 
0525     /* RD */
0526     [IB_OPCODE_RD_SEND_FIRST]           = {
0527         .name   = "IB_OPCODE_RD_SEND_FIRST",
0528         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
0529               RXE_REQ_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
0530               RXE_START_MASK,
0531         .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
0532         .offset = {
0533             [RXE_BTH]   = 0,
0534             [RXE_RDETH] = RXE_BTH_BYTES,
0535             [RXE_DETH]  = RXE_BTH_BYTES +
0536                       RXE_RDETH_BYTES,
0537             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0538                       RXE_RDETH_BYTES +
0539                       RXE_DETH_BYTES,
0540         }
0541     },
0542     [IB_OPCODE_RD_SEND_MIDDLE]      = {
0543         .name   = "IB_OPCODE_RD_SEND_MIDDLE",
0544         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
0545               RXE_REQ_MASK | RXE_SEND_MASK |
0546               RXE_MIDDLE_MASK,
0547         .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
0548         .offset = {
0549             [RXE_BTH]   = 0,
0550             [RXE_RDETH] = RXE_BTH_BYTES,
0551             [RXE_DETH]  = RXE_BTH_BYTES +
0552                       RXE_RDETH_BYTES,
0553             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0554                       RXE_RDETH_BYTES +
0555                       RXE_DETH_BYTES,
0556         }
0557     },
0558     [IB_OPCODE_RD_SEND_LAST]            = {
0559         .name   = "IB_OPCODE_RD_SEND_LAST",
0560         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
0561               RXE_REQ_MASK | RXE_COMP_MASK | RXE_SEND_MASK |
0562               RXE_END_MASK,
0563         .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
0564         .offset = {
0565             [RXE_BTH]   = 0,
0566             [RXE_RDETH] = RXE_BTH_BYTES,
0567             [RXE_DETH]  = RXE_BTH_BYTES +
0568                       RXE_RDETH_BYTES,
0569             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0570                       RXE_RDETH_BYTES +
0571                       RXE_DETH_BYTES,
0572         }
0573     },
0574     [IB_OPCODE_RD_SEND_LAST_WITH_IMMEDIATE]     = {
0575         .name   = "IB_OPCODE_RD_SEND_LAST_WITH_IMMEDIATE",
0576         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK |
0577               RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0578               RXE_COMP_MASK | RXE_SEND_MASK |
0579               RXE_END_MASK,
0580         .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES +
0581               RXE_RDETH_BYTES,
0582         .offset = {
0583             [RXE_BTH]   = 0,
0584             [RXE_RDETH] = RXE_BTH_BYTES,
0585             [RXE_DETH]  = RXE_BTH_BYTES +
0586                       RXE_RDETH_BYTES,
0587             [RXE_IMMDT] = RXE_BTH_BYTES +
0588                       RXE_RDETH_BYTES +
0589                       RXE_DETH_BYTES,
0590             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0591                       RXE_RDETH_BYTES +
0592                       RXE_DETH_BYTES +
0593                       RXE_IMMDT_BYTES,
0594         }
0595     },
0596     [IB_OPCODE_RD_SEND_ONLY]            = {
0597         .name   = "IB_OPCODE_RD_SEND_ONLY",
0598         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
0599               RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
0600               RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
0601         .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
0602         .offset = {
0603             [RXE_BTH]   = 0,
0604             [RXE_RDETH] = RXE_BTH_BYTES,
0605             [RXE_DETH]  = RXE_BTH_BYTES +
0606                       RXE_RDETH_BYTES,
0607             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0608                       RXE_RDETH_BYTES +
0609                       RXE_DETH_BYTES,
0610         }
0611     },
0612     [IB_OPCODE_RD_SEND_ONLY_WITH_IMMEDIATE]     = {
0613         .name   = "IB_OPCODE_RD_SEND_ONLY_WITH_IMMEDIATE",
0614         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK |
0615               RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0616               RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
0617               RXE_START_MASK | RXE_END_MASK,
0618         .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES +
0619               RXE_RDETH_BYTES,
0620         .offset = {
0621             [RXE_BTH]   = 0,
0622             [RXE_RDETH] = RXE_BTH_BYTES,
0623             [RXE_DETH]  = RXE_BTH_BYTES +
0624                       RXE_RDETH_BYTES,
0625             [RXE_IMMDT] = RXE_BTH_BYTES +
0626                       RXE_RDETH_BYTES +
0627                       RXE_DETH_BYTES,
0628             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0629                       RXE_RDETH_BYTES +
0630                       RXE_DETH_BYTES +
0631                       RXE_IMMDT_BYTES,
0632         }
0633     },
0634     [IB_OPCODE_RD_RDMA_WRITE_FIRST]     = {
0635         .name   = "IB_OPCODE_RD_RDMA_WRITE_FIRST",
0636         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
0637               RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0638               RXE_WRITE_MASK | RXE_START_MASK,
0639         .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES +
0640               RXE_RDETH_BYTES,
0641         .offset = {
0642             [RXE_BTH]   = 0,
0643             [RXE_RDETH] = RXE_BTH_BYTES,
0644             [RXE_DETH]  = RXE_BTH_BYTES +
0645                       RXE_RDETH_BYTES,
0646             [RXE_RETH]  = RXE_BTH_BYTES +
0647                       RXE_RDETH_BYTES +
0648                       RXE_DETH_BYTES,
0649             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0650                       RXE_RDETH_BYTES +
0651                       RXE_DETH_BYTES +
0652                       RXE_RETH_BYTES,
0653         }
0654     },
0655     [IB_OPCODE_RD_RDMA_WRITE_MIDDLE]        = {
0656         .name   = "IB_OPCODE_RD_RDMA_WRITE_MIDDLE",
0657         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
0658               RXE_REQ_MASK | RXE_WRITE_MASK |
0659               RXE_MIDDLE_MASK,
0660         .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
0661         .offset = {
0662             [RXE_BTH]   = 0,
0663             [RXE_RDETH] = RXE_BTH_BYTES,
0664             [RXE_DETH]  = RXE_BTH_BYTES +
0665                       RXE_RDETH_BYTES,
0666             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0667                       RXE_RDETH_BYTES +
0668                       RXE_DETH_BYTES,
0669         }
0670     },
0671     [IB_OPCODE_RD_RDMA_WRITE_LAST]          = {
0672         .name   = "IB_OPCODE_RD_RDMA_WRITE_LAST",
0673         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK |
0674               RXE_REQ_MASK | RXE_WRITE_MASK |
0675               RXE_END_MASK,
0676         .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
0677         .offset = {
0678             [RXE_BTH]   = 0,
0679             [RXE_RDETH] = RXE_BTH_BYTES,
0680             [RXE_DETH]  = RXE_BTH_BYTES +
0681                       RXE_RDETH_BYTES,
0682             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0683                       RXE_RDETH_BYTES +
0684                       RXE_DETH_BYTES,
0685         }
0686     },
0687     [IB_OPCODE_RD_RDMA_WRITE_LAST_WITH_IMMEDIATE]       = {
0688         .name   = "IB_OPCODE_RD_RDMA_WRITE_LAST_WITH_IMMEDIATE",
0689         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK |
0690               RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0691               RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
0692               RXE_END_MASK,
0693         .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES +
0694               RXE_RDETH_BYTES,
0695         .offset = {
0696             [RXE_BTH]   = 0,
0697             [RXE_RDETH] = RXE_BTH_BYTES,
0698             [RXE_DETH]  = RXE_BTH_BYTES +
0699                       RXE_RDETH_BYTES,
0700             [RXE_IMMDT] = RXE_BTH_BYTES +
0701                       RXE_RDETH_BYTES +
0702                       RXE_DETH_BYTES,
0703             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0704                       RXE_RDETH_BYTES +
0705                       RXE_DETH_BYTES +
0706                       RXE_IMMDT_BYTES,
0707         }
0708     },
0709     [IB_OPCODE_RD_RDMA_WRITE_ONLY]          = {
0710         .name   = "IB_OPCODE_RD_RDMA_WRITE_ONLY",
0711         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
0712                 RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0713                 RXE_WRITE_MASK | RXE_START_MASK |
0714                 RXE_END_MASK,
0715         .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES +
0716               RXE_RDETH_BYTES,
0717         .offset = {
0718             [RXE_BTH]   = 0,
0719             [RXE_RDETH] = RXE_BTH_BYTES,
0720             [RXE_DETH]  = RXE_BTH_BYTES +
0721                       RXE_RDETH_BYTES,
0722             [RXE_RETH]  = RXE_BTH_BYTES +
0723                       RXE_RDETH_BYTES +
0724                       RXE_DETH_BYTES,
0725             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0726                       RXE_RDETH_BYTES +
0727                       RXE_DETH_BYTES +
0728                       RXE_RETH_BYTES,
0729         }
0730     },
0731     [IB_OPCODE_RD_RDMA_WRITE_ONLY_WITH_IMMEDIATE]       = {
0732         .name   = "IB_OPCODE_RD_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
0733         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
0734               RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
0735               RXE_REQ_MASK | RXE_WRITE_MASK |
0736               RXE_COMP_MASK | RXE_RWR_MASK |
0737               RXE_START_MASK | RXE_END_MASK,
0738         .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES +
0739               RXE_DETH_BYTES + RXE_RDETH_BYTES,
0740         .offset = {
0741             [RXE_BTH]   = 0,
0742             [RXE_RDETH] = RXE_BTH_BYTES,
0743             [RXE_DETH]  = RXE_BTH_BYTES +
0744                       RXE_RDETH_BYTES,
0745             [RXE_RETH]  = RXE_BTH_BYTES +
0746                       RXE_RDETH_BYTES +
0747                       RXE_DETH_BYTES,
0748             [RXE_IMMDT] = RXE_BTH_BYTES +
0749                       RXE_RDETH_BYTES +
0750                       RXE_DETH_BYTES +
0751                       RXE_RETH_BYTES,
0752             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0753                       RXE_RDETH_BYTES +
0754                       RXE_DETH_BYTES +
0755                       RXE_RETH_BYTES +
0756                       RXE_IMMDT_BYTES,
0757         }
0758     },
0759     [IB_OPCODE_RD_RDMA_READ_REQUEST]            = {
0760         .name   = "IB_OPCODE_RD_RDMA_READ_REQUEST",
0761         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK |
0762               RXE_REQ_MASK | RXE_READ_MASK |
0763               RXE_START_MASK | RXE_END_MASK,
0764         .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES +
0765               RXE_RDETH_BYTES,
0766         .offset = {
0767             [RXE_BTH]   = 0,
0768             [RXE_RDETH] = RXE_BTH_BYTES,
0769             [RXE_DETH]  = RXE_BTH_BYTES +
0770                       RXE_RDETH_BYTES,
0771             [RXE_RETH]  = RXE_BTH_BYTES +
0772                       RXE_RDETH_BYTES +
0773                       RXE_DETH_BYTES,
0774             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0775                       RXE_RETH_BYTES +
0776                       RXE_DETH_BYTES +
0777                       RXE_RDETH_BYTES,
0778         }
0779     },
0780     [IB_OPCODE_RD_RDMA_READ_RESPONSE_FIRST]     = {
0781         .name   = "IB_OPCODE_RD_RDMA_READ_RESPONSE_FIRST",
0782         .mask   = RXE_RDETH_MASK | RXE_AETH_MASK |
0783               RXE_PAYLOAD_MASK | RXE_ACK_MASK |
0784               RXE_START_MASK,
0785         .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
0786         .offset = {
0787             [RXE_BTH]   = 0,
0788             [RXE_RDETH] = RXE_BTH_BYTES,
0789             [RXE_AETH]  = RXE_BTH_BYTES +
0790                       RXE_RDETH_BYTES,
0791             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0792                       RXE_RDETH_BYTES +
0793                       RXE_AETH_BYTES,
0794         }
0795     },
0796     [IB_OPCODE_RD_RDMA_READ_RESPONSE_MIDDLE]        = {
0797         .name   = "IB_OPCODE_RD_RDMA_READ_RESPONSE_MIDDLE",
0798         .mask   = RXE_RDETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK |
0799               RXE_MIDDLE_MASK,
0800         .length = RXE_BTH_BYTES + RXE_RDETH_BYTES,
0801         .offset = {
0802             [RXE_BTH]   = 0,
0803             [RXE_RDETH] = RXE_BTH_BYTES,
0804             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0805                       RXE_RDETH_BYTES,
0806         }
0807     },
0808     [IB_OPCODE_RD_RDMA_READ_RESPONSE_LAST]      = {
0809         .name   = "IB_OPCODE_RD_RDMA_READ_RESPONSE_LAST",
0810         .mask   = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK |
0811               RXE_ACK_MASK | RXE_END_MASK,
0812         .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
0813         .offset = {
0814             [RXE_BTH]   = 0,
0815             [RXE_RDETH] = RXE_BTH_BYTES,
0816             [RXE_AETH]  = RXE_BTH_BYTES +
0817                       RXE_RDETH_BYTES,
0818             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0819                       RXE_RDETH_BYTES +
0820                       RXE_AETH_BYTES,
0821         }
0822     },
0823     [IB_OPCODE_RD_RDMA_READ_RESPONSE_ONLY]      = {
0824         .name   = "IB_OPCODE_RD_RDMA_READ_RESPONSE_ONLY",
0825         .mask   = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK |
0826               RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
0827         .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
0828         .offset = {
0829             [RXE_BTH]   = 0,
0830             [RXE_RDETH] = RXE_BTH_BYTES,
0831             [RXE_AETH]  = RXE_BTH_BYTES +
0832                       RXE_RDETH_BYTES,
0833             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0834                       RXE_RDETH_BYTES +
0835                       RXE_AETH_BYTES,
0836         }
0837     },
0838     [IB_OPCODE_RD_ACKNOWLEDGE]          = {
0839         .name   = "IB_OPCODE_RD_ACKNOWLEDGE",
0840         .mask   = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ACK_MASK |
0841               RXE_START_MASK | RXE_END_MASK,
0842         .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
0843         .offset = {
0844             [RXE_BTH]   = 0,
0845             [RXE_RDETH] = RXE_BTH_BYTES,
0846             [RXE_AETH]  = RXE_BTH_BYTES +
0847                       RXE_RDETH_BYTES,
0848         }
0849     },
0850     [IB_OPCODE_RD_ATOMIC_ACKNOWLEDGE]           = {
0851         .name   = "IB_OPCODE_RD_ATOMIC_ACKNOWLEDGE",
0852         .mask   = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ATMACK_MASK |
0853               RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
0854         .length = RXE_BTH_BYTES + RXE_ATMACK_BYTES + RXE_AETH_BYTES +
0855               RXE_RDETH_BYTES,
0856         .offset = {
0857             [RXE_BTH]   = 0,
0858             [RXE_RDETH] = RXE_BTH_BYTES,
0859             [RXE_AETH]  = RXE_BTH_BYTES +
0860                       RXE_RDETH_BYTES,
0861             [RXE_ATMACK]    = RXE_BTH_BYTES +
0862                       RXE_RDETH_BYTES +
0863                       RXE_AETH_BYTES,
0864         }
0865     },
0866     [IB_OPCODE_RD_COMPARE_SWAP]         = {
0867         .name   = "RD_COMPARE_SWAP",
0868         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK |
0869               RXE_REQ_MASK | RXE_ATOMIC_MASK |
0870               RXE_START_MASK | RXE_END_MASK,
0871         .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES +
0872               RXE_RDETH_BYTES,
0873         .offset = {
0874             [RXE_BTH]   = 0,
0875             [RXE_RDETH] = RXE_BTH_BYTES,
0876             [RXE_DETH]  = RXE_BTH_BYTES +
0877                       RXE_RDETH_BYTES,
0878             [RXE_ATMETH]    = RXE_BTH_BYTES +
0879                       RXE_RDETH_BYTES +
0880                       RXE_DETH_BYTES,
0881             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0882                       RXE_ATMETH_BYTES +
0883                       RXE_DETH_BYTES +
0884                       RXE_RDETH_BYTES,
0885         }
0886     },
0887     [IB_OPCODE_RD_FETCH_ADD]            = {
0888         .name   = "IB_OPCODE_RD_FETCH_ADD",
0889         .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK |
0890               RXE_REQ_MASK | RXE_ATOMIC_MASK |
0891               RXE_START_MASK | RXE_END_MASK,
0892         .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES +
0893               RXE_RDETH_BYTES,
0894         .offset = {
0895             [RXE_BTH]   = 0,
0896             [RXE_RDETH] = RXE_BTH_BYTES,
0897             [RXE_DETH]  = RXE_BTH_BYTES +
0898                       RXE_RDETH_BYTES,
0899             [RXE_ATMETH]    = RXE_BTH_BYTES +
0900                       RXE_RDETH_BYTES +
0901                       RXE_DETH_BYTES,
0902             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0903                       RXE_ATMETH_BYTES +
0904                       RXE_DETH_BYTES +
0905                       RXE_RDETH_BYTES,
0906         }
0907     },
0908 
0909     /* UD */
0910     [IB_OPCODE_UD_SEND_ONLY]            = {
0911         .name   = "IB_OPCODE_UD_SEND_ONLY",
0912         .mask   = RXE_DETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK |
0913               RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK |
0914               RXE_START_MASK | RXE_END_MASK,
0915         .length = RXE_BTH_BYTES + RXE_DETH_BYTES,
0916         .offset = {
0917             [RXE_BTH]   = 0,
0918             [RXE_DETH]  = RXE_BTH_BYTES,
0919             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0920                       RXE_DETH_BYTES,
0921         }
0922     },
0923     [IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE]     = {
0924         .name   = "IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE",
0925         .mask   = RXE_DETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK |
0926               RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK |
0927               RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
0928         .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES,
0929         .offset = {
0930             [RXE_BTH]   = 0,
0931             [RXE_DETH]  = RXE_BTH_BYTES,
0932             [RXE_IMMDT] = RXE_BTH_BYTES +
0933                       RXE_DETH_BYTES,
0934             [RXE_PAYLOAD]   = RXE_BTH_BYTES +
0935                       RXE_DETH_BYTES +
0936                       RXE_IMMDT_BYTES,
0937         }
0938     },
0939 
0940 };