]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/ofed/management/opensm/include/opensm/osm_madw.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / ofed / management / opensm / include / opensm / osm_madw.h
1 /*
2  * Copyright (c) 2004-2008 Voltaire, Inc. All rights reserved.
3  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
4  * Copyright (c) 1996-2003 Intel 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 in the main directory of this source tree, or the
10  * OpenIB.org BSD license below:
11  *
12  *     Redistribution and use in source and binary forms, with or
13  *     without modification, are permitted provided that the following
14  *     conditions are met:
15  *
16  *      - Redistributions of source code must retain the above
17  *        copyright notice, this list of conditions and the following
18  *        disclaimer.
19  *
20  *      - Redistributions in binary form must reproduce the above
21  *        copyright notice, this list of conditions and the following
22  *        disclaimer in the documentation and/or other materials
23  *        provided with the distribution.
24  *
25  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY 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. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32  * SOFTWARE.
33  *
34  */
35
36 /*
37  * Abstract:
38  *      Declaration of osm_mad_wrapper_t.
39  *      This object represents the context wrapper for OpenSM MAD processing.
40  *      This object is part of the OpenSM family of objects.
41  */
42
43 #ifndef _OSM_MADW_H_
44 #define _OSM_MADW_H_
45
46 #include <string.h>
47 #include <iba/ib_types.h>
48 #include <complib/cl_qlist.h>
49 #include <complib/cl_dispatcher.h>
50 #include <opensm/osm_base.h>
51 #include <vendor/osm_vendor.h>
52
53 #ifdef __cplusplus
54 #  define BEGIN_C_DECLS extern "C" {
55 #  define END_C_DECLS   }
56 #else                           /* !__cplusplus */
57 #  define BEGIN_C_DECLS
58 #  define END_C_DECLS
59 #endif                          /* __cplusplus */
60
61 BEGIN_C_DECLS
62 /****s* OpenSM: MAD Wrapper/osm_bind_info_t
63 * NAME
64 *   osm_bind_info_t
65 *
66 * DESCRIPTION
67 *
68 * SYNOPSIS
69 */
70 typedef struct osm_bind_info {
71         ib_net64_t port_guid;
72         uint8_t mad_class;
73         uint8_t class_version;
74         boolean_t is_responder;
75         boolean_t is_trap_processor;
76         boolean_t is_report_processor;
77         uint32_t send_q_size;
78         uint32_t recv_q_size;
79 } osm_bind_info_t;
80 /*
81 * FIELDS
82 *       portguid
83 *               PortGuid of local port
84 *
85 *       mad_class
86 *               Mgmt Class ID
87 *
88 *       class_version
89 *               Mgmt Class version
90 *
91 *       is_responder
92 *               True if this is a GSI Agent
93 *
94 *       is_trap_processor
95 *               True if GSI Trap msgs are handled
96 *
97 *       is_report_processor
98 *               True if GSI Report msgs are handled
99 *
100 *       send_q_size
101 *               SendQueueSize
102 *
103 *       recv_q_size
104 *               Receive Queue Size
105 *
106 * SEE ALSO
107 *********/
108
109 /****h* OpenSM/MAD Wrapper
110 * NAME
111 *       MAD Wrapper
112 *
113 * DESCRIPTION
114 *       The MAD Wrapper object encapsulates the information needed by the
115 *       OpenSM to manage individual MADs.  The OpenSM allocates one MAD Wrapper
116 *       per MAD.
117 *
118 *       The MAD Wrapper is not thread safe, thus callers must provide
119 *       serialization.
120 *
121 *       This object should be treated as opaque and should be
122 *       manipulated only through the provided functions.
123 *
124 * AUTHOR
125 *       Steve King, Intel
126 *
127 *********/
128
129 /****s* OpenSM: MAD Wrapper/osm_ni_context_t
130 * NAME
131 *       osm_ni_context_t
132 *
133 * DESCRIPTION
134 *       Context needed by recipient of NodeInfo attribute.
135 *
136 * SYNOPSIS
137 */
138 typedef struct osm_ni_context {
139         ib_net64_t node_guid;
140         uint8_t port_num;
141         ib_net64_t dup_node_guid;
142         uint8_t dup_port_num;
143         unsigned dup_count;
144 } osm_ni_context_t;
145 /*
146 * FIELDS
147 *       p_node
148 *               Pointer to the node thru which we got to this node.
149 *
150 *       p_sw
151 *               Pointer to the switch object (if any) of the switch
152 *               thru which we got to this node.
153 *
154 *       port_num
155 *               Port number on the node or switch thru which we got
156 *               to this node.
157 *
158 * SEE ALSO
159 *********/
160
161 /****s* OpenSM: MAD Wrapper/osm_pi_context_t
162 * NAME
163 *       osm_pi_context_t
164 *
165 * DESCRIPTION
166 *       Context needed by recipient of PortInfo attribute.
167 *
168 * SYNOPSIS
169 */
170 typedef struct osm_pi_context {
171         ib_net64_t node_guid;
172         ib_net64_t port_guid;
173         boolean_t set_method;
174         boolean_t light_sweep;
175         boolean_t active_transition;
176 } osm_pi_context_t;
177 /*********/
178
179 /****s* OpenSM: MAD Wrapper/osm_nd_context_t
180 * NAME
181 *       osm_nd_context_t
182 *
183 * DESCRIPTION
184 *       Context needed by recipient of NodeDescription attribute.
185 *
186 * SYNOPSIS
187 */
188 typedef struct osm_nd_context {
189         ib_net64_t node_guid;
190 } osm_nd_context_t;
191 /*********/
192
193 /****s* OpenSM: MAD Wrapper/osm_si_context_t
194 * NAME
195 *       osm_si_context_t
196 *
197 * DESCRIPTION
198 *       Context needed by recipient of SwitchInfo attribute.
199 *
200 * SYNOPSIS
201 */
202 typedef struct osm_si_context {
203         ib_net64_t node_guid;
204         boolean_t set_method;
205         boolean_t light_sweep;
206 } osm_si_context_t;
207 /*********/
208
209 /****s* OpenSM: MAD Wrapper/osm_lft_context_t
210 * NAME
211 *       osm_lft_context_t
212 *
213 * DESCRIPTION
214 *       Context needed by recipient of LinearForwardingTable attribute.
215 *
216 * SYNOPSIS
217 */
218 typedef struct osm_lft_context {
219         ib_net64_t node_guid;
220         boolean_t set_method;
221 } osm_lft_context_t;
222 /*********/
223
224 /****s* OpenSM: MAD Wrapper/osm_mft_context_t
225 * NAME
226 *       osm_mft_context_t
227 *
228 * DESCRIPTION
229 *       Context needed by recipient of MulticastForwardingTable attribute.
230 *
231 * SYNOPSIS
232 */
233 typedef struct osm_mft_context {
234         ib_net64_t node_guid;
235         boolean_t set_method;
236 } osm_mft_context_t;
237 /*********/
238
239 /****s* OpenSM: MAD Wrapper/osm_smi_context_t
240 * NAME
241 *       osm_smi_context_t
242 *
243 * DESCRIPTION
244 *       Context needed by recipient of SMInfo attribute.
245 *
246 * SYNOPSIS
247 */
248 typedef struct osm_smi_context {
249         ib_net64_t port_guid;
250         boolean_t set_method;
251         boolean_t light_sweep;
252 } osm_smi_context_t;
253 /*********/
254
255 /****s* OpenSM: MAD Wrapper/osm_pkey_context_t
256 * NAME
257 *       osm_pkey_context_t
258 *
259 * DESCRIPTION
260 *       Context needed by recipient of P_Key attribute.
261 *
262 * SYNOPSIS
263 */
264 typedef struct osm_pkey_context {
265         ib_net64_t node_guid;
266         ib_net64_t port_guid;
267         boolean_t set_method;
268 } osm_pkey_context_t;
269 /*********/
270
271 /****s* OpenSM: MAD Wrapper/osm_slvl_context_t
272 * NAME
273 *       osm_slvl_context_t
274 *
275 * DESCRIPTION
276 *       Context needed by recipient of PortInfo attribute.
277 *
278 * SYNOPSIS
279 */
280 typedef struct osm_slvl_context {
281         ib_net64_t node_guid;
282         ib_net64_t port_guid;
283         boolean_t set_method;
284 } osm_slvl_context_t;
285 /*********/
286
287 /****s* OpenSM: MAD Wrapper/osm_vla_context_t
288 * NAME
289 *       osm_vla_context_t
290 *
291 * DESCRIPTION
292 *       Context needed by recipient of VL Arb attribute.
293 *
294 * SYNOPSIS
295 */
296 typedef struct osm_vla_context {
297         ib_net64_t node_guid;
298         ib_net64_t port_guid;
299         boolean_t set_method;
300 } osm_vla_context_t;
301 /*********/
302
303 /****s* OpenSM: MAD Wrapper/osm_perfmgr_context_t
304 * DESCRIPTION
305 *       Context for Performance manager queries
306 */
307 typedef struct osm_perfmgr_context {
308         uint64_t node_guid;
309         uint16_t port;
310         uint8_t mad_method;     /* was this a get or a set */
311 #if ENABLE_OSM_PERF_MGR_PROFILE
312         struct timeval query_start;
313 #endif
314 } osm_perfmgr_context_t;
315 /*********/
316
317 #ifndef OSM_VENDOR_INTF_OPENIB
318 /****s* OpenSM: MAD Wrapper/osm_arbitrary_context_t
319 * NAME
320 *       osm_arbitrary_context_t
321 *
322 * DESCRIPTION
323 *       Context needed by arbitrary recipient.
324 *
325 * SYNOPSIS
326 */
327 typedef struct osm_arbitrary_context {
328         void *context1;
329         void *context2;
330 } osm_arbitrary_context_t;
331 /*********/
332 #endif
333
334 /****s* OpenSM: MAD Wrapper/osm_madw_context_t
335 * NAME
336 *       osm_madw_context_t
337 *
338 * DESCRIPTION
339 *       Context needed by recipients of MAD responses.
340 *
341 * SYNOPSIS
342 */
343 typedef union _osm_madw_context {
344         osm_ni_context_t ni_context;
345         osm_pi_context_t pi_context;
346         osm_nd_context_t nd_context;
347         osm_si_context_t si_context;
348         osm_lft_context_t lft_context;
349         osm_mft_context_t mft_context;
350         osm_smi_context_t smi_context;
351         osm_slvl_context_t slvl_context;
352         osm_pkey_context_t pkey_context;
353         osm_vla_context_t vla_context;
354         osm_perfmgr_context_t perfmgr_context;
355 #ifndef OSM_VENDOR_INTF_OPENIB
356         osm_arbitrary_context_t arb_context;
357 #endif
358 } osm_madw_context_t;
359 /*********/
360
361 /****s* OpenSM: MAD Wrapper/osm_mad_addr_t
362 * NAME
363 *   osm_mad_addr_t
364 *
365 * DESCRIPTION
366 *
367 * SYNOPSIS
368 */
369 typedef struct osm_mad_addr {
370         ib_net16_t dest_lid;
371         uint8_t path_bits;
372         uint8_t static_rate;
373         union addr_type {
374                 struct _smi {
375                         ib_net16_t source_lid;
376                         uint8_t port_num;
377                 } smi;
378
379                 struct _gsi {
380                         ib_net32_t remote_qp;
381                         ib_net32_t remote_qkey;
382                         uint16_t pkey_ix;
383                         uint8_t service_level;
384                         boolean_t global_route;
385                         ib_grh_t grh_info;
386                 } gsi;
387         } addr_type;
388 } osm_mad_addr_t;
389 /*
390 * FIELDS
391 *
392 * SEE ALSO
393 *********/
394
395 /****s* OpenSM: MAD Wrapper/osm_madw_t
396 * NAME
397 *       osm_madw_t
398 *
399 * DESCRIPTION
400 *       Context needed for processing individual MADs
401 *
402 * SYNOPSIS
403 */
404 typedef struct osm_madw {
405         cl_list_item_t list_item;
406         osm_bind_handle_t h_bind;
407         osm_vend_wrap_t vend_wrap;
408         osm_mad_addr_t mad_addr;
409         osm_bind_info_t bind_info;
410         osm_madw_context_t context;
411         uint32_t mad_size;
412         ib_api_status_t status;
413         cl_disp_msgid_t fail_msg;
414         boolean_t resp_expected;
415         const ib_mad_t *p_mad;
416 } osm_madw_t;
417 /*
418 * FIELDS
419 *       list_item
420 *               List linkage for lists.  MUST BE FIRST MEMBER!
421 *
422 *       h_bind
423 *               Bind handle for the port on which this MAD will be sent
424 *               or was received.
425 *
426 *       vend_wrap
427 *               Transport vendor specific context.  This structure is not
428 *               used outside MAD transport vendor specific code.
429 *
430 *       context
431 *               Union of controller specific contexts needed for this MAD.
432 *               This structure allows controllers to indirectly communicate
433 *               with each other through the dispatcher.
434 *
435 *       mad_size
436 *               Size of this MAD in bytes.
437 *
438 *       status
439 *               Status of completed operation on the MAD.
440 *               CL_SUCCESS if the operation was successful.
441 *
442 *       fail_msg
443 *               Dispatcher message with which to post this MAD on failure.
444 *               This value is set by the originator of the MAD.
445 *               If an operation on this MAD fails, for example due to a timeout,
446 *               then the transport layer will dispose of the MAD by sending
447 *               it through the Dispatcher with this message type.  Presumably,
448 *               there is a controller listening for the failure message that can
449 *               properly clean up.
450 *
451 *       resp_expected
452 *               TRUE if a response is expected to this MAD.
453 *               FALSE otherwise.
454 *
455 *       p_mad
456 *               Pointer to the wire MAD.  The MAD itself cannot be part of the
457 *               wrapper, since wire MADs typically reside in special memory
458 *               registered with the local HCA.
459 *
460 * SEE ALSO
461 *********/
462
463 /****f* OpenSM: MAD Wrapper/osm_madw_init
464 * NAME
465 *       osm_madw_init
466 *
467 * DESCRIPTION
468 *       Initializes a MAD Wrapper object for use.
469 *
470 * SYNOPSIS
471 */
472 static inline void
473 osm_madw_init(IN osm_madw_t * const p_madw,
474               IN osm_bind_handle_t h_bind,
475               IN const uint32_t mad_size,
476               IN const osm_mad_addr_t * const p_mad_addr)
477 {
478         memset(p_madw, 0, sizeof(*p_madw));
479         p_madw->h_bind = h_bind;
480         p_madw->fail_msg = CL_DISP_MSGID_NONE;
481         p_madw->mad_size = mad_size;
482         if (p_mad_addr)
483                 p_madw->mad_addr = *p_mad_addr;
484         p_madw->resp_expected = FALSE;
485 }
486
487 /*
488 * PARAMETERS
489 *       p_madw
490 *               [in] Pointer to an osm_madw_t object to initialize.
491 *
492 *       h_bind
493 *               [in] Pointer to the wire MAD.
494 *
495 *       p_mad_addr
496 *               [in] Pointer to the MAD address structure.  This parameter may
497 *               be NULL for directed route MADs.
498 *
499 * RETURN VALUES
500 *       None.
501 *
502 * NOTES
503 *
504 * SEE ALSO
505 *********/
506
507 /****f* OpenSM: MAD Wrapper/osm_madw_get_smp_ptr
508 * NAME
509 *       osm_madw_get_smp_ptr
510 *
511 * DESCRIPTION
512 *       Gets a pointer to the SMP in this MAD.
513 *
514 * SYNOPSIS
515 */
516 static inline ib_smp_t *osm_madw_get_smp_ptr(IN const osm_madw_t * const p_madw)
517 {
518         return ((ib_smp_t *) p_madw->p_mad);
519 }
520
521 /*
522 * PARAMETERS
523 *       p_madw
524 *               [in] Pointer to an osm_madw_t object to initialize.
525 *
526 * RETURN VALUES
527 *       Pointer to the start of the SMP MAD.
528 *
529 * NOTES
530 *
531 * SEE ALSO
532 *       MAD Wrapper object
533 *********/
534
535 /****f* OpenSM: MAD Wrapper/osm_madw_get_sa_mad_ptr
536 * NAME
537 *       osm_madw_get_sa_mad_ptr
538 *
539 * DESCRIPTION
540 *       Gets a pointer to the SA MAD in this MAD wrapper.
541 *
542 * SYNOPSIS
543 */
544 static inline ib_sa_mad_t *osm_madw_get_sa_mad_ptr(IN const osm_madw_t *
545                                                    const p_madw)
546 {
547         return ((ib_sa_mad_t *) p_madw->p_mad);
548 }
549
550 /*
551 * PARAMETERS
552 *       p_madw
553 *               [in] Pointer to an osm_madw_t object.
554 *
555 * RETURN VALUES
556 *       Pointer to the start of the SA MAD.
557 *
558 * NOTES
559 *
560 * SEE ALSO
561 *       MAD Wrapper object
562 *********/
563
564 /****f* OpenSM: MAD Wrapper/osm_madw_get_perfmgt_mad_ptr
565 * DESCRIPTION
566 *       Gets a pointer to the PerfMgt MAD in this MAD wrapper.
567 *
568 * SYNOPSIS
569 */
570 static inline ib_perfmgt_mad_t *osm_madw_get_perfmgt_mad_ptr(IN const osm_madw_t
571                                                              * const p_madw)
572 {
573         return ((ib_perfmgt_mad_t *) p_madw->p_mad);
574 }
575
576 /*
577 * PARAMETERS
578 *       p_madw
579 *               [in] Pointer to an osm_madw_t object.
580 *
581 * RETURN VALUES
582 *       Pointer to the start of the PerfMgt MAD.
583 *
584 * NOTES
585 *
586 * SEE ALSO
587 *       MAD Wrapper object
588 *********/
589
590 /****f* OpenSM: MAD Wrapper/osm_madw_get_ni_context_ptr
591 * NAME
592 *       osm_madw_get_ni_context_ptr
593 *
594 * DESCRIPTION
595 *       Gets a pointer to the NodeInfo context in this MAD.
596 *
597 * SYNOPSIS
598 */
599 static inline osm_ni_context_t *osm_madw_get_ni_context_ptr(IN const osm_madw_t
600                                                             * const p_madw)
601 {
602         return ((osm_ni_context_t *) & p_madw->context);
603 }
604
605 /*
606 * PARAMETERS
607 *       p_madw
608 *               [in] Pointer to an osm_madw_t object.
609 *
610 * RETURN VALUES
611 *       Pointer to the start of the context structure.
612 *
613 * NOTES
614 *
615 * SEE ALSO
616 *********/
617
618 /****f* OpenSM: MAD Wrapper/osm_madw_get_pi_context_ptr
619 * NAME
620 *       osm_madw_get_pi_context_ptr
621 *
622 * DESCRIPTION
623 *       Gets a pointer to the PortInfo context in this MAD.
624 *
625 * SYNOPSIS
626 */
627 static inline osm_pi_context_t *osm_madw_get_pi_context_ptr(IN const osm_madw_t
628                                                             * const p_madw)
629 {
630         return ((osm_pi_context_t *) & p_madw->context);
631 }
632
633 /*
634 * PARAMETERS
635 *       p_madw
636 *               [in] Pointer to an osm_madw_t object.
637 *
638 * RETURN VALUES
639 *       Pointer to the start of the context structure.
640 *
641 * NOTES
642 *
643 * SEE ALSO
644 *********/
645
646 /****f* OpenSM: MAD Wrapper/osm_madw_get_nd_context_ptr
647 * NAME
648 *       osm_madw_get_nd_context_ptr
649 *
650 * DESCRIPTION
651 *       Gets a pointer to the NodeDescription context in this MAD.
652 *
653 * SYNOPSIS
654 */
655 static inline osm_nd_context_t *osm_madw_get_nd_context_ptr(IN const osm_madw_t
656                                                             * const p_madw)
657 {
658         return ((osm_nd_context_t *) & p_madw->context);
659 }
660
661 /*
662 * PARAMETERS
663 *       p_madw
664 *               [in] Pointer to an osm_madw_t object.
665 *
666 * RETURN VALUES
667 *       Pointer to the start of the context structure.
668 *
669 * NOTES
670 *
671 * SEE ALSO
672 *********/
673
674 /****f* OpenSM: MAD Wrapper/osm_madw_get_lft_context_ptr
675 * NAME
676 *       osm_madw_get_lft_context_ptr
677 *
678 * DESCRIPTION
679 *       Gets a pointer to the LFT context in this MAD.
680 *
681 * SYNOPSIS
682 */
683 static inline osm_lft_context_t *osm_madw_get_lft_context_ptr(IN const
684                                                               osm_madw_t *
685                                                               const p_madw)
686 {
687         return ((osm_lft_context_t *) & p_madw->context);
688 }
689
690 /*
691 * PARAMETERS
692 *       p_madw
693 *               [in] Pointer to an osm_madw_t object.
694 *
695 * RETURN VALUES
696 *       Pointer to the start of the context structure.
697 *
698 * NOTES
699 *
700 * SEE ALSO
701 *********/
702
703 /****f* OpenSM: MAD Wrapper/osm_madw_get_mft_context_ptr
704 * NAME
705 *       osm_madw_get_mft_context_ptr
706 *
707 * DESCRIPTION
708 *       Gets a pointer to the MFT context in this MAD.
709 *
710 * SYNOPSIS
711 */
712 static inline osm_mft_context_t *osm_madw_get_mft_context_ptr(IN const
713                                                               osm_madw_t *
714                                                               const p_madw)
715 {
716         return ((osm_mft_context_t *) & p_madw->context);
717 }
718
719 /*
720 * PARAMETERS
721 *       p_madw
722 *               [in] Pointer to an osm_madw_t object.
723 *
724 * RETURN VALUES
725 *       Pointer to the start of the context structure.
726 *
727 * NOTES
728 *
729 * SEE ALSO
730 *********/
731
732 /****f* OpenSM: MAD Wrapper/osm_madw_get_si_context_ptr
733 * NAME
734 *       osm_madw_get_si_context_ptr
735 *
736 * DESCRIPTION
737 *       Gets a pointer to the SwitchInfo context in this MAD.
738 *
739 * SYNOPSIS
740 */
741 static inline osm_si_context_t *osm_madw_get_si_context_ptr(IN const osm_madw_t
742                                                             * const p_madw)
743 {
744         return ((osm_si_context_t *) & p_madw->context);
745 }
746
747 /*
748 * PARAMETERS
749 *       p_madw
750 *               [in] Pointer to an osm_madw_t object.
751 *
752 * RETURN VALUES
753 *       Pointer to the start of the context structure.
754 *
755 * NOTES
756 *
757 * SEE ALSO
758 *********/
759
760 /****f* OpenSM: MAD Wrapper/osm_madw_get_smi_context_ptr
761 * NAME
762 *       osm_madw_get_smi_context_ptr
763 *
764 * DESCRIPTION
765 *       Gets a pointer to the SMInfo context in this MAD.
766 *
767 * SYNOPSIS
768 */
769 static inline osm_smi_context_t *osm_madw_get_smi_context_ptr(IN const
770                                                               osm_madw_t *
771                                                               const p_madw)
772 {
773         return ((osm_smi_context_t *) & p_madw->context);
774 }
775
776 /*
777 * PARAMETERS
778 *       p_madw
779 *               [in] Pointer to an osm_madw_t object.
780 *
781 * RETURN VALUES
782 *       Pointer to the start of the context structure.
783 *
784 * NOTES
785 *
786 * SEE ALSO
787 *********/
788
789 /****f* OpenSM: MAD Wrapper/osm_madw_get_pkey_context_ptr
790 * NAME
791 *       osm_madw_get_pkey_context_ptr
792 *
793 * DESCRIPTION
794 *       Gets a pointer to the P_Key context in this MAD.
795 *
796 * SYNOPSIS
797 */
798 static inline osm_pkey_context_t *osm_madw_get_pkey_context_ptr(IN const
799                                                                 osm_madw_t *
800                                                                 const p_madw)
801 {
802         return ((osm_pkey_context_t *) & p_madw->context);
803 }
804
805 /*
806 * PARAMETERS
807 *       p_madw
808 *               [in] Pointer to an osm_madw_t object.
809 *
810 * RETURN VALUES
811 *       Pointer to the start of the context structure.
812 *
813 * NOTES
814 *
815 * SEE ALSO
816 *********/
817
818 /****f* OpenSM: MAD Wrapper/osm_madw_get_slvl_context_ptr
819 * NAME
820 *       osm_madw_get_slvl_context_ptr
821 *
822 * DESCRIPTION
823 *       Gets a pointer to the PortInfo context in this MAD.
824 *
825 * SYNOPSIS
826 */
827 static inline osm_slvl_context_t *osm_madw_get_slvl_context_ptr(IN const
828                                                                 osm_madw_t *
829                                                                 const p_madw)
830 {
831         return ((osm_slvl_context_t *) & p_madw->context);
832 }
833
834 /*
835 * PARAMETERS
836 *       p_madw
837 *               [in] Pointer to an osm_madw_t object.
838 *
839 * RETURN VALUES
840 *       Pointer to the start of the context structure.
841 *
842 * NOTES
843 *
844 * SEE ALSO
845 *********/
846
847 /****f* OpenSM: MAD Wrapper/osm_madw_get_vla_context_ptr
848 * NAME
849 *       osm_madw_get_vla_context_ptr
850 *
851 * DESCRIPTION
852 *       Gets a pointer to the Vl Arb context in this MAD.
853 *
854 * SYNOPSIS
855 */
856 static inline osm_vla_context_t *osm_madw_get_vla_context_ptr(IN const
857                                                               osm_madw_t *
858                                                               const p_madw)
859 {
860         return ((osm_vla_context_t *) & p_madw->context);
861 }
862
863 /*
864 * PARAMETERS
865 *       p_madw
866 *               [in] Pointer to an osm_madw_t object.
867 *
868 * RETURN VALUES
869 *       Pointer to the start of the context structure.
870 *
871 * NOTES
872 *
873 * SEE ALSO
874 *********/
875
876 #ifndef OSM_VENDOR_INTF_OPENIB
877 /****f* OpenSM: MAD Wrapper/osm_madw_get_arbitrary_context_ptr
878 * NAME
879 *       osm_madw_get_arbitrary_context_ptr
880 *
881 * DESCRIPTION
882 *       Gets a pointer to the arbitrary context in this MAD.
883 *
884 * SYNOPSIS
885 */
886 static inline osm_arbitrary_context_t *osm_madw_get_arbitrary_context_ptr(IN
887                                                                           const
888                                                                           osm_madw_t
889                                                                           *
890                                                                           const
891                                                                           p_madw)
892 {
893         return ((osm_arbitrary_context_t *) & p_madw->context);
894 }
895
896 /*
897 * PARAMETERS
898 *       p_madw
899 *               [in] Pointer to an osm_madw_t object.
900 *
901 * RETURN VALUES
902 *       Pointer to the start of the context structure.
903 *
904 * NOTES
905 *
906 * SEE ALSO
907 *********/
908 #endif
909
910 /****f* OpenSM: MAD Wrapper/osm_madw_get_vend_ptr
911 * NAME
912 *       osm_madw_get_vend_ptr
913 *
914 * DESCRIPTION
915 *       Gets a pointer to the vendor specific MAD wrapper component.
916 *
917 * SYNOPSIS
918 */
919 static inline osm_vend_wrap_t *osm_madw_get_vend_ptr(IN const osm_madw_t *
920                                                      const p_madw)
921 {
922         return ((osm_vend_wrap_t *) & p_madw->vend_wrap);
923 }
924
925 /*
926 * PARAMETERS
927 *       p_madw
928 *               [in] Pointer to an osm_madw_t object.
929 *
930 * RETURN VALUES
931 *       Gets a pointer to the vendor specific MAD wrapper component.
932 *
933 * NOTES
934 *
935 * SEE ALSO
936 *********/
937
938 /****f* OpenSM: MAD Wrapper/osm_madw_get_vend_ptr
939 * NAME
940 *       osm_madw_get_vend_ptr
941 *
942 * DESCRIPTION
943 *       Returns the bind handle associated with this MAD.
944 *
945 * SYNOPSIS
946 */
947 static inline osm_bind_handle_t
948 osm_madw_get_bind_handle(IN const osm_madw_t * const p_madw)
949 {
950         return ((osm_bind_handle_t) p_madw->h_bind);
951 }
952
953 /*
954 * PARAMETERS
955 *       p_madw
956 *               [in] Pointer to an osm_madw_t object.
957 *
958 * RETURN VALUES
959 *       Returns the bind handle associated with this MAD.
960 *
961 * NOTES
962 *
963 * SEE ALSO
964 *********/
965
966 /****f* OpenSM: MAD Wrapper/osm_madw_get_mad_addr_ptr
967 * NAME
968 *       osm_madw_get_mad_addr_ptr
969 *
970 * DESCRIPTION
971 *       Returns the mad address structure associated with this MAD.
972 *
973 * SYNOPSIS
974 */
975 static inline osm_mad_addr_t *osm_madw_get_mad_addr_ptr(IN const osm_madw_t *
976                                                         const p_madw)
977 {
978         return ((osm_mad_addr_t *) & p_madw->mad_addr);
979 }
980
981 /*
982 * PARAMETERS
983 *       p_madw
984 *               [in] Pointer to an osm_madw_t object.
985 *
986 * RETURN VALUES
987 *       Returns the mad address structure associated with this MAD.
988 *
989 * NOTES
990 *
991 * SEE ALSO
992 *********/
993
994 /****f* OpenSM: MAD Wrapper/osm_madw_get_mad_ptr
995 * NAME
996 *       osm_madw_get_mad_ptr
997 *
998 * DESCRIPTION
999 *       Returns the mad address structure associated with this MAD.
1000 *
1001 * SYNOPSIS
1002 */
1003 static inline ib_mad_t *osm_madw_get_mad_ptr(IN const osm_madw_t * const p_madw)
1004 {
1005         return ((ib_mad_t *) p_madw->p_mad);
1006 }
1007
1008 /*
1009 * PARAMETERS
1010 *       p_madw
1011 *               [in] Pointer to an osm_madw_t object.
1012 *
1013 * RETURN VALUES
1014 *       Returns the mad address structure associated with this MAD.
1015 *
1016 * NOTES
1017 *
1018 * SEE ALSO
1019 *********/
1020
1021 /****f* OpenSM: MAD Wrapper/osm_madw_get_err_msg
1022 * NAME
1023 *       osm_madw_get_err_msg
1024 *
1025 * DESCRIPTION
1026 *       Returns the message with which to post this mad wrapper if
1027 *       an error occurs during processing the mad.
1028 *
1029 * SYNOPSIS
1030 */
1031 static inline cl_disp_msgid_t
1032 osm_madw_get_err_msg(IN const osm_madw_t * const p_madw)
1033 {
1034         return ((cl_disp_msgid_t) p_madw->fail_msg);
1035 }
1036
1037 /*
1038 * PARAMETERS
1039 *       p_madw
1040 *               [in] Pointer to an osm_madw_t object.
1041 *
1042 * RETURN VALUES
1043 *       Returns the message with which to post this mad wrapper if
1044 *       an error occurs during processing the mad.
1045 *
1046 * NOTES
1047 *
1048 * SEE ALSO
1049 *********/
1050
1051 /****f* OpenSM: MAD Wrapper/osm_madw_set_mad
1052 * NAME
1053 *       osm_madw_set_mad
1054 *
1055 * DESCRIPTION
1056 *       Associates a wire MAD with this MAD Wrapper object.
1057 *
1058 * SYNOPSIS
1059 */
1060 static inline void
1061 osm_madw_set_mad(IN osm_madw_t * const p_madw, IN const ib_mad_t * const p_mad)
1062 {
1063         p_madw->p_mad = p_mad;
1064 }
1065
1066 /*
1067 * PARAMETERS
1068 *       p_madw
1069 *               [in] Pointer to an osm_madw_t object.
1070 *
1071 *       p_mad
1072 *               [in] Pointer to the wire MAD to attach to this wrapper.
1073 *
1074 * RETURN VALUES
1075 *       None.
1076 *
1077 * NOTES
1078 *
1079 * SEE ALSO
1080 *********/
1081
1082 /****f* OpenSM: MAD Wrapper/osm_madw_copy_context
1083 * NAME
1084 *       osm_madw_copy_context
1085 *
1086 * DESCRIPTION
1087 *       Copies the controller context from one MAD Wrapper to another.
1088 *
1089 * SYNOPSIS
1090 */
1091 static inline void
1092 osm_madw_copy_context(IN osm_madw_t * const p_dest,
1093                       IN const osm_madw_t * const p_src)
1094 {
1095         p_dest->context = p_src->context;
1096 }
1097
1098 /*
1099 * PARAMETERS
1100 *       p_dest
1101 *               [in] Pointer to the destination osm_madw_t object.
1102 *
1103 *       p_src
1104 *               [in] Pointer to the source osm_madw_t object.
1105 *
1106 * RETURN VALUES
1107 *       None.
1108 *
1109 * NOTES
1110 *
1111 * SEE ALSO
1112 *********/
1113
1114 END_C_DECLS
1115 #endif                          /* _OSM_MADW_H_ */