linux/drivers/infiniband/sw/rxe/rxe_opcode.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2016 Mellanox Technologies Ltd. All rights reserved.
   3 * Copyright (c) 2015 System Fabric Works, Inc. All rights reserved.
   4 *
   5 * This software is available to you under a choice of one of two
   6 * licenses.  You may choose to be licensed under the terms of the GNU
   7 * General Public License (GPL) Version 2, available from the file
   8 * COPYING in the main directory of this source tree, or the
   9 * OpenIB.org BSD license below:
  10 *
  11 *     Redistribution and use in source and binary forms, with or
  12 *     without modification, are permitted provided that the following
  13 *     conditions are met:
  14 *
  15 *      - Redistributions of source code must retain the above
  16 *        copyright notice, this list of conditions and the following
  17 *        disclaimer.
  18 *
  19 *      - Redistributions in binary form must reproduce the above
  20 *        copyright notice, this list of conditions and the following
  21 *        disclaimer in the documentation and/or other materials
  22 *        provided with the distribution.
  23 *
  24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  28 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  29 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  30 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  31 * SOFTWARE.
  32 */
  33
  34#include <rdma/ib_pack.h>
  35#include "rxe_opcode.h"
  36#include "rxe_hdr.h"
  37
  38/* useful information about work request opcodes and pkt opcodes in
  39 * table form
  40 */
  41struct rxe_wr_opcode_info rxe_wr_opcode_info[] = {
  42        [IB_WR_RDMA_WRITE]                              = {
  43                .name   = "IB_WR_RDMA_WRITE",
  44                .mask   = {
  45                        [IB_QPT_RC]     = WR_INLINE_MASK | WR_WRITE_MASK,
  46                        [IB_QPT_UC]     = WR_INLINE_MASK | WR_WRITE_MASK,
  47                },
  48        },
  49        [IB_WR_RDMA_WRITE_WITH_IMM]                     = {
  50                .name   = "IB_WR_RDMA_WRITE_WITH_IMM",
  51                .mask   = {
  52                        [IB_QPT_RC]     = WR_INLINE_MASK | WR_WRITE_MASK,
  53                        [IB_QPT_UC]     = WR_INLINE_MASK | WR_WRITE_MASK,
  54                },
  55        },
  56        [IB_WR_SEND]                                    = {
  57                .name   = "IB_WR_SEND",
  58                .mask   = {
  59                        [IB_QPT_SMI]    = WR_INLINE_MASK | WR_SEND_MASK,
  60                        [IB_QPT_GSI]    = WR_INLINE_MASK | WR_SEND_MASK,
  61                        [IB_QPT_RC]     = WR_INLINE_MASK | WR_SEND_MASK,
  62                        [IB_QPT_UC]     = WR_INLINE_MASK | WR_SEND_MASK,
  63                        [IB_QPT_UD]     = WR_INLINE_MASK | WR_SEND_MASK,
  64                },
  65        },
  66        [IB_WR_SEND_WITH_IMM]                           = {
  67                .name   = "IB_WR_SEND_WITH_IMM",
  68                .mask   = {
  69                        [IB_QPT_SMI]    = WR_INLINE_MASK | WR_SEND_MASK,
  70                        [IB_QPT_GSI]    = WR_INLINE_MASK | WR_SEND_MASK,
  71                        [IB_QPT_RC]     = WR_INLINE_MASK | WR_SEND_MASK,
  72                        [IB_QPT_UC]     = WR_INLINE_MASK | WR_SEND_MASK,
  73                        [IB_QPT_UD]     = WR_INLINE_MASK | WR_SEND_MASK,
  74                },
  75        },
  76        [IB_WR_RDMA_READ]                               = {
  77                .name   = "IB_WR_RDMA_READ",
  78                .mask   = {
  79                        [IB_QPT_RC]     = WR_READ_MASK,
  80                },
  81        },
  82        [IB_WR_ATOMIC_CMP_AND_SWP]                      = {
  83                .name   = "IB_WR_ATOMIC_CMP_AND_SWP",
  84                .mask   = {
  85                        [IB_QPT_RC]     = WR_ATOMIC_MASK,
  86                },
  87        },
  88        [IB_WR_ATOMIC_FETCH_AND_ADD]                    = {
  89                .name   = "IB_WR_ATOMIC_FETCH_AND_ADD",
  90                .mask   = {
  91                        [IB_QPT_RC]     = WR_ATOMIC_MASK,
  92                },
  93        },
  94        [IB_WR_LSO]                                     = {
  95                .name   = "IB_WR_LSO",
  96                .mask   = {
  97                        /* not supported */
  98                },
  99        },
 100        [IB_WR_SEND_WITH_INV]                           = {
 101                .name   = "IB_WR_SEND_WITH_INV",
 102                .mask   = {
 103                        [IB_QPT_RC]     = WR_INLINE_MASK | WR_SEND_MASK,
 104                        [IB_QPT_UC]     = WR_INLINE_MASK | WR_SEND_MASK,
 105                        [IB_QPT_UD]     = WR_INLINE_MASK | WR_SEND_MASK,
 106                },
 107        },
 108        [IB_WR_RDMA_READ_WITH_INV]                      = {
 109                .name   = "IB_WR_RDMA_READ_WITH_INV",
 110                .mask   = {
 111                        [IB_QPT_RC]     = WR_READ_MASK,
 112                },
 113        },
 114        [IB_WR_LOCAL_INV]                               = {
 115                .name   = "IB_WR_LOCAL_INV",
 116                .mask   = {
 117                        [IB_QPT_RC]     = WR_REG_MASK,
 118                },
 119        },
 120        [IB_WR_REG_MR]                                  = {
 121                .name   = "IB_WR_REG_MR",
 122                .mask   = {
 123                        [IB_QPT_RC]     = WR_REG_MASK,
 124                },
 125        },
 126};
 127
 128struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = {
 129        [IB_OPCODE_RC_SEND_FIRST]                       = {
 130                .name   = "IB_OPCODE_RC_SEND_FIRST",
 131                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_RWR_MASK
 132                                | RXE_SEND_MASK | RXE_START_MASK,
 133                .length = RXE_BTH_BYTES,
 134                .offset = {
 135                        [RXE_BTH]       = 0,
 136                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 137                }
 138        },
 139        [IB_OPCODE_RC_SEND_MIDDLE]              = {
 140                .name   = "IB_OPCODE_RC_SEND_MIDDLE]",
 141                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_SEND_MASK
 142                                | RXE_MIDDLE_MASK,
 143                .length = RXE_BTH_BYTES,
 144                .offset = {
 145                        [RXE_BTH]       = 0,
 146                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 147                }
 148        },
 149        [IB_OPCODE_RC_SEND_LAST]                        = {
 150                .name   = "IB_OPCODE_RC_SEND_LAST",
 151                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK
 152                                | RXE_SEND_MASK | RXE_END_MASK,
 153                .length = RXE_BTH_BYTES,
 154                .offset = {
 155                        [RXE_BTH]       = 0,
 156                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 157                }
 158        },
 159        [IB_OPCODE_RC_SEND_LAST_WITH_IMMEDIATE]         = {
 160                .name   = "IB_OPCODE_RC_SEND_LAST_WITH_IMMEDIATE",
 161                .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 162                                | RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
 163                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
 164                .offset = {
 165                        [RXE_BTH]       = 0,
 166                        [RXE_IMMDT]     = RXE_BTH_BYTES,
 167                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 168                                                + RXE_IMMDT_BYTES,
 169                }
 170        },
 171        [IB_OPCODE_RC_SEND_ONLY]                        = {
 172                .name   = "IB_OPCODE_RC_SEND_ONLY",
 173                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_COMP_MASK
 174                                | RXE_RWR_MASK | RXE_SEND_MASK
 175                                | RXE_START_MASK | RXE_END_MASK,
 176                .length = RXE_BTH_BYTES,
 177                .offset = {
 178                        [RXE_BTH]       = 0,
 179                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 180                }
 181        },
 182        [IB_OPCODE_RC_SEND_ONLY_WITH_IMMEDIATE]         = {
 183                .name   = "IB_OPCODE_RC_SEND_ONLY_WITH_IMMEDIATE",
 184                .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 185                                | RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
 186                                | RXE_START_MASK | RXE_END_MASK,
 187                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
 188                .offset = {
 189                        [RXE_BTH]       = 0,
 190                        [RXE_IMMDT]     = RXE_BTH_BYTES,
 191                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 192                                                + RXE_IMMDT_BYTES,
 193                }
 194        },
 195        [IB_OPCODE_RC_RDMA_WRITE_FIRST]         = {
 196                .name   = "IB_OPCODE_RC_RDMA_WRITE_FIRST",
 197                .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 198                                | RXE_WRITE_MASK | RXE_START_MASK,
 199                .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
 200                .offset = {
 201                        [RXE_BTH]       = 0,
 202                        [RXE_RETH]      = RXE_BTH_BYTES,
 203                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 204                                                + RXE_RETH_BYTES,
 205                }
 206        },
 207        [IB_OPCODE_RC_RDMA_WRITE_MIDDLE]                = {
 208                .name   = "IB_OPCODE_RC_RDMA_WRITE_MIDDLE",
 209                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK
 210                                | RXE_MIDDLE_MASK,
 211                .length = RXE_BTH_BYTES,
 212                .offset = {
 213                        [RXE_BTH]       = 0,
 214                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 215                }
 216        },
 217        [IB_OPCODE_RC_RDMA_WRITE_LAST]                  = {
 218                .name   = "IB_OPCODE_RC_RDMA_WRITE_LAST",
 219                .mask   = RXE_PAYLOAD_MASK | RXE_REQ_MASK | RXE_WRITE_MASK
 220                                | RXE_END_MASK,
 221                .length = RXE_BTH_BYTES,
 222                .offset = {
 223                        [RXE_BTH]       = 0,
 224                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 225                }
 226        },
 227        [IB_OPCODE_RC_RDMA_WRITE_LAST_WITH_IMMEDIATE]           = {
 228                .name   = "IB_OPCODE_RC_RDMA_WRITE_LAST_WITH_IMMEDIATE",
 229                .mask   = RXE_IMMDT_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 230                                | RXE_WRITE_MASK | RXE_COMP_MASK | RXE_RWR_MASK
 231                                | RXE_END_MASK,
 232                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES,
 233                .offset = {
 234                        [RXE_BTH]       = 0,
 235                        [RXE_IMMDT]     = RXE_BTH_BYTES,
 236                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 237                                                + RXE_IMMDT_BYTES,
 238                }
 239        },
 240        [IB_OPCODE_RC_RDMA_WRITE_ONLY]                  = {
 241                .name   = "IB_OPCODE_RC_RDMA_WRITE_ONLY",
 242                .mask   = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 243                                | RXE_WRITE_MASK | RXE_START_MASK
 244                                | RXE_END_MASK,
 245                .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
 246                .offset = {
 247                        [RXE_BTH]       = 0,
 248                        [RXE_RETH]      = RXE_BTH_BYTES,
 249                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 250                                                + RXE_RETH_BYTES,
 251                }
 252        },
 253        [IB_OPCODE_RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE]           = {
 254                .name   = "IB_OPCODE_RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE",
 255                .mask   = RXE_RETH_MASK | RXE_IMMDT_MASK | RXE_PAYLOAD_MASK
 256                                | RXE_REQ_MASK | RXE_WRITE_MASK
 257                                | RXE_COMP_MASK | RXE_RWR_MASK
 258                                | RXE_START_MASK | RXE_END_MASK,
 259                .length = RXE_BTH_BYTES + RXE_IMMDT_BYTES + RXE_RETH_BYTES,
 260                .offset = {
 261                        [RXE_BTH]       = 0,
 262                        [RXE_RETH]      = RXE_BTH_BYTES,
 263                        [RXE_IMMDT]     = RXE_BTH_BYTES
 264                                                + RXE_RETH_BYTES,
 265                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 266                                                + RXE_RETH_BYTES
 267                                                + RXE_IMMDT_BYTES,
 268                }
 269        },
 270        [IB_OPCODE_RC_RDMA_READ_REQUEST]                        = {
 271                .name   = "IB_OPCODE_RC_RDMA_READ_REQUEST",
 272                .mask   = RXE_RETH_MASK | RXE_REQ_MASK | RXE_READ_MASK
 273                                | RXE_START_MASK | RXE_END_MASK,
 274                .length = RXE_BTH_BYTES + RXE_RETH_BYTES,
 275                .offset = {
 276                        [RXE_BTH]       = 0,
 277                        [RXE_RETH]      = RXE_BTH_BYTES,
 278                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 279                                                + RXE_RETH_BYTES,
 280                }
 281        },
 282        [IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST]         = {
 283                .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_FIRST",
 284                .mask   = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK
 285                                | RXE_START_MASK,
 286                .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
 287                .offset = {
 288                        [RXE_BTH]       = 0,
 289                        [RXE_AETH]      = RXE_BTH_BYTES,
 290                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 291                                                + RXE_AETH_BYTES,
 292                }
 293        },
 294        [IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE]                = {
 295                .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE",
 296                .mask   = RXE_PAYLOAD_MASK | RXE_ACK_MASK | RXE_MIDDLE_MASK,
 297                .length = RXE_BTH_BYTES,
 298                .offset = {
 299                        [RXE_BTH]       = 0,
 300                        [RXE_PAYLOAD]   = RXE_BTH_BYTES,
 301                }
 302        },
 303        [IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST]          = {
 304                .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_LAST",
 305                .mask   = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK
 306                                | RXE_END_MASK,
 307                .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
 308                .offset = {
 309                        [RXE_BTH]       = 0,
 310                        [RXE_AETH]      = RXE_BTH_BYTES,
 311                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 312                                                + RXE_AETH_BYTES,
 313                }
 314        },
 315        [IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY]          = {
 316                .name   = "IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY",
 317                .mask   = RXE_AETH_MASK | RXE_PAYLOAD_MASK | RXE_ACK_MASK
 318                                | RXE_START_MASK | RXE_END_MASK,
 319                .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
 320                .offset = {
 321                        [RXE_BTH]       = 0,
 322                        [RXE_AETH]      = RXE_BTH_BYTES,
 323                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 324                                                + RXE_AETH_BYTES,
 325                }
 326        },
 327        [IB_OPCODE_RC_ACKNOWLEDGE]                      = {
 328                .name   = "IB_OPCODE_RC_ACKNOWLEDGE",
 329                .mask   = RXE_AETH_MASK | RXE_ACK_MASK | RXE_START_MASK
 330                                | RXE_END_MASK,
 331                .length = RXE_BTH_BYTES + RXE_AETH_BYTES,
 332                .offset = {
 333                        [RXE_BTH]       = 0,
 334                        [RXE_AETH]      = RXE_BTH_BYTES,
 335                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 336                                                + RXE_AETH_BYTES,
 337                }
 338        },
 339        [IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE]                       = {
 340                .name   = "IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE",
 341                .mask   = RXE_AETH_MASK | RXE_ATMACK_MASK | RXE_ACK_MASK
 342                                | RXE_START_MASK | RXE_END_MASK,
 343                .length = RXE_BTH_BYTES + RXE_ATMACK_BYTES + RXE_AETH_BYTES,
 344                .offset = {
 345                        [RXE_BTH]       = 0,
 346                        [RXE_AETH]      = RXE_BTH_BYTES,
 347                        [RXE_ATMACK]    = RXE_BTH_BYTES
 348                                                + RXE_AETH_BYTES,
 349                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 350                                        + RXE_ATMACK_BYTES + RXE_AETH_BYTES,
 351                }
 352        },
 353        [IB_OPCODE_RC_COMPARE_SWAP]                     = {
 354                .name   = "IB_OPCODE_RC_COMPARE_SWAP",
 355                .mask   = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK
 356                                | RXE_START_MASK | RXE_END_MASK,
 357                .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
 358                .offset = {
 359                        [RXE_BTH]       = 0,
 360                        [RXE_ATMETH]    = RXE_BTH_BYTES,
 361                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 362                                                + RXE_ATMETH_BYTES,
 363                }
 364        },
 365        [IB_OPCODE_RC_FETCH_ADD]                        = {
 366                .name   = "IB_OPCODE_RC_FETCH_ADD",
 367                .mask   = RXE_ATMETH_MASK | RXE_REQ_MASK | RXE_ATOMIC_MASK
 368                                | RXE_START_MASK | RXE_END_MASK,
 369                .length = RXE_BTH_BYTES + RXE_ATMETH_BYTES,
 370                .offset = {
 371                        [RXE_BTH]       = 0,
 372                        [RXE_ATMETH]    = RXE_BTH_BYTES,
 373                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 374                                                + RXE_ATMETH_BYTES,
 375                }
 376        },
 377        [IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE]                = {
 378                .name   = "IB_OPCODE_RC_SEND_LAST_WITH_INVALIDATE",
 379                .mask   = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 380                                | RXE_COMP_MASK | RXE_SEND_MASK | RXE_END_MASK,
 381                .length = RXE_BTH_BYTES + RXE_IETH_BYTES,
 382                .offset = {
 383                        [RXE_BTH]       = 0,
 384                        [RXE_IETH]      = RXE_BTH_BYTES,
 385                        [RXE_PAYLOAD]   = RXE_BTH_BYTES
 386                                                + RXE_IETH_BYTES,
 387                }
 388        },
 389        [IB_OPCODE_RC_SEND_ONLY_WITH_INVALIDATE]                = {
 390                .name   = "IB_OPCODE_RC_SEND_ONLY_INV",
 391                .mask   = RXE_IETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK
 392                                | RXE_COMP_MASK | RXE_RWR_MASK | RXE_SEND_MASK
 393                                | RXE_END_MASK  | 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};
 962