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 }; 962