This source file includes following definitions.
- ib_get_cpi_resp_time
- ib_set_cpi_resp_time
- ib_get_cpi_capmask2
- ib_set_cpi_capmask2
- opa_get_cpi_capmask2
- ib_get_rmpp_resptime
- ib_get_rmpp_flags
- ib_set_rmpp_resptime
- ib_set_rmpp_flags
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 #if !defined(IB_MAD_H)
38 #define IB_MAD_H
39
40 #include <linux/list.h>
41
42 #include <rdma/ib_verbs.h>
43 #include <uapi/rdma/ib_user_mad.h>
44
45
46 #define IB_MGMT_BASE_VERSION 1
47 #define OPA_MGMT_BASE_VERSION 0x80
48
49 #define OPA_SM_CLASS_VERSION 0x80
50
51
52 #define IB_MGMT_CLASS_SUBN_LID_ROUTED 0x01
53 #define IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE 0x81
54 #define IB_MGMT_CLASS_SUBN_ADM 0x03
55 #define IB_MGMT_CLASS_PERF_MGMT 0x04
56 #define IB_MGMT_CLASS_BM 0x05
57 #define IB_MGMT_CLASS_DEVICE_MGMT 0x06
58 #define IB_MGMT_CLASS_CM 0x07
59 #define IB_MGMT_CLASS_SNMP 0x08
60 #define IB_MGMT_CLASS_DEVICE_ADM 0x10
61 #define IB_MGMT_CLASS_BOOT_MGMT 0x11
62 #define IB_MGMT_CLASS_BIS 0x12
63 #define IB_MGMT_CLASS_CONG_MGMT 0x21
64 #define IB_MGMT_CLASS_VENDOR_RANGE2_START 0x30
65 #define IB_MGMT_CLASS_VENDOR_RANGE2_END 0x4F
66
67 #define IB_OPENIB_OUI (0x001405)
68
69
70 #define IB_MGMT_METHOD_GET 0x01
71 #define IB_MGMT_METHOD_SET 0x02
72 #define IB_MGMT_METHOD_GET_RESP 0x81
73 #define IB_MGMT_METHOD_SEND 0x03
74 #define IB_MGMT_METHOD_TRAP 0x05
75 #define IB_MGMT_METHOD_REPORT 0x06
76 #define IB_MGMT_METHOD_REPORT_RESP 0x86
77 #define IB_MGMT_METHOD_TRAP_REPRESS 0x07
78
79 #define IB_MGMT_METHOD_RESP 0x80
80 #define IB_BM_ATTR_MOD_RESP cpu_to_be32(1)
81
82 #define IB_MGMT_MAX_METHODS 128
83
84
85 #define IB_MGMT_MAD_STATUS_SUCCESS 0x0000
86 #define IB_MGMT_MAD_STATUS_BUSY 0x0001
87 #define IB_MGMT_MAD_STATUS_REDIRECT_REQD 0x0002
88 #define IB_MGMT_MAD_STATUS_BAD_VERSION 0x0004
89 #define IB_MGMT_MAD_STATUS_UNSUPPORTED_METHOD 0x0008
90 #define IB_MGMT_MAD_STATUS_UNSUPPORTED_METHOD_ATTRIB 0x000c
91 #define IB_MGMT_MAD_STATUS_INVALID_ATTRIB_VALUE 0x001c
92
93
94 #define IB_MGMT_RMPP_VERSION 1
95
96 #define IB_MGMT_RMPP_TYPE_DATA 1
97 #define IB_MGMT_RMPP_TYPE_ACK 2
98 #define IB_MGMT_RMPP_TYPE_STOP 3
99 #define IB_MGMT_RMPP_TYPE_ABORT 4
100
101 #define IB_MGMT_RMPP_FLAG_ACTIVE 1
102 #define IB_MGMT_RMPP_FLAG_FIRST (1<<1)
103 #define IB_MGMT_RMPP_FLAG_LAST (1<<2)
104
105 #define IB_MGMT_RMPP_NO_RESPTIME 0x1F
106
107 #define IB_MGMT_RMPP_STATUS_SUCCESS 0
108 #define IB_MGMT_RMPP_STATUS_RESX 1
109 #define IB_MGMT_RMPP_STATUS_ABORT_MIN 118
110 #define IB_MGMT_RMPP_STATUS_T2L 118
111 #define IB_MGMT_RMPP_STATUS_BAD_LEN 119
112 #define IB_MGMT_RMPP_STATUS_BAD_SEG 120
113 #define IB_MGMT_RMPP_STATUS_BADT 121
114 #define IB_MGMT_RMPP_STATUS_W2S 122
115 #define IB_MGMT_RMPP_STATUS_S2B 123
116 #define IB_MGMT_RMPP_STATUS_BAD_STATUS 124
117 #define IB_MGMT_RMPP_STATUS_UNV 125
118 #define IB_MGMT_RMPP_STATUS_TMR 126
119 #define IB_MGMT_RMPP_STATUS_UNSPEC 127
120 #define IB_MGMT_RMPP_STATUS_ABORT_MAX 127
121
122 #define IB_QP0 0
123 #define IB_QP1 cpu_to_be32(1)
124 #define IB_QP1_QKEY 0x80010000
125 #define IB_QP_SET_QKEY 0x80000000
126
127 #define IB_DEFAULT_PKEY_PARTIAL 0x7FFF
128 #define IB_DEFAULT_PKEY_FULL 0xFFFF
129
130
131
132
133 #define IB_NOTICE_TYPE_FATAL 0x80
134 #define IB_NOTICE_TYPE_URGENT 0x81
135 #define IB_NOTICE_TYPE_SECURITY 0x82
136 #define IB_NOTICE_TYPE_SM 0x83
137 #define IB_NOTICE_TYPE_INFO 0x84
138
139
140
141
142 #define IB_NOTICE_PROD_CA cpu_to_be16(1)
143 #define IB_NOTICE_PROD_SWITCH cpu_to_be16(2)
144 #define IB_NOTICE_PROD_ROUTER cpu_to_be16(3)
145 #define IB_NOTICE_PROD_CLASS_MGR cpu_to_be16(4)
146
147 enum {
148 IB_MGMT_MAD_HDR = 24,
149 IB_MGMT_MAD_DATA = 232,
150 IB_MGMT_RMPP_HDR = 36,
151 IB_MGMT_RMPP_DATA = 220,
152 IB_MGMT_VENDOR_HDR = 40,
153 IB_MGMT_VENDOR_DATA = 216,
154 IB_MGMT_SA_HDR = 56,
155 IB_MGMT_SA_DATA = 200,
156 IB_MGMT_DEVICE_HDR = 64,
157 IB_MGMT_DEVICE_DATA = 192,
158 IB_MGMT_MAD_SIZE = IB_MGMT_MAD_HDR + IB_MGMT_MAD_DATA,
159 OPA_MGMT_MAD_DATA = 2024,
160 OPA_MGMT_RMPP_DATA = 2012,
161 OPA_MGMT_MAD_SIZE = IB_MGMT_MAD_HDR + OPA_MGMT_MAD_DATA,
162 };
163
164 struct ib_mad_hdr {
165 u8 base_version;
166 u8 mgmt_class;
167 u8 class_version;
168 u8 method;
169 __be16 status;
170 __be16 class_specific;
171 __be64 tid;
172 __be16 attr_id;
173 __be16 resv;
174 __be32 attr_mod;
175 };
176
177 struct ib_rmpp_hdr {
178 u8 rmpp_version;
179 u8 rmpp_type;
180 u8 rmpp_rtime_flags;
181 u8 rmpp_status;
182 __be32 seg_num;
183 __be32 paylen_newwin;
184 };
185
186 typedef u64 __bitwise ib_sa_comp_mask;
187
188 #define IB_SA_COMP_MASK(n) ((__force ib_sa_comp_mask) cpu_to_be64(1ull << (n)))
189
190
191
192
193
194
195
196 struct ib_sa_hdr {
197 __be64 sm_key;
198 __be16 attr_offset;
199 __be16 reserved;
200 ib_sa_comp_mask comp_mask;
201 } __packed;
202
203 struct ib_mad {
204 struct ib_mad_hdr mad_hdr;
205 u8 data[IB_MGMT_MAD_DATA];
206 };
207
208 struct opa_mad {
209 struct ib_mad_hdr mad_hdr;
210 u8 data[OPA_MGMT_MAD_DATA];
211 };
212
213 struct ib_rmpp_mad {
214 struct ib_mad_hdr mad_hdr;
215 struct ib_rmpp_hdr rmpp_hdr;
216 u8 data[IB_MGMT_RMPP_DATA];
217 };
218
219 struct opa_rmpp_mad {
220 struct ib_mad_hdr mad_hdr;
221 struct ib_rmpp_hdr rmpp_hdr;
222 u8 data[OPA_MGMT_RMPP_DATA];
223 };
224
225 struct ib_sa_mad {
226 struct ib_mad_hdr mad_hdr;
227 struct ib_rmpp_hdr rmpp_hdr;
228 struct ib_sa_hdr sa_hdr;
229 u8 data[IB_MGMT_SA_DATA];
230 } __packed;
231
232 struct ib_vendor_mad {
233 struct ib_mad_hdr mad_hdr;
234 struct ib_rmpp_hdr rmpp_hdr;
235 u8 reserved;
236 u8 oui[3];
237 u8 data[IB_MGMT_VENDOR_DATA];
238 };
239
240 #define IB_MGMT_CLASSPORTINFO_ATTR_ID cpu_to_be16(0x0001)
241
242 #define IB_CLASS_PORT_INFO_RESP_TIME_MASK 0x1F
243 #define IB_CLASS_PORT_INFO_RESP_TIME_FIELD_SIZE 5
244
245 struct ib_class_port_info {
246 u8 base_version;
247 u8 class_version;
248 __be16 capability_mask;
249
250 __be32 cap_mask2_resp_time;
251 u8 redirect_gid[16];
252 __be32 redirect_tcslfl;
253 __be16 redirect_lid;
254 __be16 redirect_pkey;
255 __be32 redirect_qp;
256 __be32 redirect_qkey;
257 u8 trap_gid[16];
258 __be32 trap_tcslfl;
259 __be16 trap_lid;
260 __be16 trap_pkey;
261 __be32 trap_hlqp;
262 __be32 trap_qkey;
263 };
264
265
266 enum ib_port_capability_mask_bits {
267 IB_PORT_SM = 1 << 1,
268 IB_PORT_NOTICE_SUP = 1 << 2,
269 IB_PORT_TRAP_SUP = 1 << 3,
270 IB_PORT_OPT_IPD_SUP = 1 << 4,
271 IB_PORT_AUTO_MIGR_SUP = 1 << 5,
272 IB_PORT_SL_MAP_SUP = 1 << 6,
273 IB_PORT_MKEY_NVRAM = 1 << 7,
274 IB_PORT_PKEY_NVRAM = 1 << 8,
275 IB_PORT_LED_INFO_SUP = 1 << 9,
276 IB_PORT_SM_DISABLED = 1 << 10,
277 IB_PORT_SYS_IMAGE_GUID_SUP = 1 << 11,
278 IB_PORT_PKEY_SW_EXT_PORT_TRAP_SUP = 1 << 12,
279 IB_PORT_EXTENDED_SPEEDS_SUP = 1 << 14,
280 IB_PORT_CAP_MASK2_SUP = 1 << 15,
281 IB_PORT_CM_SUP = 1 << 16,
282 IB_PORT_SNMP_TUNNEL_SUP = 1 << 17,
283 IB_PORT_REINIT_SUP = 1 << 18,
284 IB_PORT_DEVICE_MGMT_SUP = 1 << 19,
285 IB_PORT_VENDOR_CLASS_SUP = 1 << 20,
286 IB_PORT_DR_NOTICE_SUP = 1 << 21,
287 IB_PORT_CAP_MASK_NOTICE_SUP = 1 << 22,
288 IB_PORT_BOOT_MGMT_SUP = 1 << 23,
289 IB_PORT_LINK_LATENCY_SUP = 1 << 24,
290 IB_PORT_CLIENT_REG_SUP = 1 << 25,
291 IB_PORT_OTHER_LOCAL_CHANGES_SUP = 1 << 26,
292 IB_PORT_LINK_SPEED_WIDTH_TABLE_SUP = 1 << 27,
293 IB_PORT_VENDOR_SPECIFIC_MADS_TABLE_SUP = 1 << 28,
294 IB_PORT_MCAST_PKEY_TRAP_SUPPRESSION_SUP = 1 << 29,
295 IB_PORT_MCAST_FDB_TOP_SUP = 1 << 30,
296 IB_PORT_HIERARCHY_INFO_SUP = 1ULL << 31,
297 };
298
299 enum ib_port_capability_mask2_bits {
300 IB_PORT_SET_NODE_DESC_SUP = 1 << 0,
301 IB_PORT_EX_PORT_INFO_EX_SUP = 1 << 1,
302 IB_PORT_VIRT_SUP = 1 << 2,
303 IB_PORT_SWITCH_PORT_STATE_TABLE_SUP = 1 << 3,
304 IB_PORT_LINK_WIDTH_2X_SUP = 1 << 4,
305 IB_PORT_LINK_SPEED_HDR_SUP = 1 << 5,
306 };
307
308 #define OPA_CLASS_PORT_INFO_PR_SUPPORT BIT(26)
309
310 struct opa_class_port_info {
311 u8 base_version;
312 u8 class_version;
313 __be16 cap_mask;
314 __be32 cap_mask2_resp_time;
315
316 u8 redirect_gid[16];
317 __be32 redirect_tc_fl;
318 __be32 redirect_lid;
319 __be32 redirect_sl_qp;
320 __be32 redirect_qkey;
321
322 u8 trap_gid[16];
323 __be32 trap_tc_fl;
324 __be32 trap_lid;
325 __be32 trap_hl_qp;
326 __be32 trap_qkey;
327
328 __be16 trap_pkey;
329 __be16 redirect_pkey;
330
331 u8 trap_sl_rsvd;
332 u8 reserved[3];
333 } __packed;
334
335
336
337
338
339
340 static inline u8 ib_get_cpi_resp_time(struct ib_class_port_info *cpi)
341 {
342 return (u8)(be32_to_cpu(cpi->cap_mask2_resp_time) &
343 IB_CLASS_PORT_INFO_RESP_TIME_MASK);
344 }
345
346
347
348
349
350
351
352 static inline void ib_set_cpi_resp_time(struct ib_class_port_info *cpi,
353 u8 rtime)
354 {
355 cpi->cap_mask2_resp_time =
356 (cpi->cap_mask2_resp_time &
357 cpu_to_be32(~IB_CLASS_PORT_INFO_RESP_TIME_MASK)) |
358 cpu_to_be32(rtime & IB_CLASS_PORT_INFO_RESP_TIME_MASK);
359 }
360
361
362
363
364
365
366 static inline u32 ib_get_cpi_capmask2(struct ib_class_port_info *cpi)
367 {
368 return (be32_to_cpu(cpi->cap_mask2_resp_time) >>
369 IB_CLASS_PORT_INFO_RESP_TIME_FIELD_SIZE);
370 }
371
372
373
374
375
376
377
378 static inline void ib_set_cpi_capmask2(struct ib_class_port_info *cpi,
379 u32 capmask2)
380 {
381 cpi->cap_mask2_resp_time =
382 (cpi->cap_mask2_resp_time &
383 cpu_to_be32(IB_CLASS_PORT_INFO_RESP_TIME_MASK)) |
384 cpu_to_be32(capmask2 <<
385 IB_CLASS_PORT_INFO_RESP_TIME_FIELD_SIZE);
386 }
387
388
389
390
391
392
393 static inline u32 opa_get_cpi_capmask2(struct opa_class_port_info *cpi)
394 {
395 return (be32_to_cpu(cpi->cap_mask2_resp_time) >>
396 IB_CLASS_PORT_INFO_RESP_TIME_FIELD_SIZE);
397 }
398
399 struct ib_mad_notice_attr {
400 u8 generic_type;
401 u8 prod_type_msb;
402 __be16 prod_type_lsb;
403 __be16 trap_num;
404 __be16 issuer_lid;
405 __be16 toggle_count;
406
407 union {
408 struct {
409 u8 details[54];
410 } raw_data;
411
412 struct {
413 __be16 reserved;
414 __be16 lid;
415 u8 port_num;
416 } __packed ntc_129_131;
417
418 struct {
419 __be16 reserved;
420 __be16 lid;
421 u8 reserved2;
422 u8 local_changes;
423 __be32 new_cap_mask;
424 u8 reserved3;
425 u8 change_flags;
426 } __packed ntc_144;
427
428 struct {
429 __be16 reserved;
430 __be16 lid;
431 __be16 reserved2;
432 __be64 new_sys_guid;
433 } __packed ntc_145;
434
435 struct {
436 __be16 reserved;
437 __be16 lid;
438 __be16 dr_slid;
439 u8 method;
440 u8 reserved2;
441 __be16 attr_id;
442 __be32 attr_mod;
443 __be64 mkey;
444 u8 reserved3;
445 u8 dr_trunc_hop;
446 u8 dr_rtn_path[30];
447 } __packed ntc_256;
448
449 struct {
450 __be16 reserved;
451 __be16 lid1;
452 __be16 lid2;
453 __be32 key;
454 __be32 sl_qp1;
455 __be32 qp2;
456 union ib_gid gid1;
457 union ib_gid gid2;
458 } __packed ntc_257_258;
459
460 } details;
461 };
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489 struct ib_mad_send_buf {
490 struct ib_mad_send_buf *next;
491 void *mad;
492 struct ib_mad_agent *mad_agent;
493 struct ib_ah *ah;
494 void *context[2];
495 int hdr_len;
496 int data_len;
497 int seg_count;
498 int seg_size;
499 int seg_rmpp_size;
500 int timeout_ms;
501 int retries;
502 };
503
504
505
506
507
508 int ib_response_mad(const struct ib_mad_hdr *hdr);
509
510
511
512
513
514 static inline u8 ib_get_rmpp_resptime(struct ib_rmpp_hdr *rmpp_hdr)
515 {
516 return rmpp_hdr->rmpp_rtime_flags >> 3;
517 }
518
519
520
521
522
523 static inline u8 ib_get_rmpp_flags(struct ib_rmpp_hdr *rmpp_hdr)
524 {
525 return rmpp_hdr->rmpp_rtime_flags & 0x7;
526 }
527
528
529
530
531
532
533 static inline void ib_set_rmpp_resptime(struct ib_rmpp_hdr *rmpp_hdr, u8 rtime)
534 {
535 rmpp_hdr->rmpp_rtime_flags = ib_get_rmpp_flags(rmpp_hdr) | (rtime << 3);
536 }
537
538
539
540
541
542
543 static inline void ib_set_rmpp_flags(struct ib_rmpp_hdr *rmpp_hdr, u8 flags)
544 {
545 rmpp_hdr->rmpp_rtime_flags = (rmpp_hdr->rmpp_rtime_flags & 0xF8) |
546 (flags & 0x7);
547 }
548
549 struct ib_mad_agent;
550 struct ib_mad_send_wc;
551 struct ib_mad_recv_wc;
552
553
554
555
556
557
558 typedef void (*ib_mad_send_handler)(struct ib_mad_agent *mad_agent,
559 struct ib_mad_send_wc *mad_send_wc);
560
561
562
563
564
565
566
567
568
569
570
571 typedef void (*ib_mad_snoop_handler)(struct ib_mad_agent *mad_agent,
572 struct ib_mad_send_buf *send_buf,
573 struct ib_mad_send_wc *mad_send_wc);
574
575
576
577
578
579
580
581
582
583
584
585
586
587 typedef void (*ib_mad_recv_handler)(struct ib_mad_agent *mad_agent,
588 struct ib_mad_send_buf *send_buf,
589 struct ib_mad_recv_wc *mad_recv_wc);
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607 enum {
608 IB_MAD_USER_RMPP = IB_USER_MAD_USER_RMPP,
609 };
610 struct ib_mad_agent {
611 struct ib_device *device;
612 struct ib_qp *qp;
613 ib_mad_recv_handler recv_handler;
614 ib_mad_send_handler send_handler;
615 ib_mad_snoop_handler snoop_handler;
616 void *context;
617 u32 hi_tid;
618 u32 flags;
619 void *security;
620 struct list_head mad_agent_sec_list;
621 u8 port_num;
622 u8 rmpp_version;
623 bool smp_allowed;
624 };
625
626
627
628
629
630
631
632
633 struct ib_mad_send_wc {
634 struct ib_mad_send_buf *send_buf;
635 enum ib_wc_status status;
636 u32 vendor_err;
637 };
638
639
640
641
642
643
644
645
646
647 struct ib_mad_recv_buf {
648 struct list_head list;
649 struct ib_grh *grh;
650 union {
651 struct ib_mad *mad;
652 struct opa_mad *opa_mad;
653 };
654 };
655
656
657
658
659
660
661
662
663
664
665
666
667 struct ib_mad_recv_wc {
668 struct ib_wc *wc;
669 struct ib_mad_recv_buf recv_buf;
670 struct list_head rmpp_list;
671 int mad_len;
672 size_t mad_seg_size;
673 };
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688 struct ib_mad_reg_req {
689 u8 mgmt_class;
690 u8 mgmt_class_version;
691 u8 oui[3];
692 DECLARE_BITMAP(method_mask, IB_MGMT_MAX_METHODS);
693 };
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714 struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device,
715 u8 port_num,
716 enum ib_qp_type qp_type,
717 struct ib_mad_reg_req *mad_reg_req,
718 u8 rmpp_version,
719 ib_mad_send_handler send_handler,
720 ib_mad_recv_handler recv_handler,
721 void *context,
722 u32 registration_flags);
723
724 enum ib_mad_snoop_flags {
725
726
727 IB_MAD_SNOOP_SEND_COMPLETIONS = (1<<2),
728
729 IB_MAD_SNOOP_RECVS = (1<<4)
730
731
732 };
733
734
735
736
737
738
739
740
741
742
743
744
745 struct ib_mad_agent *ib_register_mad_snoop(struct ib_device *device,
746 u8 port_num,
747 enum ib_qp_type qp_type,
748 int mad_snoop_flags,
749 ib_mad_snoop_handler snoop_handler,
750 ib_mad_recv_handler recv_handler,
751 void *context);
752
753
754
755
756
757
758
759
760 void ib_unregister_mad_agent(struct ib_mad_agent *mad_agent);
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781 int ib_post_send_mad(struct ib_mad_send_buf *send_buf,
782 struct ib_mad_send_buf **bad_send_buf);
783
784
785
786
787
788
789
790
791
792 void ib_free_recv_mad(struct ib_mad_recv_wc *mad_recv_wc);
793
794
795
796
797
798
799
800
801
802 void ib_cancel_mad(struct ib_mad_agent *mad_agent,
803 struct ib_mad_send_buf *send_buf);
804
805
806
807
808
809
810
811
812
813
814 int ib_modify_mad(struct ib_mad_agent *mad_agent,
815 struct ib_mad_send_buf *send_buf, u32 timeout_ms);
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833 struct ib_mad_agent *ib_redirect_mad_qp(struct ib_qp *qp,
834 u8 rmpp_version,
835 ib_mad_send_handler send_handler,
836 ib_mad_recv_handler recv_handler,
837 void *context);
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854 int ib_process_mad_wc(struct ib_mad_agent *mad_agent,
855 struct ib_wc *wc);
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884 struct ib_mad_send_buf *ib_create_send_mad(struct ib_mad_agent *mad_agent,
885 u32 remote_qpn, u16 pkey_index,
886 int rmpp_active,
887 int hdr_len, int data_len,
888 gfp_t gfp_mask,
889 u8 base_version);
890
891
892
893
894
895
896
897
898 int ib_is_mad_class_rmpp(u8 mgmt_class);
899
900
901
902
903
904
905
906
907
908 int ib_get_mad_data_offset(u8 mgmt_class);
909
910
911
912
913
914
915
916
917
918 void *ib_get_rmpp_segment(struct ib_mad_send_buf *send_buf, int seg_num);
919
920
921
922
923
924 void ib_free_send_mad(struct ib_mad_send_buf *send_buf);
925
926
927
928
929
930
931 int ib_mad_kernel_rmpp_agent(const struct ib_mad_agent *agent);
932
933 #endif