GNU Linux-libre 4.14.332-gnu1
[releases.git] / drivers / infiniband / sw / rxe / rxe_opcode.c
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 };