root/drivers/infiniband/sw/rxe/rxe_opcode.c

/* [<][>][^][v][top][bottom][index][help] */
   1 /*
   2  * Copyright (c) 2016 Mellanox Technologies Ltd. All rights reserved.
   3  * Copyright (c) 2015 System Fabric Works, Inc. All rights reserved.
   4  *
   5  * This software is available to you under a choice of one of two
   6  * licenses.  You may choose to be licensed under the terms of the GNU
   7  * General Public License (GPL) Version 2, available from the file
   8  * COPYING in the main directory of this source tree, or the
   9  * OpenIB.org BSD license below:
  10  *
  11  *     Redistribution and use in source and binary forms, with or
  12  *     without modification, are permitted provided that the following
  13  *     conditions are met:
  14  *
  15  *      - Redistributions of source code must retain the above
  16  *        copyright notice, this list of conditions and the following
  17  *        disclaimer.
  18  *
  19  *      - Redistributions in binary form must reproduce the above
  20  *        copyright notice, this list of conditions and the following
  21  *        disclaimer in the documentation and/or other materials
  22  *        provided with the distribution.
  23  *
  24  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  25  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  26  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  27  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  28  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  29  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  30  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  31  * SOFTWARE.
  32  */
  33 
  34 #include <rdma/ib_pack.h>
  35 #include "rxe_opcode.h"
  36 #include "rxe_hdr.h"
  37 
  38 /* useful information about work request opcodes and pkt opcodes in
  39  * table form
  40  */
  41 struct rxe_wr_opcode_info rxe_wr_opcode_info[] = {
  42         [IB_WR_RDMA_WRITE]                              = {
  43                 .name   = "IB_WR_RDMA_WRITE",
  44                 .mask   = {
  45                         [IB_QPT_RC]     = WR_INLINE_MASK | WR_WRITE_MASK,
  46                         [IB_QPT_UC]     = WR_INLINE_MASK | WR_WRITE_MASK,
  47                 },
  48         },
  49         [IB_WR_RDMA_WRITE_WITH_IMM]                     = {
  50                 .name   = "IB_WR_RDMA_WRITE_WITH_IMM",
  51                 .mask   = {
  52                         [IB_QPT_RC]     = WR_INLINE_MASK | WR_WRITE_MASK,
  53                         [IB_QPT_UC]     = WR_INLINE_MASK | WR_WRITE_MASK,
  54                 },
  55         },
  56         [IB_WR_SEND]                                    = {
  57                 .name   = "IB_WR_SEND",
  58                 .mask   = {
  59                         [IB_QPT_SMI]    = WR_INLINE_MASK | WR_SEND_MASK,
  60                         [IB_QPT_GSI]    = WR_INLINE_MASK | WR_SEND_MASK,
  61                         [IB_QPT_RC]     = WR_INLINE_MASK | WR_SEND_MASK,
  62                         [IB_QPT_UC]     = WR_INLINE_MASK | WR_SEND_MASK,
  63                         [IB_QPT_UD]     = WR_INLINE_MASK | WR_SEND_MASK,
  64                 },
  65         },
  66         [IB_WR_SEND_WITH_IMM]                           = {
  67                 .name   = "IB_WR_SEND_WITH_IMM",
  68                 .mask   = {
  69                         [IB_QPT_SMI]    = WR_INLINE_MASK | WR_SEND_MASK,
  70                         [IB_QPT_GSI]    = WR_INLINE_MASK | WR_SEND_MASK,
  71                         [IB_QPT_RC]     = WR_INLINE_MASK | WR_SEND_MASK,
  72                         [IB_QPT_UC]     = WR_INLINE_MASK | WR_SEND_MASK,
  73                         [IB_QPT_UD]     = WR_INLINE_MASK | WR_SEND_MASK,
  74                 },
  75         },
  76         [IB_WR_RDMA_READ]                               = {
  77                 .name   = "IB_WR_RDMA_READ",
  78                 .mask   = {
  79                         [IB_QPT_RC]     = WR_READ_MASK,
  80                 },
  81         },
  82         [IB_WR_ATOMIC_CMP_AND_SWP]                      = {
  83                 .name   = "IB_WR_ATOMIC_CMP_AND_SWP",
  84                 .mask   = {
  85                         [IB_QPT_RC]     = WR_ATOMIC_MASK,
  86                 },
  87         },
  88         [IB_WR_ATOMIC_FETCH_AND_ADD]                    = {
  89                 .name   = "IB_WR_ATOMIC_FETCH_AND_ADD",
  90                 .mask   = {
  91                         [IB_QPT_RC]     = WR_ATOMIC_MASK,
  92                 },
  93         },
  94         [IB_WR_LSO]                                     = {
  95                 .name   = "IB_WR_LSO",
  96                 .mask   = {
  97                         /* not supported */
  98                 },
  99         },
 100         [IB_WR_SEND_WITH_INV]                           = {
 101                 .name   = "IB_WR_SEND_WITH_INV",
 102                 .mask   = {
 103                         [IB_QPT_RC]     = WR_INLINE_MASK | WR_SEND_MASK,
 104                         [IB_QPT_UC]     = WR_INLINE_MASK | WR_SEND_MASK,
 105                         [IB_QPT_UD]     = WR_INLINE_MASK | WR_SEND_MASK,
 106                 },
 107         },
 108         [IB_WR_RDMA_READ_WITH_INV]                      = {
 109                 .name   = "IB_WR_RDMA_READ_WITH_INV",
 110                 .mask   = {
 111                         [IB_QPT_RC]     = WR_READ_MASK,
 112                 },
 113         },
 114         [IB_WR_LOCAL_INV]                               = {
 115                 .name   = "IB_WR_LOCAL_INV",
 116                 .mask   = {
 117                         [IB_QPT_RC]     = WR_REG_MASK,
 118                 },
 119         },
 120         [IB_WR_REG_MR]                                  = {
 121                 .name   = "IB_WR_REG_MR",
 122                 .mask   = {
 123                         [IB_QPT_RC]     = WR_REG_MASK,
 124                 },
 125         },
 126 };
 127 
 128 struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = {
 129         [IB_OPCODE_RC_SEND_FIRST]                       = {
 130                 .name   = "IB_OPCODE_RC_SEND_FIRST",
 131                 .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK
 132                                 | RXE_SEND_MASK | RXE_START_MASK,
 133                 .length = RXE_BTH_BYTES,
 134                 .offset = {
 135                         [RXE_BTH]       = 0,
 136                         [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 137                 }
 138         },
 139         [IB_OPCODE_RC_SEND_MIDDLE]              = {
 140                 .name   = "IB_OPCODE_RC_SEND_MIDDLE]",
 141                 .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK
 142                                 | RXE_MIDDLE_MASK,
 143                 .length = RXE_BTH_BYTES,
 144                 .offset = {
 145                         [RXE_BTH]       = 0,
 146                         [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 147                 }
 148         },
 149         [IB_OPCODE_RC_SEND_LAST]                        = {
 150                 .name   = "IB_OPCODE_RC_SEND_LAST",
 151                 .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK
 152                                 | RXE_SEND_MASK | RXE_END_MASK,
 153                 .length = RXE_BTH_BYTES,
 154                 .offset = {
 155                         [RXE_BTH]       = 0,
 156                         [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 157                 }
 158         },
 159         [IB_OPCODE_RC_SEND_LAST_WITH_IMMEDIATE]         = {
 160                 .name   = "IB_OPCODE_RC_SEND_LAST_WITH_IMMEDIATE",
 161                 .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 162                                 | RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
 163                 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
 164                 .offset = {
 165                         [RXE_BTH]       = 0,
 166                         [RXE_IMMDT]     = RXE_BTH_BYTES,
 167                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 168                                                 + RXE_IMMDT_BYTES,
 169                 }
 170         },
 171         [IB_OPCODE_RC_SEND_ONLY]                        = {
 172                 .name   = "IB_OPCODE_RC_SEND_ONLY",
 173                 .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK
 174                                 | RXE_RWR_MASK | RXE_SEND_MASK
 175                                 | RXE_START_MASK | RXE_END_MASK,
 176                 .length = RXE_BTH_BYTES,
 177                 .offset = {
 178                         [RXE_BTH]       = 0,
 179                         [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 180                 }
 181         },
 182         [IB_OPCODE_RC_SEND_ONLY_WITH_IMMEDIATE]         = {
 183                 .name   = "IB_OPCODE_RC_SEND_ONLY_WITH_IMMEDIATE",
 184                 .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 185                                 | RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
 186                                 | RXE_START_MASK | RXE_END_MASK,
 187                 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
 188                 .offset = {
 189                         [RXE_BTH]       = 0,
 190                         [RXE_IMMDT]     = RXE_BTH_BYTES,
 191                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 192                                                 + RXE_IMMDT_BYTES,
 193                 }
 194         },
 195         [IB_OPCODE_RC_RDMA_WRITE_FIRST]         = {
 196                 .name   = "IB_OPCODE_RC_RDMA_WRITE_FIRST",
 197                 .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 198                                 | RXE_WRITE_MASK | RXE_START_MASK,
 199                 .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
 200                 .offset = {
 201                         [RXE_BTH]       = 0,
 202                         [RXE_RETH]      = RXE_BTH_BYTES,
 203                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 204                                                 + RXE_RETH_BYTES,
 205                 }
 206         },
 207         [IB_OPCODE_RC_RDMA_WRITE_MIDDLE]                = {
 208                 .name   = "IB_OPCODE_RC_RDMA_WRITE_MIDDLE",
 209                 .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK
 210                                 | RXE_MIDDLE_MASK,
 211                 .length = RXE_BTH_BYTES,
 212                 .offset = {
 213                         [RXE_BTH]       = 0,
 214                         [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 215                 }
 216         },
 217         [IB_OPCODE_RC_RDMA_WRITE_LAST]                  = {
 218                 .name   = "IB_OPCODE_RC_RDMA_WRITE_LAST",
 219                 .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK
 220                                 | RXE_END_MASK,
 221                 .length = RXE_BTH_BYTES,
 222                 .offset = {
 223                         [RXE_BTH]       = 0,
 224                         [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 225                 }
 226         },
 227         [IB_OPCODE_RC_RDMA_WRITE_LAST_WITH_IMMEDIATE]           = {
 228                 .name   = "IB_OPCODE_RC_RDMA_WRITE_LAST_WITH_IMMEDIATE",
 229                 .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 230                                 | RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK
 231                                 | RXE_END_MASK,
 232                 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
 233                 .offset = {
 234                         [RXE_BTH]       = 0,
 235                         [RXE_IMMDT]     = RXE_BTH_BYTES,
 236                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 237                                                 + RXE_IMMDT_BYTES,
 238                 }
 239         },
 240         [IB_OPCODE_RC_RDMA_WRITE_ONLY]                  = {
 241                 .name   = "IB_OPCODE_RC_RDMA_WRITE_ONLY",
 242                 .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 243                                 | RXE_WRITE_MASK | RXE_START_MASK
 244                                 | RXE_END_MASK,
 245                 .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
 246                 .offset = {
 247                         [RXE_BTH]       = 0,
 248                         [RXE_RETH]      = RXE_BTH_BYTES,
 249                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 250                                                 + RXE_RETH_BYTES,
 251                 }
 252         },
 253         [IB_OPCODE_RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE]           = {
 254                 .name   = "IB_OPCODE_RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
 255                 .mask   = RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK
 256                                 | RXE_REQ_MASK | RXE_WRITE_MASK
 257                                 | RXE_COMP_MASK | RXE_RWR_MASK
 258                                 | RXE_START_MASK | RXE_END_MASK,
 259                 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES,
 260                 .offset = {
 261                         [RXE_BTH]       = 0,
 262                         [RXE_RETH]      = RXE_BTH_BYTES,
 263                         [RXE_IMMDT]     = RXE_BTH_BYTES
 264                                                 + RXE_RETH_BYTES,
 265                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 266                                                 + RXE_RETH_BYTES
 267                                                 + RXE_IMMDT_BYTES,
 268                 }
 269         },
 270         [IB_OPCODE_RC_RDMA_READ_REQUEST]                        = {
 271                 .name   = "IB_OPCODE_RC_RDMA_READ_REQUEST",
 272                 .mask   = RXE_RETH_MASK | RXE_REQ_MASK | RXE_READ_MASK
 273                                 | RXE_START_MASK | RXE_END_MASK,
 274                 .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
 275                 .offset = {
 276                         [RXE_BTH]       = 0,
 277                         [RXE_RETH]      = RXE_BTH_BYTES,
 278                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 279                                                 + RXE_RETH_BYTES,
 280                 }
 281         },
 282         [IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST]         = {
 283                 .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST",
 284                 .mask   = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK
 285                                 | RXE_START_MASK,
 286                 .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
 287                 .offset = {
 288                         [RXE_BTH]       = 0,
 289                         [RXE_AETH]      = RXE_BTH_BYTES,
 290                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 291                                                 + RXE_AETH_BYTES,
 292                 }
 293         },
 294         [IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE]                = {
 295                 .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE",
 296                 .mask   = RXE_PAYLOAD_MASK | RXE_ACK_MASK | RXE_MIDDLE_MASK,
 297                 .length = RXE_BTH_BYTES,
 298                 .offset = {
 299                         [RXE_BTH]       = 0,
 300                         [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 301                 }
 302         },
 303         [IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST]          = {
 304                 .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST",
 305                 .mask   = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK
 306                                 | RXE_END_MASK,
 307                 .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
 308                 .offset = {
 309                         [RXE_BTH]       = 0,
 310                         [RXE_AETH]      = RXE_BTH_BYTES,
 311                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 312                                                 + RXE_AETH_BYTES,
 313                 }
 314         },
 315         [IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY]          = {
 316                 .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY",
 317                 .mask   = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK
 318                                 | RXE_START_MASK | RXE_END_MASK,
 319                 .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
 320                 .offset = {
 321                         [RXE_BTH]       = 0,
 322                         [RXE_AETH]      = RXE_BTH_BYTES,
 323                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 324                                                 + RXE_AETH_BYTES,
 325                 }
 326         },
 327         [IB_OPCODE_RC_ACKNOWLEDGE]                      = {
 328                 .name   = "IB_OPCODE_RC_ACKNOWLEDGE",
 329                 .mask   = RXE_AETH_MASK | RXE_ACK_MASK | RXE_START_MASK
 330                                 | RXE_END_MASK,
 331                 .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
 332                 .offset = {
 333                         [RXE_BTH]       = 0,
 334                         [RXE_AETH]      = RXE_BTH_BYTES,
 335                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 336                                                 + RXE_AETH_BYTES,
 337                 }
 338         },
 339         [IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE]                       = {
 340                 .name   = "IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE",
 341                 .mask   = RXE_AETH_MASK | RXE_ATMACK_MASK | RXE_ACK_MASK
 342                                 | RXE_START_MASK | RXE_END_MASK,
 343                 .length = RXE_BTH_BYTES + RXE_ATMACK_BYTES + RXE_AETH_BYTES,
 344                 .offset = {
 345                         [RXE_BTH]       = 0,
 346                         [RXE_AETH]      = RXE_BTH_BYTES,
 347                         [RXE_ATMACK]    = RXE_BTH_BYTES
 348                                                 + RXE_AETH_BYTES,
 349                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 350                                         + RXE_ATMACK_BYTES + RXE_AETH_BYTES,
 351                 }
 352         },
 353         [IB_OPCODE_RC_COMPARE_SWAP]                     = {
 354                 .name   = "IB_OPCODE_RC_COMPARE_SWAP",
 355                 .mask   = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK
 356                                 | RXE_START_MASK | RXE_END_MASK,
 357                 .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
 358                 .offset = {
 359                         [RXE_BTH]       = 0,
 360                         [RXE_ATMETH]    = RXE_BTH_BYTES,
 361                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 362                                                 + RXE_ATMETH_BYTES,
 363                 }
 364         },
 365         [IB_OPCODE_RC_FETCH_ADD]                        = {
 366                 .name   = "IB_OPCODE_RC_FETCH_ADD",
 367                 .mask   = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK
 368                                 | RXE_START_MASK | RXE_END_MASK,
 369                 .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
 370                 .offset = {
 371                         [RXE_BTH]       = 0,
 372                         [RXE_ATMETH]    = RXE_BTH_BYTES,
 373                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 374                                                 + RXE_ATMETH_BYTES,
 375                 }
 376         },
 377         [IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE]                = {
 378                 .name   = "IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE",
 379                 .mask   = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 380                                 | RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
 381                 .length = RXE_BTH_BYTES + RXE_IETH_BYTES,
 382                 .offset = {
 383                         [RXE_BTH]       = 0,
 384                         [RXE_IETH]      = RXE_BTH_BYTES,
 385                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 386                                                 + RXE_IETH_BYTES,
 387                 }
 388         },
 389         [IB_OPCODE_RC_SEND_ONLY_WITH_INVALIDATE]                = {
 390                 .name   = "IB_OPCODE_RC_SEND_ONLY_INV",
 391                 .mask   = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 392                                 | RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
 393                                 | RXE_END_MASK  | RXE_START_MASK,
 394                 .length = RXE_BTH_BYTES + RXE_IETH_BYTES,
 395                 .offset = {
 396                         [RXE_BTH]       = 0,
 397                         [RXE_IETH]      = RXE_BTH_BYTES,
 398                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 399                                                 + RXE_IETH_BYTES,
 400                 }
 401         },
 402 
 403         /* UC */
 404         [IB_OPCODE_UC_SEND_FIRST]                       = {
 405                 .name   = "IB_OPCODE_UC_SEND_FIRST",
 406                 .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK
 407                                 | RXE_SEND_MASK | RXE_START_MASK,
 408                 .length = RXE_BTH_BYTES,
 409                 .offset = {
 410                         [RXE_BTH]       = 0,
 411                         [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 412                 }
 413         },
 414         [IB_OPCODE_UC_SEND_MIDDLE]              = {
 415                 .name   = "IB_OPCODE_UC_SEND_MIDDLE",
 416                 .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK
 417                                 | RXE_MIDDLE_MASK,
 418                 .length = RXE_BTH_BYTES,
 419                 .offset = {
 420                         [RXE_BTH]       = 0,
 421                         [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 422                 }
 423         },
 424         [IB_OPCODE_UC_SEND_LAST]                        = {
 425                 .name   = "IB_OPCODE_UC_SEND_LAST",
 426                 .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK
 427                                 | RXE_SEND_MASK | RXE_END_MASK,
 428                 .length = RXE_BTH_BYTES,
 429                 .offset = {
 430                         [RXE_BTH]       = 0,
 431                         [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 432                 }
 433         },
 434         [IB_OPCODE_UC_SEND_LAST_WITH_IMMEDIATE]         = {
 435                 .name   = "IB_OPCODE_UC_SEND_LAST_WITH_IMMEDIATE",
 436                 .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 437                                 | RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
 438                 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
 439                 .offset = {
 440                         [RXE_BTH]       = 0,
 441                         [RXE_IMMDT]     = RXE_BTH_BYTES,
 442                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 443                                                 + RXE_IMMDT_BYTES,
 444                 }
 445         },
 446         [IB_OPCODE_UC_SEND_ONLY]                        = {
 447                 .name   = "IB_OPCODE_UC_SEND_ONLY",
 448                 .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK
 449                                 | RXE_RWR_MASK | RXE_SEND_MASK
 450                                 | RXE_START_MASK | RXE_END_MASK,
 451                 .length = RXE_BTH_BYTES,
 452                 .offset = {
 453                         [RXE_BTH]       = 0,
 454                         [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 455                 }
 456         },
 457         [IB_OPCODE_UC_SEND_ONLY_WITH_IMMEDIATE]         = {
 458                 .name   = "IB_OPCODE_UC_SEND_ONLY_WITH_IMMEDIATE",
 459                 .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 460                                 | RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
 461                                 | RXE_START_MASK | RXE_END_MASK,
 462                 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
 463                 .offset = {
 464                         [RXE_BTH]       = 0,
 465                         [RXE_IMMDT]     = RXE_BTH_BYTES,
 466                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 467                                                 + RXE_IMMDT_BYTES,
 468                 }
 469         },
 470         [IB_OPCODE_UC_RDMA_WRITE_FIRST]         = {
 471                 .name   = "IB_OPCODE_UC_RDMA_WRITE_FIRST",
 472                 .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 473                                 | RXE_WRITE_MASK | RXE_START_MASK,
 474                 .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
 475                 .offset = {
 476                         [RXE_BTH]       = 0,
 477                         [RXE_RETH]      = RXE_BTH_BYTES,
 478                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 479                                                 + RXE_RETH_BYTES,
 480                 }
 481         },
 482         [IB_OPCODE_UC_RDMA_WRITE_MIDDLE]                = {
 483                 .name   = "IB_OPCODE_UC_RDMA_WRITE_MIDDLE",
 484                 .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK
 485                                 | RXE_MIDDLE_MASK,
 486                 .length = RXE_BTH_BYTES,
 487                 .offset = {
 488                         [RXE_BTH]       = 0,
 489                         [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 490                 }
 491         },
 492         [IB_OPCODE_UC_RDMA_WRITE_LAST]                  = {
 493                 .name   = "IB_OPCODE_UC_RDMA_WRITE_LAST",
 494                 .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK
 495                                 | RXE_END_MASK,
 496                 .length = RXE_BTH_BYTES,
 497                 .offset = {
 498                         [RXE_BTH]       = 0,
 499                         [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 500                 }
 501         },
 502         [IB_OPCODE_UC_RDMA_WRITE_LAST_WITH_IMMEDIATE]           = {
 503                 .name   = "IB_OPCODE_UC_RDMA_WRITE_LAST_WITH_IMMEDIATE",
 504                 .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 505                                 | RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK
 506                                 | RXE_END_MASK,
 507                 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
 508                 .offset = {
 509                         [RXE_BTH]       = 0,
 510                         [RXE_IMMDT]     = RXE_BTH_BYTES,
 511                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 512                                                 + RXE_IMMDT_BYTES,
 513                 }
 514         },
 515         [IB_OPCODE_UC_RDMA_WRITE_ONLY]                  = {
 516                 .name   = "IB_OPCODE_UC_RDMA_WRITE_ONLY",
 517                 .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 518                                 | RXE_WRITE_MASK | RXE_START_MASK
 519                                 | RXE_END_MASK,
 520                 .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
 521                 .offset = {
 522                         [RXE_BTH]       = 0,
 523                         [RXE_RETH]      = RXE_BTH_BYTES,
 524                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 525                                                 + RXE_RETH_BYTES,
 526                 }
 527         },
 528         [IB_OPCODE_UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE]           = {
 529                 .name   = "IB_OPCODE_UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
 530                 .mask   = RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK
 531                                 | RXE_REQ_MASK | RXE_WRITE_MASK
 532                                 | RXE_COMP_MASK | RXE_RWR_MASK
 533                                 | RXE_START_MASK | RXE_END_MASK,
 534                 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES,
 535                 .offset = {
 536                         [RXE_BTH]       = 0,
 537                         [RXE_RETH]      = RXE_BTH_BYTES,
 538                         [RXE_IMMDT]     = RXE_BTH_BYTES
 539                                                 + RXE_RETH_BYTES,
 540                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 541                                                 + RXE_RETH_BYTES
 542                                                 + RXE_IMMDT_BYTES,
 543                 }
 544         },
 545 
 546         /* RD */
 547         [IB_OPCODE_RD_SEND_FIRST]                       = {
 548                 .name   = "IB_OPCODE_RD_SEND_FIRST",
 549                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
 550                                 | RXE_REQ_MASK | RXE_RWR_MASK | RXE_SEND_MASK
 551                                 | RXE_START_MASK,
 552                 .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
 553                 .offset = {
 554                         [RXE_BTH]       = 0,
 555                         [RXE_RDETH]     = RXE_BTH_BYTES,
 556                         [RXE_DETH]      = RXE_BTH_BYTES
 557                                                 + RXE_RDETH_BYTES,
 558                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 559                                                 + RXE_RDETH_BYTES
 560                                                 + RXE_DETH_BYTES,
 561                 }
 562         },
 563         [IB_OPCODE_RD_SEND_MIDDLE]              = {
 564                 .name   = "IB_OPCODE_RD_SEND_MIDDLE",
 565                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
 566                                 | RXE_REQ_MASK | RXE_SEND_MASK
 567                                 | RXE_MIDDLE_MASK,
 568                 .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
 569                 .offset = {
 570                         [RXE_BTH]       = 0,
 571                         [RXE_RDETH]     = RXE_BTH_BYTES,
 572                         [RXE_DETH]      = RXE_BTH_BYTES
 573                                                 + RXE_RDETH_BYTES,
 574                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 575                                                 + RXE_RDETH_BYTES
 576                                                 + RXE_DETH_BYTES,
 577                 }
 578         },
 579         [IB_OPCODE_RD_SEND_LAST]                        = {
 580                 .name   = "IB_OPCODE_RD_SEND_LAST",
 581                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
 582                                 | RXE_REQ_MASK | RXE_COMP_MASK | RXE_SEND_MASK
 583                                 | RXE_END_MASK,
 584                 .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
 585                 .offset = {
 586                         [RXE_BTH]       = 0,
 587                         [RXE_RDETH]     = RXE_BTH_BYTES,
 588                         [RXE_DETH]      = RXE_BTH_BYTES
 589                                                 + RXE_RDETH_BYTES,
 590                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 591                                                 + RXE_RDETH_BYTES
 592                                                 + RXE_DETH_BYTES,
 593                 }
 594         },
 595         [IB_OPCODE_RD_SEND_LAST_WITH_IMMEDIATE]         = {
 596                 .name   = "IB_OPCODE_RD_SEND_LAST_WITH_IMMEDIATE",
 597                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK
 598                                 | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 599                                 | RXE_COMP_MASK | RXE_SEND_MASK
 600                                 | RXE_END_MASK,
 601                 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES
 602                                 + RXE_RDETH_BYTES,
 603                 .offset = {
 604                         [RXE_BTH]       = 0,
 605                         [RXE_RDETH]     = RXE_BTH_BYTES,
 606                         [RXE_DETH]      = RXE_BTH_BYTES
 607                                                 + RXE_RDETH_BYTES,
 608                         [RXE_IMMDT]     = RXE_BTH_BYTES
 609                                                 + RXE_RDETH_BYTES
 610                                                 + RXE_DETH_BYTES,
 611                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 612                                                 + RXE_RDETH_BYTES
 613                                                 + RXE_DETH_BYTES
 614                                                 + RXE_IMMDT_BYTES,
 615                 }
 616         },
 617         [IB_OPCODE_RD_SEND_ONLY]                        = {
 618                 .name   = "IB_OPCODE_RD_SEND_ONLY",
 619                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
 620                                 | RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK
 621                                 | RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
 622                 .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
 623                 .offset = {
 624                         [RXE_BTH]       = 0,
 625                         [RXE_RDETH]     = RXE_BTH_BYTES,
 626                         [RXE_DETH]      = RXE_BTH_BYTES
 627                                                 + RXE_RDETH_BYTES,
 628                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 629                                                 + RXE_RDETH_BYTES
 630                                                 + RXE_DETH_BYTES,
 631                 }
 632         },
 633         [IB_OPCODE_RD_SEND_ONLY_WITH_IMMEDIATE]         = {
 634                 .name   = "IB_OPCODE_RD_SEND_ONLY_WITH_IMMEDIATE",
 635                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK
 636                                 | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 637                                 | RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
 638                                 | RXE_START_MASK | RXE_END_MASK,
 639                 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES
 640                                 + RXE_RDETH_BYTES,
 641                 .offset = {
 642                         [RXE_BTH]       = 0,
 643                         [RXE_RDETH]     = RXE_BTH_BYTES,
 644                         [RXE_DETH]      = RXE_BTH_BYTES
 645                                                 + RXE_RDETH_BYTES,
 646                         [RXE_IMMDT]     = RXE_BTH_BYTES
 647                                                 + RXE_RDETH_BYTES
 648                                                 + RXE_DETH_BYTES,
 649                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 650                                                 + RXE_RDETH_BYTES
 651                                                 + RXE_DETH_BYTES
 652                                                 + RXE_IMMDT_BYTES,
 653                 }
 654         },
 655         [IB_OPCODE_RD_RDMA_WRITE_FIRST]         = {
 656                 .name   = "IB_OPCODE_RD_RDMA_WRITE_FIRST",
 657                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK
 658                                 | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 659                                 | RXE_WRITE_MASK | RXE_START_MASK,
 660                 .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES
 661                                 + RXE_RDETH_BYTES,
 662                 .offset = {
 663                         [RXE_BTH]       = 0,
 664                         [RXE_RDETH]     = RXE_BTH_BYTES,
 665                         [RXE_DETH]      = RXE_BTH_BYTES
 666                                                 + RXE_RDETH_BYTES,
 667                         [RXE_RETH]      = RXE_BTH_BYTES
 668                                                 + RXE_RDETH_BYTES
 669                                                 + RXE_DETH_BYTES,
 670                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 671                                                 + RXE_RDETH_BYTES
 672                                                 + RXE_DETH_BYTES
 673                                                 + RXE_RETH_BYTES,
 674                 }
 675         },
 676         [IB_OPCODE_RD_RDMA_WRITE_MIDDLE]                = {
 677                 .name   = "IB_OPCODE_RD_RDMA_WRITE_MIDDLE",
 678                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
 679                                 | RXE_REQ_MASK | RXE_WRITE_MASK
 680                                 | RXE_MIDDLE_MASK,
 681                 .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
 682                 .offset = {
 683                         [RXE_BTH]       = 0,
 684                         [RXE_RDETH]     = RXE_BTH_BYTES,
 685                         [RXE_DETH]      = RXE_BTH_BYTES
 686                                                 + RXE_RDETH_BYTES,
 687                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 688                                                 + RXE_RDETH_BYTES
 689                                                 + RXE_DETH_BYTES,
 690                 }
 691         },
 692         [IB_OPCODE_RD_RDMA_WRITE_LAST]                  = {
 693                 .name   = "IB_OPCODE_RD_RDMA_WRITE_LAST",
 694                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_PAYLOAD_MASK
 695                                 | RXE_REQ_MASK | RXE_WRITE_MASK
 696                                 | RXE_END_MASK,
 697                 .length = RXE_BTH_BYTES + RXE_DETH_BYTES + RXE_RDETH_BYTES,
 698                 .offset = {
 699                         [RXE_BTH]       = 0,
 700                         [RXE_RDETH]     = RXE_BTH_BYTES,
 701                         [RXE_DETH]      = RXE_BTH_BYTES
 702                                                 + RXE_RDETH_BYTES,
 703                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 704                                                 + RXE_RDETH_BYTES
 705                                                 + RXE_DETH_BYTES,
 706                 }
 707         },
 708         [IB_OPCODE_RD_RDMA_WRITE_LAST_WITH_IMMEDIATE]           = {
 709                 .name   = "IB_OPCODE_RD_RDMA_WRITE_LAST_WITH_IMMEDIATE",
 710                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_IMMDT_MASK
 711                                 | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 712                                 | RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK
 713                                 | RXE_END_MASK,
 714                 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES
 715                                 + RXE_RDETH_BYTES,
 716                 .offset = {
 717                         [RXE_BTH]       = 0,
 718                         [RXE_RDETH]     = RXE_BTH_BYTES,
 719                         [RXE_DETH]      = RXE_BTH_BYTES
 720                                                 + RXE_RDETH_BYTES,
 721                         [RXE_IMMDT]     = RXE_BTH_BYTES
 722                                                 + RXE_RDETH_BYTES
 723                                                 + RXE_DETH_BYTES,
 724                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 725                                                 + RXE_RDETH_BYTES
 726                                                 + RXE_DETH_BYTES
 727                                                 + RXE_IMMDT_BYTES,
 728                 }
 729         },
 730         [IB_OPCODE_RD_RDMA_WRITE_ONLY]                  = {
 731                 .name   = "IB_OPCODE_RD_RDMA_WRITE_ONLY",
 732                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK
 733                                 | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 734                                 | RXE_WRITE_MASK | RXE_START_MASK
 735                                 | RXE_END_MASK,
 736                 .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES
 737                                 + RXE_RDETH_BYTES,
 738                 .offset = {
 739                         [RXE_BTH]       = 0,
 740                         [RXE_RDETH]     = RXE_BTH_BYTES,
 741                         [RXE_DETH]      = RXE_BTH_BYTES
 742                                                 + RXE_RDETH_BYTES,
 743                         [RXE_RETH]      = RXE_BTH_BYTES
 744                                                 + RXE_RDETH_BYTES
 745                                                 + RXE_DETH_BYTES,
 746                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 747                                                 + RXE_RDETH_BYTES
 748                                                 + RXE_DETH_BYTES
 749                                                 + RXE_RETH_BYTES,
 750                 }
 751         },
 752         [IB_OPCODE_RD_RDMA_WRITE_ONLY_WITH_IMMEDIATE]           = {
 753                 .name   = "IB_OPCODE_RD_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
 754                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK
 755                                 | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK
 756                                 | RXE_REQ_MASK | RXE_WRITE_MASK
 757                                 | RXE_COMP_MASK | RXE_RWR_MASK
 758                                 | RXE_START_MASK | RXE_END_MASK,
 759                 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES
 760                                 + RXE_DETH_BYTES + RXE_RDETH_BYTES,
 761                 .offset = {
 762                         [RXE_BTH]       = 0,
 763                         [RXE_RDETH]     = RXE_BTH_BYTES,
 764                         [RXE_DETH]      = RXE_BTH_BYTES
 765                                                 + RXE_RDETH_BYTES,
 766                         [RXE_RETH]      = RXE_BTH_BYTES
 767                                                 + RXE_RDETH_BYTES
 768                                                 + RXE_DETH_BYTES,
 769                         [RXE_IMMDT]     = RXE_BTH_BYTES
 770                                                 + RXE_RDETH_BYTES
 771                                                 + RXE_DETH_BYTES
 772                                                 + RXE_RETH_BYTES,
 773                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 774                                                 + RXE_RDETH_BYTES
 775                                                 + RXE_DETH_BYTES
 776                                                 + RXE_RETH_BYTES
 777                                                 + RXE_IMMDT_BYTES,
 778                 }
 779         },
 780         [IB_OPCODE_RD_RDMA_READ_REQUEST]                        = {
 781                 .name   = "IB_OPCODE_RD_RDMA_READ_REQUEST",
 782                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_RETH_MASK
 783                                 | RXE_REQ_MASK | RXE_READ_MASK
 784                                 | RXE_START_MASK | RXE_END_MASK,
 785                 .length = RXE_BTH_BYTES + RXE_RETH_BYTES + RXE_DETH_BYTES
 786                                 + RXE_RDETH_BYTES,
 787                 .offset = {
 788                         [RXE_BTH]       = 0,
 789                         [RXE_RDETH]     = RXE_BTH_BYTES,
 790                         [RXE_DETH]      = RXE_BTH_BYTES
 791                                                 + RXE_RDETH_BYTES,
 792                         [RXE_RETH]      = RXE_BTH_BYTES
 793                                                 + RXE_RDETH_BYTES
 794                                                 + RXE_DETH_BYTES,
 795                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 796                                                 + RXE_RETH_BYTES
 797                                                 + RXE_DETH_BYTES
 798                                                 + RXE_RDETH_BYTES,
 799                 }
 800         },
 801         [IB_OPCODE_RD_RDMA_READ_RESPONSE_FIRST]         = {
 802                 .name   = "IB_OPCODE_RD_RDMA_READ_RESPONSE_FIRST",
 803                 .mask   = RXE_RDETH_MASK | RXE_AETH_MASK
 804                                 | RXE_PAYLOAD_MASK | RXE_ACK_MASK
 805                                 | RXE_START_MASK,
 806                 .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
 807                 .offset = {
 808                         [RXE_BTH]       = 0,
 809                         [RXE_RDETH]     = RXE_BTH_BYTES,
 810                         [RXE_AETH]      = RXE_BTH_BYTES
 811                                                 + RXE_RDETH_BYTES,
 812                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 813                                                 + RXE_RDETH_BYTES
 814                                                 + RXE_AETH_BYTES,
 815                 }
 816         },
 817         [IB_OPCODE_RD_RDMA_READ_RESPONSE_MIDDLE]                = {
 818                 .name   = "IB_OPCODE_RD_RDMA_READ_RESPONSE_MIDDLE",
 819                 .mask   = RXE_RDETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK
 820                                 | RXE_MIDDLE_MASK,
 821                 .length = RXE_BTH_BYTES + RXE_RDETH_BYTES,
 822                 .offset = {
 823                         [RXE_BTH]       = 0,
 824                         [RXE_RDETH]     = RXE_BTH_BYTES,
 825                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 826                                                 + RXE_RDETH_BYTES,
 827                 }
 828         },
 829         [IB_OPCODE_RD_RDMA_READ_RESPONSE_LAST]          = {
 830                 .name   = "IB_OPCODE_RD_RDMA_READ_RESPONSE_LAST",
 831                 .mask   = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK
 832                                 | RXE_ACK_MASK | RXE_END_MASK,
 833                 .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
 834                 .offset = {
 835                         [RXE_BTH]       = 0,
 836                         [RXE_RDETH]     = RXE_BTH_BYTES,
 837                         [RXE_AETH]      = RXE_BTH_BYTES
 838                                                 + RXE_RDETH_BYTES,
 839                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 840                                                 + RXE_RDETH_BYTES
 841                                                 + RXE_AETH_BYTES,
 842                 }
 843         },
 844         [IB_OPCODE_RD_RDMA_READ_RESPONSE_ONLY]          = {
 845                 .name   = "IB_OPCODE_RD_RDMA_READ_RESPONSE_ONLY",
 846                 .mask   = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_PAYLOAD_MASK
 847                                 | RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
 848                 .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
 849                 .offset = {
 850                         [RXE_BTH]       = 0,
 851                         [RXE_RDETH]     = RXE_BTH_BYTES,
 852                         [RXE_AETH]      = RXE_BTH_BYTES
 853                                                 + RXE_RDETH_BYTES,
 854                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 855                                                 + RXE_RDETH_BYTES
 856                                                 + RXE_AETH_BYTES,
 857                 }
 858         },
 859         [IB_OPCODE_RD_ACKNOWLEDGE]                      = {
 860                 .name   = "IB_OPCODE_RD_ACKNOWLEDGE",
 861                 .mask   = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ACK_MASK
 862                                 | RXE_START_MASK | RXE_END_MASK,
 863                 .length = RXE_BTH_BYTES + RXE_AETH_BYTES + RXE_RDETH_BYTES,
 864                 .offset = {
 865                         [RXE_BTH]       = 0,
 866                         [RXE_RDETH]     = RXE_BTH_BYTES,
 867                         [RXE_AETH]      = RXE_BTH_BYTES
 868                                                 + RXE_RDETH_BYTES,
 869                 }
 870         },
 871         [IB_OPCODE_RD_ATOMIC_ACKNOWLEDGE]                       = {
 872                 .name   = "IB_OPCODE_RD_ATOMIC_ACKNOWLEDGE",
 873                 .mask   = RXE_RDETH_MASK | RXE_AETH_MASK | RXE_ATMACK_MASK
 874                                 | RXE_ACK_MASK | RXE_START_MASK | RXE_END_MASK,
 875                 .length = RXE_BTH_BYTES + RXE_ATMACK_BYTES + RXE_AETH_BYTES
 876                                 + RXE_RDETH_BYTES,
 877                 .offset = {
 878                         [RXE_BTH]       = 0,
 879                         [RXE_RDETH]     = RXE_BTH_BYTES,
 880                         [RXE_AETH]      = RXE_BTH_BYTES
 881                                                 + RXE_RDETH_BYTES,
 882                         [RXE_ATMACK]    = RXE_BTH_BYTES
 883                                                 + RXE_RDETH_BYTES
 884                                                 + RXE_AETH_BYTES,
 885                 }
 886         },
 887         [IB_OPCODE_RD_COMPARE_SWAP]                     = {
 888                 .name   = "RD_COMPARE_SWAP",
 889                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK
 890                                 | RXE_REQ_MASK | RXE_ATOMIC_MASK
 891                                 | RXE_START_MASK | RXE_END_MASK,
 892                 .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES
 893                                 + RXE_RDETH_BYTES,
 894                 .offset = {
 895                         [RXE_BTH]       = 0,
 896                         [RXE_RDETH]     = RXE_BTH_BYTES,
 897                         [RXE_DETH]      = RXE_BTH_BYTES
 898                                                 + RXE_RDETH_BYTES,
 899                         [RXE_ATMETH]    = RXE_BTH_BYTES
 900                                                 + RXE_RDETH_BYTES
 901                                                 + RXE_DETH_BYTES,
 902                         [RXE_PAYLOAD]   = RXE_BTH_BYTES +
 903                                                 + RXE_ATMETH_BYTES
 904                                                 + RXE_DETH_BYTES +
 905                                                 + RXE_RDETH_BYTES,
 906                 }
 907         },
 908         [IB_OPCODE_RD_FETCH_ADD]                        = {
 909                 .name   = "IB_OPCODE_RD_FETCH_ADD",
 910                 .mask   = RXE_RDETH_MASK | RXE_DETH_MASK | RXE_ATMETH_MASK
 911                                 | RXE_REQ_MASK | RXE_ATOMIC_MASK
 912                                 | RXE_START_MASK | RXE_END_MASK,
 913                 .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES + RXE_DETH_BYTES
 914                                 + RXE_RDETH_BYTES,
 915                 .offset = {
 916                         [RXE_BTH]       = 0,
 917                         [RXE_RDETH]     = RXE_BTH_BYTES,
 918                         [RXE_DETH]      = RXE_BTH_BYTES
 919                                                 + RXE_RDETH_BYTES,
 920                         [RXE_ATMETH]    = RXE_BTH_BYTES
 921                                                 + RXE_RDETH_BYTES
 922                                                 + RXE_DETH_BYTES,
 923                         [RXE_PAYLOAD]   = RXE_BTH_BYTES +
 924                                                 + RXE_ATMETH_BYTES
 925                                                 + RXE_DETH_BYTES +
 926                                                 + RXE_RDETH_BYTES,
 927                 }
 928         },
 929 
 930         /* UD */
 931         [IB_OPCODE_UD_SEND_ONLY]                        = {
 932                 .name   = "IB_OPCODE_UD_SEND_ONLY",
 933                 .mask   = RXE_DETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 934                                 | RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
 935                                 | RXE_START_MASK | RXE_END_MASK,
 936                 .length = RXE_BTH_BYTES + RXE_DETH_BYTES,
 937                 .offset = {
 938                         [RXE_BTH]       = 0,
 939                         [RXE_DETH]      = RXE_BTH_BYTES,
 940                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 941                                                 + RXE_DETH_BYTES,
 942                 }
 943         },
 944         [IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE]         = {
 945                 .name   = "IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE",
 946                 .mask   = RXE_DETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK
 947                                 | RXE_REQ_MASK | RXE_COMP_MASK | RXE_RWR_MASK
 948                                 | RXE_SEND_MASK | RXE_START_MASK | RXE_END_MASK,
 949                 .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_DETH_BYTES,
 950                 .offset = {
 951                         [RXE_BTH]       = 0,
 952                         [RXE_DETH]      = RXE_BTH_BYTES,
 953                         [RXE_IMMDT]     = RXE_BTH_BYTES
 954                                                 + RXE_DETH_BYTES,
 955                         [RXE_PAYLOAD]   = RXE_BTH_BYTES
 956                                                 + RXE_DETH_BYTES
 957                                                 + RXE_IMMDT_BYTES,
 958                 }
 959         },
 960 
 961 };

/* [<][>][^][v][top][bottom][index][help] */