osm_madw.h revision 219820
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 61BEGIN_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*/ 70typedef 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*/ 138typedef 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*/ 170typedef 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*/ 188typedef 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*/ 202typedef 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*/ 218typedef 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*/ 233typedef 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*/ 248typedef 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*/ 264typedef 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*/ 280typedef 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*/ 296typedef 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*/ 307typedef 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*/ 327typedef 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*/ 343typedef 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*/ 369typedef 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*/ 404typedef 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*/ 472static inline void 473osm_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*/ 516static 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*/ 544static 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*/ 570static 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*/ 599static 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*/ 627static 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*/ 655static 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*/ 683static 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*/ 712static 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*/ 741static 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*/ 769static 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*/ 798static 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*/ 827static 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*/ 856static 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*/ 886static 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*/ 919static 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*/ 947static inline osm_bind_handle_t 948osm_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*/ 975static 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*/ 1003static 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*/ 1031static inline cl_disp_msgid_t 1032osm_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*/ 1060static inline void 1061osm_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*/ 1091static inline void 1092osm_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 1114END_C_DECLS 1115#endif /* _OSM_MADW_H_ */ 1116