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