hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/drivers/infiniband/core/cm_msgs.h
....@@ -1,39 +1,14 @@
1
+/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
12 /*
23 * Copyright (c) 2004, 2011 Intel Corporation. All rights reserved.
34 * Copyright (c) 2004 Topspin Corporation. All rights reserved.
45 * Copyright (c) 2004 Voltaire Corporation. All rights reserved.
5
- *
6
- * This software is available to you under a choice of one of two
7
- * licenses. You may choose to be licensed under the terms of the GNU
8
- * General Public License (GPL) Version 2, available from the file
9
- * COPYING the madirectory of this source tree, or the
10
- * OpenIB.org BSD license below:
11
- *
12
- * Redistribution and use source and binary forms, with or
13
- * withmodification, are permitted provided that the following
14
- * conditions are met:
15
- *
16
- * - Redistributions of source code must retathe above
17
- * copyright notice, this list of conditions and the following
18
- * disclaimer.
19
- *
20
- * - Redistributions binary form must reproduce the above
21
- * copyright notice, this list of conditions and the following
22
- * disclaimer the documentation and/or other materials
23
- * provided with the distribution.
24
- *
25
- * THE SOFTWARE IS PROVIDED "AS IS", WITHWARRANTY OF ANY KIND,
26
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28
- * NONINFRINGEMENT. NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER AN
30
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OF OR IN
31
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS THE
32
- * SOFTWARE.
6
+ * Copyright (c) 2019, Mellanox Technologies inc. All rights reserved.
337 */
34
-#if !defined(CM_MSGS_H)
8
+#ifndef CM_MSGS_H
359 #define CM_MSGS_H
3610
11
+#include <rdma/ibta_vol1_c12.h>
3712 #include <rdma/ib_mad.h>
3813 #include <rdma/ib_cm.h>
3914
....@@ -44,120 +19,14 @@
4419
4520 #define IB_CM_CLASS_VERSION 2 /* IB specification 1.2 */
4621
47
-struct cm_req_msg {
48
- struct ib_mad_hdr hdr;
49
-
50
- __be32 local_comm_id;
51
- __be32 rsvd4;
52
- __be64 service_id;
53
- __be64 local_ca_guid;
54
- __be32 rsvd24;
55
- __be32 local_qkey;
56
- /* local QPN:24, responder resources:8 */
57
- __be32 offset32;
58
- /* local EECN:24, initiator depth:8 */
59
- __be32 offset36;
60
- /*
61
- * remote EECN:24, remote CM response timeout:5,
62
- * transport service type:2, end-to-end flow control:1
63
- */
64
- __be32 offset40;
65
- /* starting PSN:24, local CM response timeout:5, retry count:3 */
66
- __be32 offset44;
67
- __be16 pkey;
68
- /* path MTU:4, RDC exists:1, RNR retry count:3. */
69
- u8 offset50;
70
- /* max CM Retries:4, SRQ:1, extended transport type:3 */
71
- u8 offset51;
72
-
73
- __be16 primary_local_lid;
74
- __be16 primary_remote_lid;
75
- union ib_gid primary_local_gid;
76
- union ib_gid primary_remote_gid;
77
- /* flow label:20, rsvd:6, packet rate:6 */
78
- __be32 primary_offset88;
79
- u8 primary_traffic_class;
80
- u8 primary_hop_limit;
81
- /* SL:4, subnet local:1, rsvd:3 */
82
- u8 primary_offset94;
83
- /* local ACK timeout:5, rsvd:3 */
84
- u8 primary_offset95;
85
-
86
- __be16 alt_local_lid;
87
- __be16 alt_remote_lid;
88
- union ib_gid alt_local_gid;
89
- union ib_gid alt_remote_gid;
90
- /* flow label:20, rsvd:6, packet rate:6 */
91
- __be32 alt_offset132;
92
- u8 alt_traffic_class;
93
- u8 alt_hop_limit;
94
- /* SL:4, subnet local:1, rsvd:3 */
95
- u8 alt_offset138;
96
- /* local ACK timeout:5, rsvd:3 */
97
- u8 alt_offset139;
98
-
99
- u32 private_data[IB_CM_REQ_PRIVATE_DATA_SIZE / sizeof(u32)];
100
-
101
-} __attribute__ ((packed));
102
-
103
-static inline __be32 cm_req_get_local_qpn(struct cm_req_msg *req_msg)
104
-{
105
- return cpu_to_be32(be32_to_cpu(req_msg->offset32) >> 8);
106
-}
107
-
108
-static inline void cm_req_set_local_qpn(struct cm_req_msg *req_msg, __be32 qpn)
109
-{
110
- req_msg->offset32 = cpu_to_be32((be32_to_cpu(qpn) << 8) |
111
- (be32_to_cpu(req_msg->offset32) &
112
- 0x000000FF));
113
-}
114
-
115
-static inline u8 cm_req_get_resp_res(struct cm_req_msg *req_msg)
116
-{
117
- return (u8) be32_to_cpu(req_msg->offset32);
118
-}
119
-
120
-static inline void cm_req_set_resp_res(struct cm_req_msg *req_msg, u8 resp_res)
121
-{
122
- req_msg->offset32 = cpu_to_be32(resp_res |
123
- (be32_to_cpu(req_msg->offset32) &
124
- 0xFFFFFF00));
125
-}
126
-
127
-static inline u8 cm_req_get_init_depth(struct cm_req_msg *req_msg)
128
-{
129
- return (u8) be32_to_cpu(req_msg->offset36);
130
-}
131
-
132
-static inline void cm_req_set_init_depth(struct cm_req_msg *req_msg,
133
- u8 init_depth)
134
-{
135
- req_msg->offset36 = cpu_to_be32(init_depth |
136
- (be32_to_cpu(req_msg->offset36) &
137
- 0xFFFFFF00));
138
-}
139
-
140
-static inline u8 cm_req_get_remote_resp_timeout(struct cm_req_msg *req_msg)
141
-{
142
- return (u8) ((be32_to_cpu(req_msg->offset40) & 0xF8) >> 3);
143
-}
144
-
145
-static inline void cm_req_set_remote_resp_timeout(struct cm_req_msg *req_msg,
146
- u8 resp_timeout)
147
-{
148
- req_msg->offset40 = cpu_to_be32((resp_timeout << 3) |
149
- (be32_to_cpu(req_msg->offset40) &
150
- 0xFFFFFF07));
151
-}
152
-
15322 static inline enum ib_qp_type cm_req_get_qp_type(struct cm_req_msg *req_msg)
15423 {
155
- u8 transport_type = (u8) (be32_to_cpu(req_msg->offset40) & 0x06) >> 1;
24
+ u8 transport_type = IBA_GET(CM_REQ_TRANSPORT_SERVICE_TYPE, req_msg);
15625 switch(transport_type) {
15726 case 0: return IB_QPT_RC;
15827 case 1: return IB_QPT_UC;
15928 case 3:
160
- switch (req_msg->offset51 & 0x7) {
29
+ switch (IBA_GET(CM_REQ_EXTENDED_TRANSPORT_TYPE, req_msg)) {
16130 case 1: return IB_QPT_XRC_TGT;
16231 default: return 0;
16332 }
....@@ -170,238 +39,15 @@
17039 {
17140 switch(qp_type) {
17241 case IB_QPT_UC:
173
- req_msg->offset40 = cpu_to_be32((be32_to_cpu(
174
- req_msg->offset40) &
175
- 0xFFFFFFF9) | 0x2);
42
+ IBA_SET(CM_REQ_TRANSPORT_SERVICE_TYPE, req_msg, 1);
17643 break;
17744 case IB_QPT_XRC_INI:
178
- req_msg->offset40 = cpu_to_be32((be32_to_cpu(
179
- req_msg->offset40) &
180
- 0xFFFFFFF9) | 0x6);
181
- req_msg->offset51 = (req_msg->offset51 & 0xF8) | 1;
45
+ IBA_SET(CM_REQ_TRANSPORT_SERVICE_TYPE, req_msg, 3);
46
+ IBA_SET(CM_REQ_EXTENDED_TRANSPORT_TYPE, req_msg, 1);
18247 break;
18348 default:
184
- req_msg->offset40 = cpu_to_be32(be32_to_cpu(
185
- req_msg->offset40) &
186
- 0xFFFFFFF9);
49
+ IBA_SET(CM_REQ_TRANSPORT_SERVICE_TYPE, req_msg, 0);
18750 }
188
-}
189
-
190
-static inline u8 cm_req_get_flow_ctrl(struct cm_req_msg *req_msg)
191
-{
192
- return be32_to_cpu(req_msg->offset40) & 0x1;
193
-}
194
-
195
-static inline void cm_req_set_flow_ctrl(struct cm_req_msg *req_msg,
196
- u8 flow_ctrl)
197
-{
198
- req_msg->offset40 = cpu_to_be32((flow_ctrl & 0x1) |
199
- (be32_to_cpu(req_msg->offset40) &
200
- 0xFFFFFFFE));
201
-}
202
-
203
-static inline __be32 cm_req_get_starting_psn(struct cm_req_msg *req_msg)
204
-{
205
- return cpu_to_be32(be32_to_cpu(req_msg->offset44) >> 8);
206
-}
207
-
208
-static inline void cm_req_set_starting_psn(struct cm_req_msg *req_msg,
209
- __be32 starting_psn)
210
-{
211
- req_msg->offset44 = cpu_to_be32((be32_to_cpu(starting_psn) << 8) |
212
- (be32_to_cpu(req_msg->offset44) & 0x000000FF));
213
-}
214
-
215
-static inline u8 cm_req_get_local_resp_timeout(struct cm_req_msg *req_msg)
216
-{
217
- return (u8) ((be32_to_cpu(req_msg->offset44) & 0xF8) >> 3);
218
-}
219
-
220
-static inline void cm_req_set_local_resp_timeout(struct cm_req_msg *req_msg,
221
- u8 resp_timeout)
222
-{
223
- req_msg->offset44 = cpu_to_be32((resp_timeout << 3) |
224
- (be32_to_cpu(req_msg->offset44) & 0xFFFFFF07));
225
-}
226
-
227
-static inline u8 cm_req_get_retry_count(struct cm_req_msg *req_msg)
228
-{
229
- return (u8) (be32_to_cpu(req_msg->offset44) & 0x7);
230
-}
231
-
232
-static inline void cm_req_set_retry_count(struct cm_req_msg *req_msg,
233
- u8 retry_count)
234
-{
235
- req_msg->offset44 = cpu_to_be32((retry_count & 0x7) |
236
- (be32_to_cpu(req_msg->offset44) & 0xFFFFFFF8));
237
-}
238
-
239
-static inline u8 cm_req_get_path_mtu(struct cm_req_msg *req_msg)
240
-{
241
- return req_msg->offset50 >> 4;
242
-}
243
-
244
-static inline void cm_req_set_path_mtu(struct cm_req_msg *req_msg, u8 path_mtu)
245
-{
246
- req_msg->offset50 = (u8) ((req_msg->offset50 & 0xF) | (path_mtu << 4));
247
-}
248
-
249
-static inline u8 cm_req_get_rnr_retry_count(struct cm_req_msg *req_msg)
250
-{
251
- return req_msg->offset50 & 0x7;
252
-}
253
-
254
-static inline void cm_req_set_rnr_retry_count(struct cm_req_msg *req_msg,
255
- u8 rnr_retry_count)
256
-{
257
- req_msg->offset50 = (u8) ((req_msg->offset50 & 0xF8) |
258
- (rnr_retry_count & 0x7));
259
-}
260
-
261
-static inline u8 cm_req_get_max_cm_retries(struct cm_req_msg *req_msg)
262
-{
263
- return req_msg->offset51 >> 4;
264
-}
265
-
266
-static inline void cm_req_set_max_cm_retries(struct cm_req_msg *req_msg,
267
- u8 retries)
268
-{
269
- req_msg->offset51 = (u8) ((req_msg->offset51 & 0xF) | (retries << 4));
270
-}
271
-
272
-static inline u8 cm_req_get_srq(struct cm_req_msg *req_msg)
273
-{
274
- return (req_msg->offset51 & 0x8) >> 3;
275
-}
276
-
277
-static inline void cm_req_set_srq(struct cm_req_msg *req_msg, u8 srq)
278
-{
279
- req_msg->offset51 = (u8) ((req_msg->offset51 & 0xF7) |
280
- ((srq & 0x1) << 3));
281
-}
282
-
283
-static inline __be32 cm_req_get_primary_flow_label(struct cm_req_msg *req_msg)
284
-{
285
- return cpu_to_be32(be32_to_cpu(req_msg->primary_offset88) >> 12);
286
-}
287
-
288
-static inline void cm_req_set_primary_flow_label(struct cm_req_msg *req_msg,
289
- __be32 flow_label)
290
-{
291
- req_msg->primary_offset88 = cpu_to_be32(
292
- (be32_to_cpu(req_msg->primary_offset88) &
293
- 0x00000FFF) |
294
- (be32_to_cpu(flow_label) << 12));
295
-}
296
-
297
-static inline u8 cm_req_get_primary_packet_rate(struct cm_req_msg *req_msg)
298
-{
299
- return (u8) (be32_to_cpu(req_msg->primary_offset88) & 0x3F);
300
-}
301
-
302
-static inline void cm_req_set_primary_packet_rate(struct cm_req_msg *req_msg,
303
- u8 rate)
304
-{
305
- req_msg->primary_offset88 = cpu_to_be32(
306
- (be32_to_cpu(req_msg->primary_offset88) &
307
- 0xFFFFFFC0) | (rate & 0x3F));
308
-}
309
-
310
-static inline u8 cm_req_get_primary_sl(struct cm_req_msg *req_msg)
311
-{
312
- return (u8) (req_msg->primary_offset94 >> 4);
313
-}
314
-
315
-static inline void cm_req_set_primary_sl(struct cm_req_msg *req_msg, u8 sl)
316
-{
317
- req_msg->primary_offset94 = (u8) ((req_msg->primary_offset94 & 0x0F) |
318
- (sl << 4));
319
-}
320
-
321
-static inline u8 cm_req_get_primary_subnet_local(struct cm_req_msg *req_msg)
322
-{
323
- return (u8) ((req_msg->primary_offset94 & 0x08) >> 3);
324
-}
325
-
326
-static inline void cm_req_set_primary_subnet_local(struct cm_req_msg *req_msg,
327
- u8 subnet_local)
328
-{
329
- req_msg->primary_offset94 = (u8) ((req_msg->primary_offset94 & 0xF7) |
330
- ((subnet_local & 0x1) << 3));
331
-}
332
-
333
-static inline u8 cm_req_get_primary_local_ack_timeout(struct cm_req_msg *req_msg)
334
-{
335
- return (u8) (req_msg->primary_offset95 >> 3);
336
-}
337
-
338
-static inline void cm_req_set_primary_local_ack_timeout(struct cm_req_msg *req_msg,
339
- u8 local_ack_timeout)
340
-{
341
- req_msg->primary_offset95 = (u8) ((req_msg->primary_offset95 & 0x07) |
342
- (local_ack_timeout << 3));
343
-}
344
-
345
-static inline __be32 cm_req_get_alt_flow_label(struct cm_req_msg *req_msg)
346
-{
347
- return cpu_to_be32(be32_to_cpu(req_msg->alt_offset132) >> 12);
348
-}
349
-
350
-static inline void cm_req_set_alt_flow_label(struct cm_req_msg *req_msg,
351
- __be32 flow_label)
352
-{
353
- req_msg->alt_offset132 = cpu_to_be32(
354
- (be32_to_cpu(req_msg->alt_offset132) &
355
- 0x00000FFF) |
356
- (be32_to_cpu(flow_label) << 12));
357
-}
358
-
359
-static inline u8 cm_req_get_alt_packet_rate(struct cm_req_msg *req_msg)
360
-{
361
- return (u8) (be32_to_cpu(req_msg->alt_offset132) & 0x3F);
362
-}
363
-
364
-static inline void cm_req_set_alt_packet_rate(struct cm_req_msg *req_msg,
365
- u8 rate)
366
-{
367
- req_msg->alt_offset132 = cpu_to_be32(
368
- (be32_to_cpu(req_msg->alt_offset132) &
369
- 0xFFFFFFC0) | (rate & 0x3F));
370
-}
371
-
372
-static inline u8 cm_req_get_alt_sl(struct cm_req_msg *req_msg)
373
-{
374
- return (u8) (req_msg->alt_offset138 >> 4);
375
-}
376
-
377
-static inline void cm_req_set_alt_sl(struct cm_req_msg *req_msg, u8 sl)
378
-{
379
- req_msg->alt_offset138 = (u8) ((req_msg->alt_offset138 & 0x0F) |
380
- (sl << 4));
381
-}
382
-
383
-static inline u8 cm_req_get_alt_subnet_local(struct cm_req_msg *req_msg)
384
-{
385
- return (u8) ((req_msg->alt_offset138 & 0x08) >> 3);
386
-}
387
-
388
-static inline void cm_req_set_alt_subnet_local(struct cm_req_msg *req_msg,
389
- u8 subnet_local)
390
-{
391
- req_msg->alt_offset138 = (u8) ((req_msg->alt_offset138 & 0xF7) |
392
- ((subnet_local & 0x1) << 3));
393
-}
394
-
395
-static inline u8 cm_req_get_alt_local_ack_timeout(struct cm_req_msg *req_msg)
396
-{
397
- return (u8) (req_msg->alt_offset139 >> 3);
398
-}
399
-
400
-static inline void cm_req_set_alt_local_ack_timeout(struct cm_req_msg *req_msg,
401
- u8 local_ack_timeout)
402
-{
403
- req_msg->alt_offset139 = (u8) ((req_msg->alt_offset139 & 0x07) |
404
- (local_ack_timeout << 3));
40551 }
40652
40753 /* Message REJected or MRAed */
....@@ -411,419 +57,12 @@
41157 CM_MSG_RESPONSE_OTHER = 0x2
41258 };
41359
414
- struct cm_mra_msg {
415
- struct ib_mad_hdr hdr;
416
-
417
- __be32 local_comm_id;
418
- __be32 remote_comm_id;
419
- /* message MRAed:2, rsvd:6 */
420
- u8 offset8;
421
- /* service timeout:5, rsvd:3 */
422
- u8 offset9;
423
-
424
- u8 private_data[IB_CM_MRA_PRIVATE_DATA_SIZE];
425
-
426
-} __attribute__ ((packed));
427
-
428
-static inline u8 cm_mra_get_msg_mraed(struct cm_mra_msg *mra_msg)
429
-{
430
- return (u8) (mra_msg->offset8 >> 6);
431
-}
432
-
433
-static inline void cm_mra_set_msg_mraed(struct cm_mra_msg *mra_msg, u8 msg)
434
-{
435
- mra_msg->offset8 = (u8) ((mra_msg->offset8 & 0x3F) | (msg << 6));
436
-}
437
-
438
-static inline u8 cm_mra_get_service_timeout(struct cm_mra_msg *mra_msg)
439
-{
440
- return (u8) (mra_msg->offset9 >> 3);
441
-}
442
-
443
-static inline void cm_mra_set_service_timeout(struct cm_mra_msg *mra_msg,
444
- u8 service_timeout)
445
-{
446
- mra_msg->offset9 = (u8) ((mra_msg->offset9 & 0x07) |
447
- (service_timeout << 3));
448
-}
449
-
450
-struct cm_rej_msg {
451
- struct ib_mad_hdr hdr;
452
-
453
- __be32 local_comm_id;
454
- __be32 remote_comm_id;
455
- /* message REJected:2, rsvd:6 */
456
- u8 offset8;
457
- /* reject info length:7, rsvd:1. */
458
- u8 offset9;
459
- __be16 reason;
460
- u8 ari[IB_CM_REJ_ARI_LENGTH];
461
-
462
- u8 private_data[IB_CM_REJ_PRIVATE_DATA_SIZE];
463
-
464
-} __attribute__ ((packed));
465
-
466
-static inline u8 cm_rej_get_msg_rejected(struct cm_rej_msg *rej_msg)
467
-{
468
- return (u8) (rej_msg->offset8 >> 6);
469
-}
470
-
471
-static inline void cm_rej_set_msg_rejected(struct cm_rej_msg *rej_msg, u8 msg)
472
-{
473
- rej_msg->offset8 = (u8) ((rej_msg->offset8 & 0x3F) | (msg << 6));
474
-}
475
-
476
-static inline u8 cm_rej_get_reject_info_len(struct cm_rej_msg *rej_msg)
477
-{
478
- return (u8) (rej_msg->offset9 >> 1);
479
-}
480
-
481
-static inline void cm_rej_set_reject_info_len(struct cm_rej_msg *rej_msg,
482
- u8 len)
483
-{
484
- rej_msg->offset9 = (u8) ((rej_msg->offset9 & 0x1) | (len << 1));
485
-}
486
-
487
-struct cm_rep_msg {
488
- struct ib_mad_hdr hdr;
489
-
490
- __be32 local_comm_id;
491
- __be32 remote_comm_id;
492
- __be32 local_qkey;
493
- /* local QPN:24, rsvd:8 */
494
- __be32 offset12;
495
- /* local EECN:24, rsvd:8 */
496
- __be32 offset16;
497
- /* starting PSN:24 rsvd:8 */
498
- __be32 offset20;
499
- u8 resp_resources;
500
- u8 initiator_depth;
501
- /* target ACK delay:5, failover accepted:2, end-to-end flow control:1 */
502
- u8 offset26;
503
- /* RNR retry count:3, SRQ:1, rsvd:5 */
504
- u8 offset27;
505
- __be64 local_ca_guid;
506
-
507
- u8 private_data[IB_CM_REP_PRIVATE_DATA_SIZE];
508
-
509
-} __attribute__ ((packed));
510
-
511
-static inline __be32 cm_rep_get_local_qpn(struct cm_rep_msg *rep_msg)
512
-{
513
- return cpu_to_be32(be32_to_cpu(rep_msg->offset12) >> 8);
514
-}
515
-
516
-static inline void cm_rep_set_local_qpn(struct cm_rep_msg *rep_msg, __be32 qpn)
517
-{
518
- rep_msg->offset12 = cpu_to_be32((be32_to_cpu(qpn) << 8) |
519
- (be32_to_cpu(rep_msg->offset12) & 0x000000FF));
520
-}
521
-
522
-static inline __be32 cm_rep_get_local_eecn(struct cm_rep_msg *rep_msg)
523
-{
524
- return cpu_to_be32(be32_to_cpu(rep_msg->offset16) >> 8);
525
-}
526
-
527
-static inline void cm_rep_set_local_eecn(struct cm_rep_msg *rep_msg, __be32 eecn)
528
-{
529
- rep_msg->offset16 = cpu_to_be32((be32_to_cpu(eecn) << 8) |
530
- (be32_to_cpu(rep_msg->offset16) & 0x000000FF));
531
-}
532
-
53360 static inline __be32 cm_rep_get_qpn(struct cm_rep_msg *rep_msg, enum ib_qp_type qp_type)
53461 {
53562 return (qp_type == IB_QPT_XRC_INI) ?
536
- cm_rep_get_local_eecn(rep_msg) : cm_rep_get_local_qpn(rep_msg);
537
-}
538
-
539
-static inline __be32 cm_rep_get_starting_psn(struct cm_rep_msg *rep_msg)
540
-{
541
- return cpu_to_be32(be32_to_cpu(rep_msg->offset20) >> 8);
542
-}
543
-
544
-static inline void cm_rep_set_starting_psn(struct cm_rep_msg *rep_msg,
545
- __be32 starting_psn)
546
-{
547
- rep_msg->offset20 = cpu_to_be32((be32_to_cpu(starting_psn) << 8) |
548
- (be32_to_cpu(rep_msg->offset20) & 0x000000FF));
549
-}
550
-
551
-static inline u8 cm_rep_get_target_ack_delay(struct cm_rep_msg *rep_msg)
552
-{
553
- return (u8) (rep_msg->offset26 >> 3);
554
-}
555
-
556
-static inline void cm_rep_set_target_ack_delay(struct cm_rep_msg *rep_msg,
557
- u8 target_ack_delay)
558
-{
559
- rep_msg->offset26 = (u8) ((rep_msg->offset26 & 0x07) |
560
- (target_ack_delay << 3));
561
-}
562
-
563
-static inline u8 cm_rep_get_failover(struct cm_rep_msg *rep_msg)
564
-{
565
- return (u8) ((rep_msg->offset26 & 0x06) >> 1);
566
-}
567
-
568
-static inline void cm_rep_set_failover(struct cm_rep_msg *rep_msg, u8 failover)
569
-{
570
- rep_msg->offset26 = (u8) ((rep_msg->offset26 & 0xF9) |
571
- ((failover & 0x3) << 1));
572
-}
573
-
574
-static inline u8 cm_rep_get_flow_ctrl(struct cm_rep_msg *rep_msg)
575
-{
576
- return (u8) (rep_msg->offset26 & 0x01);
577
-}
578
-
579
-static inline void cm_rep_set_flow_ctrl(struct cm_rep_msg *rep_msg,
580
- u8 flow_ctrl)
581
-{
582
- rep_msg->offset26 = (u8) ((rep_msg->offset26 & 0xFE) |
583
- (flow_ctrl & 0x1));
584
-}
585
-
586
-static inline u8 cm_rep_get_rnr_retry_count(struct cm_rep_msg *rep_msg)
587
-{
588
- return (u8) (rep_msg->offset27 >> 5);
589
-}
590
-
591
-static inline void cm_rep_set_rnr_retry_count(struct cm_rep_msg *rep_msg,
592
- u8 rnr_retry_count)
593
-{
594
- rep_msg->offset27 = (u8) ((rep_msg->offset27 & 0x1F) |
595
- (rnr_retry_count << 5));
596
-}
597
-
598
-static inline u8 cm_rep_get_srq(struct cm_rep_msg *rep_msg)
599
-{
600
- return (u8) ((rep_msg->offset27 >> 4) & 0x1);
601
-}
602
-
603
-static inline void cm_rep_set_srq(struct cm_rep_msg *rep_msg, u8 srq)
604
-{
605
- rep_msg->offset27 = (u8) ((rep_msg->offset27 & 0xEF) |
606
- ((srq & 0x1) << 4));
607
-}
608
-
609
-struct cm_rtu_msg {
610
- struct ib_mad_hdr hdr;
611
-
612
- __be32 local_comm_id;
613
- __be32 remote_comm_id;
614
-
615
- u8 private_data[IB_CM_RTU_PRIVATE_DATA_SIZE];
616
-
617
-} __attribute__ ((packed));
618
-
619
-struct cm_dreq_msg {
620
- struct ib_mad_hdr hdr;
621
-
622
- __be32 local_comm_id;
623
- __be32 remote_comm_id;
624
- /* remote QPN/EECN:24, rsvd:8 */
625
- __be32 offset8;
626
-
627
- u8 private_data[IB_CM_DREQ_PRIVATE_DATA_SIZE];
628
-
629
-} __attribute__ ((packed));
630
-
631
-static inline __be32 cm_dreq_get_remote_qpn(struct cm_dreq_msg *dreq_msg)
632
-{
633
- return cpu_to_be32(be32_to_cpu(dreq_msg->offset8) >> 8);
634
-}
635
-
636
-static inline void cm_dreq_set_remote_qpn(struct cm_dreq_msg *dreq_msg, __be32 qpn)
637
-{
638
- dreq_msg->offset8 = cpu_to_be32((be32_to_cpu(qpn) << 8) |
639
- (be32_to_cpu(dreq_msg->offset8) & 0x000000FF));
640
-}
641
-
642
-struct cm_drep_msg {
643
- struct ib_mad_hdr hdr;
644
-
645
- __be32 local_comm_id;
646
- __be32 remote_comm_id;
647
-
648
- u8 private_data[IB_CM_DREP_PRIVATE_DATA_SIZE];
649
-
650
-} __attribute__ ((packed));
651
-
652
-struct cm_lap_msg {
653
- struct ib_mad_hdr hdr;
654
-
655
- __be32 local_comm_id;
656
- __be32 remote_comm_id;
657
-
658
- __be32 rsvd8;
659
- /* remote QPN/EECN:24, remote CM response timeout:5, rsvd:3 */
660
- __be32 offset12;
661
- __be32 rsvd16;
662
-
663
- __be16 alt_local_lid;
664
- __be16 alt_remote_lid;
665
- union ib_gid alt_local_gid;
666
- union ib_gid alt_remote_gid;
667
- /* flow label:20, rsvd:4, traffic class:8 */
668
- __be32 offset56;
669
- u8 alt_hop_limit;
670
- /* rsvd:2, packet rate:6 */
671
- u8 offset61;
672
- /* SL:4, subnet local:1, rsvd:3 */
673
- u8 offset62;
674
- /* local ACK timeout:5, rsvd:3 */
675
- u8 offset63;
676
-
677
- u8 private_data[IB_CM_LAP_PRIVATE_DATA_SIZE];
678
-} __attribute__ ((packed));
679
-
680
-static inline __be32 cm_lap_get_remote_qpn(struct cm_lap_msg *lap_msg)
681
-{
682
- return cpu_to_be32(be32_to_cpu(lap_msg->offset12) >> 8);
683
-}
684
-
685
-static inline void cm_lap_set_remote_qpn(struct cm_lap_msg *lap_msg, __be32 qpn)
686
-{
687
- lap_msg->offset12 = cpu_to_be32((be32_to_cpu(qpn) << 8) |
688
- (be32_to_cpu(lap_msg->offset12) &
689
- 0x000000FF));
690
-}
691
-
692
-static inline u8 cm_lap_get_remote_resp_timeout(struct cm_lap_msg *lap_msg)
693
-{
694
- return (u8) ((be32_to_cpu(lap_msg->offset12) & 0xF8) >> 3);
695
-}
696
-
697
-static inline void cm_lap_set_remote_resp_timeout(struct cm_lap_msg *lap_msg,
698
- u8 resp_timeout)
699
-{
700
- lap_msg->offset12 = cpu_to_be32((resp_timeout << 3) |
701
- (be32_to_cpu(lap_msg->offset12) &
702
- 0xFFFFFF07));
703
-}
704
-
705
-static inline __be32 cm_lap_get_flow_label(struct cm_lap_msg *lap_msg)
706
-{
707
- return cpu_to_be32(be32_to_cpu(lap_msg->offset56) >> 12);
708
-}
709
-
710
-static inline void cm_lap_set_flow_label(struct cm_lap_msg *lap_msg,
711
- __be32 flow_label)
712
-{
713
- lap_msg->offset56 = cpu_to_be32(
714
- (be32_to_cpu(lap_msg->offset56) & 0x00000FFF) |
715
- (be32_to_cpu(flow_label) << 12));
716
-}
717
-
718
-static inline u8 cm_lap_get_traffic_class(struct cm_lap_msg *lap_msg)
719
-{
720
- return (u8) be32_to_cpu(lap_msg->offset56);
721
-}
722
-
723
-static inline void cm_lap_set_traffic_class(struct cm_lap_msg *lap_msg,
724
- u8 traffic_class)
725
-{
726
- lap_msg->offset56 = cpu_to_be32(traffic_class |
727
- (be32_to_cpu(lap_msg->offset56) &
728
- 0xFFFFFF00));
729
-}
730
-
731
-static inline u8 cm_lap_get_packet_rate(struct cm_lap_msg *lap_msg)
732
-{
733
- return lap_msg->offset61 & 0x3F;
734
-}
735
-
736
-static inline void cm_lap_set_packet_rate(struct cm_lap_msg *lap_msg,
737
- u8 packet_rate)
738
-{
739
- lap_msg->offset61 = (packet_rate & 0x3F) | (lap_msg->offset61 & 0xC0);
740
-}
741
-
742
-static inline u8 cm_lap_get_sl(struct cm_lap_msg *lap_msg)
743
-{
744
- return lap_msg->offset62 >> 4;
745
-}
746
-
747
-static inline void cm_lap_set_sl(struct cm_lap_msg *lap_msg, u8 sl)
748
-{
749
- lap_msg->offset62 = (sl << 4) | (lap_msg->offset62 & 0x0F);
750
-}
751
-
752
-static inline u8 cm_lap_get_subnet_local(struct cm_lap_msg *lap_msg)
753
-{
754
- return (lap_msg->offset62 >> 3) & 0x1;
755
-}
756
-
757
-static inline void cm_lap_set_subnet_local(struct cm_lap_msg *lap_msg,
758
- u8 subnet_local)
759
-{
760
- lap_msg->offset62 = ((subnet_local & 0x1) << 3) |
761
- (lap_msg->offset61 & 0xF7);
762
-}
763
-static inline u8 cm_lap_get_local_ack_timeout(struct cm_lap_msg *lap_msg)
764
-{
765
- return lap_msg->offset63 >> 3;
766
-}
767
-
768
-static inline void cm_lap_set_local_ack_timeout(struct cm_lap_msg *lap_msg,
769
- u8 local_ack_timeout)
770
-{
771
- lap_msg->offset63 = (local_ack_timeout << 3) |
772
- (lap_msg->offset63 & 0x07);
773
-}
774
-
775
-struct cm_apr_msg {
776
- struct ib_mad_hdr hdr;
777
-
778
- __be32 local_comm_id;
779
- __be32 remote_comm_id;
780
-
781
- u8 info_length;
782
- u8 ap_status;
783
- __be16 rsvd;
784
- u8 info[IB_CM_APR_INFO_LENGTH];
785
-
786
- u8 private_data[IB_CM_APR_PRIVATE_DATA_SIZE];
787
-} __attribute__ ((packed));
788
-
789
-struct cm_sidr_req_msg {
790
- struct ib_mad_hdr hdr;
791
-
792
- __be32 request_id;
793
- __be16 pkey;
794
- __be16 rsvd;
795
- __be64 service_id;
796
-
797
- u32 private_data[IB_CM_SIDR_REQ_PRIVATE_DATA_SIZE / sizeof(u32)];
798
-} __attribute__ ((packed));
799
-
800
-struct cm_sidr_rep_msg {
801
- struct ib_mad_hdr hdr;
802
-
803
- __be32 request_id;
804
- u8 status;
805
- u8 info_length;
806
- __be16 rsvd;
807
- /* QPN:24, rsvd:8 */
808
- __be32 offset8;
809
- __be64 service_id;
810
- __be32 qkey;
811
- u8 info[IB_CM_SIDR_REP_INFO_LENGTH];
812
-
813
- u8 private_data[IB_CM_SIDR_REP_PRIVATE_DATA_SIZE];
814
-} __attribute__ ((packed));
815
-
816
-static inline __be32 cm_sidr_rep_get_qpn(struct cm_sidr_rep_msg *sidr_rep_msg)
817
-{
818
- return cpu_to_be32(be32_to_cpu(sidr_rep_msg->offset8) >> 8);
819
-}
820
-
821
-static inline void cm_sidr_rep_set_qpn(struct cm_sidr_rep_msg *sidr_rep_msg,
822
- __be32 qpn)
823
-{
824
- sidr_rep_msg->offset8 = cpu_to_be32((be32_to_cpu(qpn) << 8) |
825
- (be32_to_cpu(sidr_rep_msg->offset8) &
826
- 0x000000FF));
63
+ cpu_to_be32(IBA_GET(CM_REP_LOCAL_EE_CONTEXT_NUMBER,
64
+ rep_msg)) :
65
+ cpu_to_be32(IBA_GET(CM_REP_LOCAL_QPN, rep_msg));
82766 }
82867
82968 #endif /* CM_MSGS_H */