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