Blame IbAccess/Common/Ibt/Gsa/gsamain.h

Packit Service 3470d1
/* BEGIN_ICS_COPYRIGHT4 ****************************************
Packit Service 3470d1
Packit Service 3470d1
Copyright (c) 2015-2017, Intel Corporation
Packit Service 3470d1
Packit Service 3470d1
Redistribution and use in source and binary forms, with or without
Packit Service 3470d1
modification, are permitted provided that the following conditions are met:
Packit Service 3470d1
Packit Service 3470d1
    * Redistributions of source code must retain the above copyright notice,
Packit Service 3470d1
      this list of conditions and the following disclaimer.
Packit Service 3470d1
    * Redistributions in binary form must reproduce the above copyright
Packit Service 3470d1
      notice, this list of conditions and the following disclaimer in the
Packit Service 3470d1
      documentation and/or other materials provided with the distribution.
Packit Service 3470d1
    * Neither the name of Intel Corporation nor the names of its contributors
Packit Service 3470d1
      may be used to endorse or promote products derived from this software
Packit Service 3470d1
      without specific prior written permission.
Packit Service 3470d1
Packit Service 3470d1
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Packit Service 3470d1
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit Service 3470d1
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Packit Service 3470d1
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
Packit Service 3470d1
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit Service 3470d1
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Packit Service 3470d1
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Packit Service 3470d1
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Packit Service 3470d1
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Packit Service 3470d1
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit Service 3470d1
Packit Service 3470d1
** END_ICS_COPYRIGHT4   ****************************************/
Packit Service 3470d1
/* [ICS VERSION STRING: unknown] */
Packit Service 3470d1
Packit Service 3470d1
#ifndef _IBA_IB_GSA_MAIN_H_
Packit Service 3470d1
#define _IBA_IB_GSA_MAIN_H_
Packit Service 3470d1
Packit Service 3470d1
Packit Service 3470d1
#include "datatypes.h"
Packit Service 3470d1
#include "stl_types.h"
Packit Service 3470d1
#include "stl_mad_priv.h"
Packit Service 3470d1
#include "vpi.h"
Packit Service 3470d1
#include "sma_osd.h"
Packit Service 3470d1
#include "ib_debug_osd.h"
Packit Service 3470d1
#include "vpi_export.h"
Packit Service 3470d1
#include "ib_smi.h"
Packit Service 3470d1
#include "ib_gsi.h"
Packit Service 3470d1
#include "ib_ibt.h"
Packit Service 3470d1
#include "ib_generalServices.h"
Packit Service 3470d1
#include "gsadebug.h"
Packit Service 3470d1
#include "vca_export.h"
Packit Service 3470d1
#include "statustext.h"
Packit Service 3470d1
#include "ibyteswap.h"
Packit Service 3470d1
#include "ispinlock.h"
Packit Service 3470d1
#include "isyscallback.h"
Packit Service 3470d1
#include "ilist.h"
Packit Service 3470d1
#include "itimer.h"
Packit Service 3470d1
#include "imath.h"
Packit Service 3470d1
#include "isyscallback.h"
Packit Service 3470d1
#include "smagsa.h"
Packit Service 3470d1
#include "gsi_params.h"
Packit Service 3470d1
Packit Service 3470d1
#if defined (__cplusplus)
Packit Service 3470d1
extern "C" {
Packit Service 3470d1
#endif
Packit Service 3470d1
Packit Service 3470d1
Packit Service 3470d1
Packit Service 3470d1
//
Packit Service 3470d1
// Definitions
Packit Service 3470d1
//
Packit Service 3470d1
Packit Service 3470d1
#define	MAX_CLIENT_ID						0xff
Packit Service 3470d1
Packit Service 3470d1
#define GSA_RECVQ_LOW_WATER					50	// when to grow GlobalRecvQ Pool
Packit Service 3470d1
Packit Service 3470d1
#if defined(DBG) || defined(IB_DEBUG)
Packit Service 3470d1
Packit Service 3470d1
#define	GSA_CLASS_SIG						0x73616c63		// 'salc'
Packit Service 3470d1
#define	GSA_DGRM_SIG						0x6d726764		// 'mrgd'
Packit Service 3470d1
Packit Service 3470d1
#endif
Packit Service 3470d1
Packit Service 3470d1
Packit Service 3470d1
//
Packit Service 3470d1
// Structures
Packit Service 3470d1
//
Packit Service 3470d1
extern IBT_GLOBAL IbtGlobal;
Packit Service 3470d1
Packit Service 3470d1
Packit Service 3470d1
//
Packit Service 3470d1
// Structure to holds sends
Packit Service 3470d1
//
Packit Service 3470d1
typedef struct _GSA_POST_SEND_LIST {
Packit Service 3470d1
	uint32							DgrmIn;
Packit Service 3470d1
	ATOMIC_UINT						DgrmOut;
Packit Service 3470d1
	IBT_DGRM_ELEMENT				*DgrmList;
Packit Service 3470d1
	boolean							SARRequest;
Packit Service 3470d1
} GSA_POST_SEND_LIST;
Packit Service 3470d1
Packit Service 3470d1
Packit Service 3470d1
//
Packit Service 3470d1
// structure for memory pool
Packit Service 3470d1
//
Packit Service 3470d1
typedef struct _IBT_MEM_POOL {
Packit Service 3470d1
	struct _IBT_MEM_POOL			*Next;			// link to Growable Pool
Packit Service 3470d1
	struct _IBT_MEM_POOL			*Parent;		// our parent Growable Pool
Packit Service 3470d1
	SYS_CALLBACK_ITEM				*CallbackItem;	// used for Growable Pools
Packit Service 3470d1
	ATOMIC_UINT						GrowScheduled;	// used for Growable Pools
Packit Service 3470d1
	
Packit Service 3470d1
	SPIN_LOCK						Lock;			// lock
Packit Service 3470d1
	uint32							TotalElements;	// No. of elements in pool
Packit Service 3470d1
	uint32							Elements;		// Available for Gets
Packit Service 3470d1
	IBT_DGRM_ELEMENT				*DgrmList;		// datagram list
Packit Service 3470d1
	uint32							BuffersPerElement;
Packit Service 3470d1
	uint8							ReceivePool:1;	// Send or receive pool
Packit Service 3470d1
													// default FALSE: 
Packit Service 3470d1
													// SENDPool-Client buffer
Packit Service 3470d1
	uint8							Growable:1;		// head of growable pool
Packit Service 3470d1
	GLOBAL_MEM_LIST					*MemList;		// global memlist;
Packit Service 3470d1
	void							*UdBlock;		// registered mem block
Packit Service 3470d1
	void							*HeaderBlock;	// header block
Packit Service 3470d1
	IB_HANDLE						ServiceHandle;	// user's handle
Packit Service 3470d1
Packit Service 3470d1
#if defined(DBG) || defined(IB_DEBUG)
Packit Service 3470d1
	uint32							SigInfo;
Packit Service 3470d1
#endif
Packit Service 3470d1
} IBT_MEM_POOL;
Packit Service 3470d1
Packit Service 3470d1
Packit Service 3470d1
typedef struct _IBT_DGRM_ELEMENT_PRIV {
Packit Service 3470d1
	IBT_DGRM_ELEMENT				DgrmElement;
Packit Service 3470d1
	IBT_MEM_POOL					*MemPoolHandle;
Packit Service 3470d1
	// TBD - replace this with a Union { pPostSendList; IsSarRecv }
Packit Service 3470d1
	GSA_POST_SEND_LIST				*Base;			// used for sends and recvs
Packit Service 3470d1
													// Sends: base to chain of
Packit Service 3470d1
													// multiple sends
Packit Service 3470d1
													// Recvs: Indicates SAR data
Packit Service 3470d1
	GSA_POST_SEND_LIST				PostSendList;	// The actual list
Packit Service 3470d1
	uint64							SavedSendTid;	// User's TID on a send.
Packit Service 3470d1
	IB_HANDLE						AvHandle;		// AV Handle
Packit Service 3470d1
	IB_LOCAL_DATASEGMENT			*DsList;		// list to Data segments
Packit Service 3470d1
	struct	_GSA_SAR_CONTEXT		*pSarContext;	// Pointer to context data 
Packit Service 3470d1
													// for SAR
Packit Service 3470d1
} IBT_DGRM_ELEMENT_PRIV;
Packit Service 3470d1
Packit Service 3470d1
Packit Service 3470d1
Packit Service 3470d1
//
Packit Service 3470d1
//   GSA_GLOBAL_INFO
Packit Service 3470d1
//
Packit Service 3470d1
//	This structure is used to keep track of global information and tie the 
Packit Service 3470d1
//	various lists maintained into meaningful related entities. There is only 
Packit Service 3470d1
//	one instance of this structure per the whole of GSA activeCAlist is used 
Packit Service 3470d1
//	to link the list of all CA's in the system. Every time a CA is added, a 
Packit Service 3470d1
//	new CA structure is created and linked to the end of this field in a 
Packit Service 3470d1
//	LIFO fashion.
Packit Service 3470d1
//
Packit Service 3470d1
//	calock is used to guard access to the above list ( activeCAlist ).
Packit Service 3470d1
//
Packit Service 3470d1
//	ServiceClassList is used to link the list of all registered service 
Packit Service 3470d1
//	classes. Every time a unique service class is registered, a service class 
Packit Service 3470d1
//	registration record ( GSA_SERVICE_CLASS_INFO ) is created and linked to
Packit Service 3470d1
//	this list in a LIFO fashion.
Packit Service 3470d1
//
Packit Service 3470d1
//	ServiceClassListLock is used to guard access to the list of service 
Packit Service 3470d1
//	classes ( ServiceClassList ).
Packit Service 3470d1
//
Packit Service 3470d1
//	The interfaces of GSA MUST check this state before providing any 
Packit Service 3470d1
//	useful functionality.
Packit Service 3470d1
//	if FALSE, GSA services are not available.
Packit Service 3470d1
//
Packit Service 3470d1
//	ConfigParam contains the list of configuration parameters used to configure 
Packit Service 3470d1
//	GSA. These values might be read from registry or from local configuration 
Packit Service 3470d1
//	file(s) , depending on the platform we are running on.
Packit Service 3470d1
//
Packit Service 3470d1
//
Packit Service 3470d1
typedef struct _GSA_GLOBAL_INFO
Packit Service 3470d1
{
Packit Service 3470d1
	//
Packit Service 3470d1
	// this keeps track of internally generated client ids. Normally, a client id 
Packit Service 3470d1
	// is an 8-bit value that is unique across a single management class. 
Packit Service 3470d1
	// For now, this is unique across all management classes.
Packit Service 3470d1
	//
Packit Service 3470d1
	// ????TOBEDONE. 
Packit Service 3470d1
	// Later, when we have more management classes , this needs to be
Packit Service 3470d1
	// changed so that they are unique across just one management class
Packit Service 3470d1
	//
Packit Service 3470d1
Packit Service 3470d1
	uint8							ClientId;
Packit Service 3470d1
Packit Service 3470d1
Packit Service 3470d1
	SPIN_LOCK						CaListLock;
Packit Service 3470d1
    SMA_OBJECT						SmObj;
Packit Service 3470d1
Packit Service 3470d1
	IB_HANDLE						DgrmPoolRecvQ;
Packit Service 3470d1
    
Packit Service 3470d1
    SPIN_LOCK						ServiceClassListLock;
Packit Service 3470d1
    QUICK_LIST						ServiceClassList;
Packit Service 3470d1
Packit Service 3470d1
	// SAR Info
Packit Service 3470d1
    SPIN_LOCK						SARSendListLock;
Packit Service 3470d1
	QUICK_LIST						SARSendList;
Packit Service 3470d1
    SPIN_LOCK						SARRecvListLock;
Packit Service 3470d1
	QUICK_LIST						SARRecvList;
Packit Service 3470d1
	ATOMIC_UINT						SARRecvDropped;
Packit Service 3470d1
Packit Service 3470d1
	//IB_HANDLE						NotifyHandle;	// Notification calls
Packit Service 3470d1
Packit Service 3470d1
	uint8							ClientIdArray[MAX_CLIENT_ID];
Packit Service 3470d1
} GSA_GLOBAL_INFO;
Packit Service 3470d1
Packit Service 3470d1
Packit Service 3470d1
Packit Service 3470d1
//
Packit Service 3470d1
// extern declaration for our global information structure
Packit Service 3470d1
//
Packit Service 3470d1
#ifndef g_GsaGlobalInfo
Packit Service 3470d1
extern GSA_GLOBAL_INFO *g_GsaGlobalInfo;
Packit Service 3470d1
#endif
Packit Service 3470d1
Packit Service 3470d1
//
Packit Service 3470d1
// GSA_SERVICE_CLASS_INFO
Packit Service 3470d1
//
Packit Service 3470d1
//
Packit Service 3470d1
//	This structure describes a registered service class . An instance of this 
Packit Service 3470d1
//	is created every time a unique service class is registered. 
Packit Service 3470d1
//
Packit Service 3470d1
//	ListItem is used to link this registration record into a list.
Packit Service 3470d1
//     
Packit Service 3470d1
//	Serviceclasssendlist is the head of all send buffers submitted by 
Packit Service 3470d1
//	the service class for sending. By definition these buffers are already 
Packit Service 3470d1
//	registered with one or more CAs.
Packit Service 3470d1
//
Packit Service 3470d1
//	serviceclassrecvlist is the head of all receive buffers submitted by 
Packit Service 3470d1
//	the service class for receiving. By definition, these buffers are 
Packit Service 3470d1
//	already registered with one or more CAs.
Packit Service 3470d1
//
Packit Service 3470d1
//	<MgmtClass, mgmtclassversion> describe the mgmt class and version 
Packit Service 3470d1
//	registered by the service class.
Packit Service 3470d1
//
Packit Service 3470d1
//	ServiceClassContext is the value supplied by the service class 
Packit Service 3470d1
//	during registration.
Packit Service 3470d1
//
Packit Service 3470d1
//	ReceiveCompletionCallback is the handler supplied by the service class 
Packit Service 3470d1
//	that is used to indicate receive completions on behalf of this service 
Packit Service 3470d1
//	class.
Packit Service 3470d1
//
Packit Service 3470d1
//	sendcompletehandler is the handler supplied by the service class used 
Packit Service 3470d1
//	to indicate send completions on behalf of this service class. 
Packit Service 3470d1
//
Packit Service 3470d1
//	Both ReceiveCompletionCallback and sendcompletehandler are 
Packit Service 3470d1
//	supplied by the service class and are used by GSA to indicate the 
Packit Service 3470d1
//	respective completion events.
Packit Service 3470d1
//
Packit Service 3470d1
//	MiscEventHandler is used to indicate miscellaneous events. This handler 
Packit Service 3470d1
//	is used to indicate the following events.
Packit Service 3470d1
//  CA being removed or disabled. In this case, the CA guid is provided 
Packit Service 3470d1
//	as input.
Packit Service 3470d1
//	A port being disconnected. In this case, the port GUID and the CA GUID 
Packit Service 3470d1
//	are provided as input.
Packit Service 3470d1
//	Other error events are also indicated. 
Packit Service 3470d1
//
Packit Service 3470d1
typedef struct _GSA_SERVICE_CLASS_INFO
Packit Service 3470d1
{
Packit Service 3470d1
	LIST_ITEM						ListItem;
Packit Service 3470d1
Packit Service 3470d1
	uint8							MgmtClass;
Packit Service 3470d1
	uint8							MgmtClassVersion;
Packit Service 3470d1
Packit Service 3470d1
	// Flags used to indicate responder, trap processor and report processor.
Packit Service 3470d1
	GSI_REGISTRATION_FLAGS			RegistrationFlags;
Packit Service 3470d1
Packit Service 3470d1
	boolean							bSARRequired;	// TRUE for SAR support
Packit Service 3470d1
Packit Service 3470d1
	void							*ServiceClassContext;
Packit Service 3470d1
	GSI_SEND_COMPLETION_CALLBACK	*SendCompletionCallback;
Packit Service 3470d1
	GSI_RECEIVE_CALLBACK			*ReceiveCompletionCallback;
Packit Service 3470d1
	
Packit Service 3470d1
	GSA_GLOBAL_INFO					*pGlobalInfo;
Packit Service 3470d1
Packit Service 3470d1
	uint8							ClientId;
Packit Service 3470d1
Packit Service 3470d1
#if defined(DBG) || defined(IB_DEBUG)
Packit Service 3470d1
	uint32							SigInfo;
Packit Service 3470d1
	ATOMIC_UINT						ErrorMsgs;
Packit Service 3470d1
#endif
Packit Service 3470d1
} GSA_SERVICE_CLASS_INFO;
Packit Service 3470d1
Packit Service 3470d1
//
Packit Service 3470d1
// Function declarations
Packit Service 3470d1
//
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
GSALoad(
Packit Service 3470d1
	IN IBT_COMPONENT_INFO		*ComponentInfo
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
void
Packit Service 3470d1
GSAUnload(void);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
GsaAddDevice(
Packit Service 3470d1
	IN	EUI64					CaGuid,
Packit Service 3470d1
	OUT void					**Context
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
GsaRemoveDevice(
Packit Service 3470d1
	IN EUI64					CaGuid,
Packit Service 3470d1
	IN void						*Context
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
void
Packit Service 3470d1
GsaInitGlobalSettings(void);
Packit Service 3470d1
Packit Service 3470d1
void
Packit Service 3470d1
GsaOsComponentInfo(
Packit Service 3470d1
	IN IBT_COMPONENT_INFO		*ComponentInfo
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
PrepareCaForReceives(
Packit Service 3470d1
	IN	EUI64					CaGuid
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
GetCaContextFromAvInfo(
Packit Service 3470d1
	IN	IB_ADDRESS_VECTOR		*AvInfo,
Packit Service 3470d1
	IN	uint32					CaMemIndex,
Packit Service 3470d1
	OUT	IB_HANDLE				*AvHandle,
Packit Service 3470d1
	OUT	IB_HANDLE				*Qp1Handle,
Packit Service 3470d1
	OUT	IB_HANDLE				*Cq1Handle,
Packit Service 3470d1
	OUT SPIN_LOCK				**QpLock,
Packit Service 3470d1
	OUT	IB_L_KEY				*LKey
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
GetGsiContextFromPortGuid(
Packit Service 3470d1
	IN	EUI64					PortGuid,
Packit Service 3470d1
	OUT	IB_HANDLE				*Qp1Handle,
Packit Service 3470d1
	OUT	uint8					*PortNumber
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
CreateDgrmPool(
Packit Service 3470d1
	IN	IB_HANDLE				ServiceHandle,
Packit Service 3470d1
	IN	uint32					ElementCount,
Packit Service 3470d1
	IN	uint32                  BuffersPerElement,
Packit Service 3470d1
	IN	uint32					BufferSizeArray[],
Packit Service 3470d1
	IN	uint32                  ContextSize,
Packit Service 3470d1
	OUT IB_HANDLE				*DgrmPoolHandle
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
DestroyDgrmPool(
Packit Service 3470d1
	IN	IB_HANDLE				DgrmPoolHandle
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
DgrmPoolGet(
Packit Service 3470d1
	IN	IB_HANDLE				DgrmPoolHandle,
Packit Service 3470d1
	IN OUT	uint32				*ElementCount,
Packit Service 3470d1
	OUT	IBT_DGRM_ELEMENT		**DgrmList
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
void
Packit Service 3470d1
DumpDgrmElement(
Packit Service 3470d1
	IN IBT_DGRM_ELEMENT		*DgrmElement
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
uint32
Packit Service 3470d1
DgrmPoolCount(
Packit Service 3470d1
	IN	IB_HANDLE				DgrmPoolHandle
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
uint32
Packit Service 3470d1
DgrmPoolTotal(
Packit Service 3470d1
	IN	IB_HANDLE				DgrmPoolHandle
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
DgrmPoolPut(
Packit Service 3470d1
	IN	IBT_DGRM_ELEMENT		*pDgrmList
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
CreateGrowableDgrmPool(
Packit Service 3470d1
	IN	IB_HANDLE				ServiceHandle,
Packit Service 3470d1
	IN	uint32					ElementCount,
Packit Service 3470d1
	IN	uint32                  BuffersPerElement,
Packit Service 3470d1
	IN	uint32					BufferSizeArray[],
Packit Service 3470d1
	IN	uint32                  ContextSize,
Packit Service 3470d1
	OUT IB_HANDLE				*DgrmPoolHandle
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
DgrmPoolGrow(
Packit Service 3470d1
	IN	IB_HANDLE				DgrmPoolHandle,
Packit Service 3470d1
	IN	uint32					ElementCount
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
void
Packit Service 3470d1
DgrmPoolGrowAsNeeded(
Packit Service 3470d1
	IN	IB_HANDLE				DgrmPoolHandle,
Packit Service 3470d1
	IN	uint32					lowWater,
Packit Service 3470d1
	IN	uint32					maxElements,
Packit Service 3470d1
	IN	uint32					growIncrement
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
CreateGlobalRecvQ(void);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
DgrmPoolAddToGlobalRecvQ(
Packit Service 3470d1
	IN	uint32					ElementCount
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
void
Packit Service 3470d1
GrowRecvQAsNeeded(void);
Packit Service 3470d1
Packit Service 3470d1
void
Packit Service 3470d1
DestroyGlobalRecvQ(void);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
DecrementGsiRecvQPostedForPortGuid(
Packit Service 3470d1
	IN	EUI64					PortGuid,
Packit Service 3470d1
	OUT	uint32					*RecvQPosted
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
PostRecvMsgToPort(
Packit Service 3470d1
	IN	uint32					ElementCount,
Packit Service 3470d1
	IN	EUI64					PortGuid
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
void	
Packit Service 3470d1
GsaNotifyCallback(
Packit Service 3470d1
	IN	IB_NOTIFY_RECORD		NotifyRecord
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
GsaNotifyClients(
Packit Service 3470d1
	IN	uint8				ClientId,
Packit Service 3470d1
	IN	MAD_COMMON			*pMadHdr,
Packit Service 3470d1
	IN	IBT_DGRM_ELEMENT	*pDgrm );
Packit Service 3470d1
Packit Service 3470d1
// has this client requested GSI to do RMPP protocol handling for it
Packit Service 3470d1
boolean
Packit Service 3470d1
IsSarClient(
Packit Service 3470d1
	IN	uint8				ClientId,
Packit Service 3470d1
	IN	uint8				MgmtClass );
Packit Service 3470d1
Packit Service 3470d1
// RMPP entry points, provided by the RMPP protocol provider
Packit Service 3470d1
Packit Service 3470d1
// destroy all SAR Context data, used during Unload
Packit Service 3470d1
void
Packit Service 3470d1
DestroySARContexts(void);
Packit Service 3470d1
Packit Service 3470d1
// RMPP Sender - initiate a transfer which may require RMPP
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
DoSARSend(
Packit Service 3470d1
	IN	GSA_SERVICE_CLASS_INFO	*ServiceClass, 
Packit Service 3470d1
	IN	GSA_POST_SEND_LIST		*PostList
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
// Common Completion Handlers for RMPP Sender and Receiver Contexts
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
ProcessSARRecvCompletion (
Packit Service 3470d1
	IN	MAD						*pMad,
Packit Service 3470d1
	IN	IBT_DGRM_ELEMENT		**ppDgrm
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
void
Packit Service 3470d1
ProcessSARSendCompletion (
Packit Service 3470d1
	IN	MAD						*pMad,
Packit Service 3470d1
	IN	IBT_DGRM_ELEMENT		*pDgrm
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
FSTATUS
Packit Service 3470d1
GsiDoSendDgrm(
Packit Service 3470d1
	GSA_SERVICE_CLASS_INFO		*ServiceClass,
Packit Service 3470d1
	IN	GSA_POST_SEND_LIST		*pPostList
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
void GsiSendInvalid(
Packit Service 3470d1
	IN	IBT_DGRM_ELEMENT		*pDgrm
Packit Service 3470d1
	);
Packit Service 3470d1
Packit Service 3470d1
#if defined (__cplusplus)
Packit Service 3470d1
};
Packit Service 3470d1
#endif
Packit Service 3470d1
Packit Service 3470d1
Packit Service 3470d1
#endif	// _IBA_IB_GSA_MAIN_H_