/* BEGIN_ICS_COPYRIGHT3 **************************************** Copyright (c) 2015-2017, Intel Corporation Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Intel Corporation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** END_ICS_COPYRIGHT3 ****************************************/ /* [ICS VERSION STRING: unknown] */ #ifndef _IBA_IB_SD_PRIV_H_ #define _IBA_IB_SD_PRIV_H_ /* IB Subnet Data Interface * The subnet data interface provides a simplied interface to the SM/SA and * automates queries, sets and deletes for commonly required information * from the SM/SA. * * The subnet data interface automatically handles the following: * - retries (client configurable) * - timeouts (client configurable) * - RMPP response coallessing and inter-record padding * - extraction of selected fields from a query to provide a concise response * to client * - multi-tiered queries (get paths to a node, etc) * * New drivers/applications should use the iba_* functions. * They can now be called directly. */ #include #ifdef __cplusplus extern "C" { #endif typedef struct _SMINFO_RECORD_RESULTS { uint32 NumSMInfoRecords; /* Number of SmInfoRecords returned */ IB_SMINFO_RECORD SMInfoRecords[1]; /* list of SMInfo records returned */ } SMINFO_RECORD_RESULTS, *PSMINFO_RECORD_RESULTS; typedef struct _LINK_RECORD_RESULTS { uint32 NumLinkRecords; /* Number of SmInfoRecords returned */ IB_LINK_RECORD LinkRecords[1]; /* list of SMInfo records returned */ } LINK_RECORD_RESULTS, *PLINK_RECORD_RESULTS; typedef struct _TRACE_RECORD_RESULTS { uint32 NumTraceRecords; /* Number of TraceRecords returned */ IB_TRACE_RECORD TraceRecords[1]; /* list of trace records returned */ } TRACE_RECORD_RESULTS, *PTRACE_RECORD_RESULTS; typedef struct _SWITCHINFO_RECORD_RESULTS { uint32 NumSwitchInfoRecords; /* Number of SwitchInfoRecords returned */ IB_SWITCHINFO_RECORD SwitchInfoRecords[1]; /* list of Switch Info records returned */ } SWITCHINFO_RECORD_RESULTS, *PSWITCHINFO_RECORD_RESULTS; typedef struct _LINEAR_FDB_RECORD_RESULTS { uint32 NumLinearFDBRecords; /* Number of LinearFDBRecords returned */ IB_LINEAR_FDB_RECORD LinearFDBRecords[1]; /* list of Linear FDB records returned */ } LINEAR_FDB_RECORD_RESULTS, *PLINEAR_FDB_RECORD_RESULTS; typedef struct _RANDOM_FDB_RECORD_RESULTS { uint32 NumRandomFDBRecords; /* Number of RandomFDBRecords returned */ IB_RANDOM_FDB_RECORD RandomFDBRecords[1]; /* list of Random FDB records returned */ } RANDOM_FDB_RECORD_RESULTS, *PRANDOM_FDB_RECORD_RESULTS; typedef struct _MCAST_FDB_RECORD_RESULTS { uint32 NumMCastFDBRecords; /* Number of MCastFDBRecords returned */ IB_MCAST_FDB_RECORD MCastFDBRecords[1]; /* list of multicast FDB records returned */ } MCAST_FDB_RECORD_RESULTS, *PMCAST_FDB_RECORD_RESULTS; typedef struct _VLARBTABLE_RECORD_RESULTS { uint32 NumVLArbTableRecords; /* Number of VLArbTableRecords returned */ IB_VLARBTABLE_RECORD VLArbTableRecords[1]; /* list of VL Arbitration table records returned */ } VLARBTABLE_RECORD_RESULTS, *PVLARBTABLE_RECORD_RESULTS; typedef struct _PKEYTABLE_RECORD_RESULTS { uint32 NumPKeyTableRecords; /* Number of PKeyTableRecords returned */ IB_P_KEY_TABLE_RECORD PKeyTableRecords[1]; /* list of P-Key table records returned */ } PKEYTABLE_RECORD_RESULTS, *PPKEYTABLE_RECORD_RESULTS; /* =========================================================================== * kernel mode function interface */ #if defined(VXWORKS) /* return a list of the PortGuids for presently active ports * caller must MemoryDeallocate(*ppLocalPortGuidsList) when done using it * this does not preempt * if no ports are found, can return FSUCCESS but with both outputs set to 0 * data pointed to only used during duration of call */ typedef FSTATUS (SDK_GET_LOCAL_PORT_GUIDS)( IN OUT uint64 **ppLocalPortGuidsList, IN OUT uint32 *LocalPortGuidsCount ); IBA_API SDK_GET_LOCAL_PORT_GUIDS iba_sd_get_local_port_guids_alloc; /* return a list of the PortGuids and SubnetPrefixes for presently active ports * caller must MemoryDeallocate(*ppLocalPortGuidsList) and * MemoryDeallocate(*ppLocalPortSubnetPrefixList) when done using it * this does not preempt * if no ports are found, can return FSUCCESS but with both outputs set to 0 * data pointed to only used during duration of call */ typedef FSTATUS (SDK_GET_LOCAL_PORT_GUIDS2)( IN OUT uint64 **ppLocalPortGuidsList, IN OUT uint64 **ppLocalPortSubnetPrefixList, IN OUT uint32 *LocalPortGuidsCount ); IBA_API SDK_GET_LOCAL_PORT_GUIDS2 iba_sd_get_local_port_guids_alloc2; /* Callback made in kernel mode when a Query[Port]FabricInformation completes * this callback occurs in a thread context, however it should not preempt * for long durations * data pointed to only valid during duration of call */ typedef void (SDK_QUERY_CALLBACK)( IN void *Context, /* as supplied in Query */ IN PQUERY pInputQuery, /* input request */ IN PQUERY_RESULT_VALUES pQueryResults /* results returned from Manager */ ); typedef SDK_QUERY_CALLBACK *PQUERY_CALLBACK;/* depricated */ /* perform a query of a manager (SA, etc) * using 1st active port * if pQueryControlParameters is NULL, values established for client session * will be used * this function does not preempt. When the operation completes a callback * will occur with the result data. * data pointed to only used during duration of call */ typedef FSTATUS (SDK_QUERY_FABRIC_INFO)( IN CLIENT_HANDLE ClientHandle, IN PQUERY pQuery, /* query to make */ IN SDK_QUERY_CALLBACK *Callback, /* called on completion */ IN COMMAND_CONTROL_PARAMETERS *pQueryControlParameters OPTIONAL, IN void *Context OPTIONAL/* context for callback */ ); IBA_API SDK_QUERY_FABRIC_INFO iba_sd_query_fabric_info; /* Same as QueryFabricInformation, except issued against a specific port */ typedef FSTATUS (SDK_QUERY_PORT_FABRIC_INFO)( IN CLIENT_HANDLE ClientHandle, IN EUI64 PortGuid, IN PQUERY pQuery, IN SDK_QUERY_CALLBACK *Callback, IN COMMAND_CONTROL_PARAMETERS *pQueryControlParameters OPTIONAL, IN void *Context OPTIONAL ); IBA_API SDK_QUERY_PORT_FABRIC_INFO iba_sd_query_port_fabric_info; /* Callback made in kernel mode when a [Port]FabricOperation completes * this callback occurs in a thread context, however it should not preempt * for long durations * data pointed to only valid during duration of call */ typedef void (SDK_FABRIC_OPERATION_CALLBACK)( IN void* Context,/* as supplied in FabricOperation */ IN FABRIC_OPERATION_DATA* pFabOp, /* contains response value */ IN FSTATUS Status, /* overall result of query */ IN uint32 MadStatus /* for FSUCCESS or FERROR Status: */ /* manager's Mad Status code from resp */ ); typedef SDK_FABRIC_OPERATION_CALLBACK *PFABRIC_OPERATION_CALLBACK;/* depricated */ /* perform a fabric operation (eg. set/delete, etc) against a manager * using 1st active port * if pCmdControlParameters is NULL, values established for client session * will be used * this function does not preempt. When the operation completes a callback * will occur with the result data. * data pointed to only used during duration of call */ typedef FSTATUS (SDK_FABRIC_OPERATION)( IN CLIENT_HANDLE ClientHandle, IN FABRIC_OPERATION_DATA* pFabOp, /* operation to perform */ IN SDK_FABRIC_OPERATION_CALLBACK *Callback, IN COMMAND_CONTROL_PARAMETERS* pCmdControlParameters OPTIONAL, IN void* Context OPTIONAL ); IBA_API SDK_FABRIC_OPERATION iba_sd_fabric_operation; /* Same as FabricOperation, except issued against a specific port */ typedef FSTATUS (SDK_PORT_FABRIC_OPERATION)( IN CLIENT_HANDLE ClientHandle, IN EUI64 PortGuid, IN FABRIC_OPERATION_DATA* pFabOp, /* operation to perform */ IN SDK_FABRIC_OPERATION_CALLBACK *Callback, IN COMMAND_CONTROL_PARAMETERS* pCmdControlParameters OPTIONAL, IN void* Context OPTIONAL ); IBA_API SDK_PORT_FABRIC_OPERATION iba_sd_port_fabric_operation; /* subscribe for an SA Trap/Notice * client will receive a callback when the given Trap/Notice is received */ typedef FSTATUS (SDK_TRAP_NOTICE_SUBSCRIBE)( IN CLIENT_HANDLE ClientHandle, IN uint16 TrapNumber, IN EUI64 PortGuid, IN void *pContext, IN SD_REPORT_NOTICE_CALLBACK *pReportNoticeCallback ); IBA_API SDK_TRAP_NOTICE_SUBSCRIBE iba_sd_trap_notice_subscribe; /* unsubscribe for an SA Trap/Notice * this does not preempt */ typedef FSTATUS (SDK_TRAP_NOTICE_UNSUBSCRIBE)( IN CLIENT_HANDLE ClientHandle, IN uint16 TrapNumber, IN EUI64 PortGuid ); IBA_API SDK_TRAP_NOTICE_UNSUBSCRIBE iba_sd_trap_notice_unsubscribe; /* have any of the client's traps been successfully subscribed for * this does not preempt */ typedef boolean (SDK_PORT_TRAPS_SUBSCRIBED)( IN EUI64 PortGuid ); IBA_API SDK_PORT_TRAPS_SUBSCRIBED iba_sd_port_traps_subscribed; /* Request join/create of a multicast group * * This version of the call uses the MGID as the group identifier * * SdClientHandle - handle from iba_sd_register * McFlags - MC_FLAGS_* to control when get callbacks * ComponentMask - indicate fields in pMcMemberRecord which are set * pContext - user defined context pointer supplied to callback * pMulticastCallback - callback function invoked when join state changes * * Since joins are per HCA port, this call handles multiple applications * joining the same MC group and will only issue joins to the SM on the * 1st application joining. Similarly iba_sd_leave_mcgroup will only issue * the leave to the SM on last application leaving. * * Internally this call maintains the joined state and will rejoin when * fabric events warrent, such as SM restart, port down and up, etc. * * this does not preempt * data pointed to only used during duration of call */ typedef FSTATUS (SDK_JOIN_MULTICAST_GROUP)( IN CLIENT_HANDLE SdClientHandle, IN uint16 McFlags, IN uint64 ComponentMask, IN IB_MCMEMBER_RECORD *pMcMemberRecord, IN void *pContext, IN SD_MULTICAST_CALLBACK *pMulticastCallback ); IBA_API SDK_JOIN_MULTICAST_GROUP iba_sd_join_mcgroup; /* Request join/create of a multicast group * * This version of the call uses the RID as the group identifier * * SdClientHandle - handle from iba_sd_register * McFlags - MC_FLAGS_* to control when get callbacks * ComponentMask - indicate fields in pMcMemberRecord which are set * pContext - user defined context pointer supplied to callback * pMulticastCallback - callback function invoked when join state changes * * Since joins are per HCA port, this call handles multiple applications * joining the same MC group and will only issue joins to the SM on the * 1st application joining. Similarly iba_sd_leave_mcgroup2 will only issue * the leave to the SM on last application leaving. * * Internally this call maintains the joined state and will rejoin when * fabric events warrent, such as SM restart, port down and up, etc. * * this does not preempt * data pointed to only used during duration of call */ typedef FSTATUS (SDK_JOIN_MULTICAST_GROUP2)( IN CLIENT_HANDLE SdClientHandle, IN uint16 McFlags, IN uint64 ComponentMask, IN IB_MCMEMBER_RECORD *pMcMemberRecord, IN EUI64 EgressPortGUID, IN void *pContext, IN SD_MULTICAST_CALLBACK *pMulticastCallback ); IBA_API SDK_JOIN_MULTICAST_GROUP2 iba_sd_join_mcgroup2; /* Request leave of a multicast group which was previously joined via * iba_sd_join_mcgroup * * Once this returns, no more callbacks will be issued for the given join. * This call does not trigger a callback. * * This will only issue the leave to the SM on last application leaving the * group. * * this does not preempt */ typedef FSTATUS (SDK_LEAVE_MULTICAST_GROUP)( IN CLIENT_HANDLE SdClientHandle, IN IB_GID *pMGID ); IBA_API SDK_LEAVE_MULTICAST_GROUP iba_sd_leave_mcgroup; /* Request leave of a multicast group which was previously joined via * iba_sd_join_mcgroup2 * * Once this returns, no more callbacks will be issued for the given join. * This call does not trigger a callback. * * This will only issue the leave to the SM on last application leaving the * group. * * this does not preempt */ typedef FSTATUS (SDK_LEAVE_MULTICAST_GROUP2)( IN CLIENT_HANDLE SdClientHandle, IN IB_GID *pMGID, IN IB_GID *pPortGID, IN EUI64 EgressPortGUID ); IBA_API SDK_LEAVE_MULTICAST_GROUP2 iba_sd_leave_mcgroup2; #endif /* defined(VXWORKS) */ #ifdef __cplusplus }; #endif #endif /* _IBA_IB_SD_PRIV_H_ */