Blame IbAccess/Common/Ibt/Cm/cm_common.h

Packit 857059
/* BEGIN_ICS_COPYRIGHT4 ****************************************
Packit 857059
Packit 857059
Copyright (c) 2015, Intel Corporation
Packit 857059
Packit 857059
Redistribution and use in source and binary forms, with or without
Packit 857059
modification, are permitted provided that the following conditions are met:
Packit 857059
Packit 857059
    * Redistributions of source code must retain the above copyright notice,
Packit 857059
      this list of conditions and the following disclaimer.
Packit 857059
    * Redistributions in binary form must reproduce the above copyright
Packit 857059
      notice, this list of conditions and the following disclaimer in the
Packit 857059
     documentation and/or other materials provided with the distribution.
Packit 857059
    * Neither the name of Intel Corporation nor the names of its contributors
Packit 857059
      may be used to endorse or promote products derived from this software
Packit 857059
      without specific prior written permission.
Packit 857059
Packit 857059
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Packit 857059
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit 857059
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Packit 857059
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
Packit 857059
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit 857059
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Packit 857059
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Packit 857059
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Packit 857059
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Packit 857059
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit 857059
Packit 857059
** END_ICS_COPYRIGHT4   ****************************************/
Packit 857059
/* [ICS VERSION STRING: unknown] */
Packit 857059
Packit 857059
/* declarations shared by kernel and user mode CMs */
Packit 857059
Packit 857059
/* Suppress duplicate loading of this file */
Packit 857059
#ifndef _IBA_IB_CM_COMMON_H_
Packit 857059
#define _IBA_IB_CM_COMMON_H_
Packit 857059
Packit 857059
Packit 857059
#if defined (__cplusplus)
Packit 857059
extern "C" {
Packit 857059
#endif
Packit 857059
Packit 857059
/* OS independent routines */
Packit 857059
#include "datatypes.h"
Packit 857059
#include "ievent.h"
Packit 857059
#include "itimer.h"
Packit 857059
#include "imemory.h"
Packit 857059
#include "ispinlock.h"
Packit 857059
#include "idebug.h"
Packit 857059
#include "ithread.h"
Packit 857059
#include "isyscallback.h"
Packit 857059
#include "iquickmap.h"
Packit 857059
#include "imath.h"
Packit 857059
#include "ib_cm.h"
Packit 857059
#include "cm_params.h"
Packit 857059
Packit 857059
Packit 857059
/*************************************************************************
Packit 857059
 * Defines
Packit 857059
 */
Packit 857059
Packit 857059
/* The following debug macros must be defined before including the "ib_debug.h" */
Packit 857059
#define	_DBG_PRINT_EPILOG(LEVEL,STRING)
Packit 857059
#define	_DBG_PRINT_PROLOG(LEVEL,STRING)
Packit 857059
#define	_DBG_ERROR_EPILOG(LEVEL,STRING)
Packit 857059
#define	_DBG_ERROR_PROLOG(LEVEL,STRING)
Packit 857059
#define	_DBG_FATAL_EPILOG(LEVEL,STRING)
Packit 857059
#define	_DBG_FATAL_PROLOG(LEVEL,STRING)
Packit 857059
#define _DBG_CHK_IRQL(IRQL)
Packit 857059
Packit 857059
#include "ib_debug.h"
Packit 857059
Packit 857059
#undef _ib_dbg_params
Packit 857059
#define _ib_dbg_params cm_debug_params
Packit 857059
extern IB_DBG_PARAMS	cm_debug_params;
Packit 857059
Packit 857059
/* Memory tag to use in all memory allocation */
Packit 857059
#define CM_MEM_TAG						0xbeef /*_ib_dbg_params.mem_tag */
Packit 857059
Packit 857059
/* Generic macros to test, set or clear bits */
Packit 857059
#define BitTest(a,b)					((a) & (b))
Packit 857059
#define BitSet(a,b)						((a) |= (b))
Packit 857059
#define BitClear(a,b)					((a) &= (~(b)))
Packit 857059
Packit 857059
#define UNUSED_VAR(x)	(void)(x)
Packit 857059
Packit 857059
// forward type decl
Packit 857059
struct _IBT_COMPONENT_INFO; 
Packit 857059
Packit 857059
/*************************************************************************
Packit 857059
 * Doubly link-list macros
Packit 857059
 */
Packit 857059
typedef struct DLIST_ENTRY {
Packit 857059
   struct DLIST_ENTRY *Next;
Packit 857059
   struct DLIST_ENTRY *Prev;
Packit 857059
} DLIST_ENTRY, *PDLIST_ENTRY;
Packit 857059
Packit 857059
/*
Packit 857059
 *  void
Packit 857059
 *  DListInit(
Packit 857059
 *      PDLIST_ENTRY ListHead
Packit 857059
 *      );
Packit 857059
 */
Packit 857059
#define DLIST_INIT	DListInit
Packit 857059
Packit 857059
#define DListInit(ListHead) (\
Packit 857059
    (ListHead)->Next = (ListHead)->Prev = (ListHead))
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 *  boolean
Packit 857059
 *  DListIsEmpty(
Packit 857059
 *      PDLIST_ENTRY ListHead
Packit 857059
 *      );
Packit 857059
 */
Packit 857059
#define DLIST_IS_EMPTY			DListIsEmpty
Packit 857059
Packit 857059
#define DListIsEmpty(ListHead) \
Packit 857059
    ((ListHead)->Next == (ListHead))
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 *  PDLIST_ENTRY
Packit 857059
 *  DListGetNext(
Packit 857059
 *      PDLIST_ENTRY Entry
Packit 857059
 *      );
Packit 857059
 */
Packit 857059
#define	DLIST_GET_NEXT 			DListGetNext
Packit 857059
Packit 857059
#define DListGetNext(Entry) \
Packit 857059
    (Entry)->Next
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 *  PDLIST_ENTRY
Packit 857059
 *  DListGetPrev(
Packit 857059
 *      PDLIST_ENTRY Entry
Packit 857059
 *      );
Packit 857059
 */
Packit 857059
#define	DLIST_GET_PREV			DListGetPrev
Packit 857059
Packit 857059
#define DListGetPrev(Entry) \
Packit 857059
    (Entry)->Prev
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 *  PDLIST_ENTRY
Packit 857059
 *  DListGetHead(
Packit 857059
 *      PDLIST_ENTRY ListHead
Packit 857059
 *      );
Packit 857059
 */
Packit 857059
#define	DLIST_GET_HEAD			DListGetHead
Packit 857059
Packit 857059
#define DListGetHead(ListHead) \
Packit 857059
    (ListHead)->Next
Packit 857059
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 *  PDLIST_ENTRY
Packit 857059
 *  DListRemoveHead(
Packit 857059
 *      PDLIST_ENTRY ListHead
Packit 857059
 *      );
Packit 857059
 */
Packit 857059
Packit 857059
#define	DLIST_REMOVE_HEAD		DListRemoveHead
Packit 857059
Packit 857059
#define DListRemoveHead(ListHead, List, Obj) \
Packit 857059
    (ListHead)->Next;\
Packit 857059
    {DListRemoveEntry((ListHead)->Next, List, Obj)}
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 *  PDLIST_ENTRY
Packit 857059
 *  DListRemoveTail(
Packit 857059
 *      PDLIST_ENTRY ListHead
Packit 857059
 *      );
Packit 857059
 */
Packit 857059
#define	DLIST_REMOVE_TAIL		DListRemoveTail
Packit 857059
Packit 857059
#define DListRemoveTail(ListHead, List, Obj) \
Packit 857059
    (ListHead)->Prev;\
Packit 857059
    {DListRemoveEntry((ListHead)->Prev, List, Obj)}
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 *  void
Packit 857059
 *  DListRemoveEntry(
Packit 857059
 *      PDLIST_ENTRY Entry
Packit 857059
 *      );
Packit 857059
 */
Packit 857059
#define	DLIST_REMOVE_ENTRY		DListRemoveEntry
Packit 857059
Packit 857059
#define DListRemoveEntry(Entry, List, Obj) {\
Packit 857059
    PDLIST_ENTRY pNext = (Entry)->Next;\
Packit 857059
    PDLIST_ENTRY pPrev = (Entry)->Prev;\
Packit 857059
    pPrev->Next = pNext;\
Packit 857059
    pNext->Prev = pPrev;\
Packit 857059
	DListInit(Entry);\
Packit 857059
	_DBG_INFO(("<cep 0x%p> --> Removed from " #List "\n", _DBG_PTR(Obj)));\
Packit 857059
	}
Packit 857059
Packit 857059
/*
Packit 857059
 *  void
Packit 857059
 *  DListInsertTail(
Packit 857059
 *      PDLIST_ENTRY ListHead,
Packit 857059
 *      PDLIST_ENTRY Entry
Packit 857059
 *      );
Packit 857059
 */
Packit 857059
Packit 857059
#define	DLIST_INSERT_TAIL		DListInsertTail
Packit 857059
Packit 857059
#define DListInsertTail(ListHead, Entry, List, Obj) {\
Packit 857059
    PDLIST_ENTRY pHead = (ListHead);\
Packit 857059
    PDLIST_ENTRY pPrev = (ListHead)->Prev;\
Packit 857059
    (Entry)->Next = pHead;\
Packit 857059
    (Entry)->Prev = pPrev;\
Packit 857059
    pPrev->Next = (Entry);\
Packit 857059
    pHead->Prev = (Entry);\
Packit 857059
	_DBG_INFO(("<cep 0x%p> --> Insert into " #List "\n", _DBG_PTR(Obj)));\
Packit 857059
    }
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 *  void
Packit 857059
 *  DListInsertHead(
Packit 857059
 *      PDLIST_ENTRY ListHead,
Packit 857059
 *      PDLIST_ENTRY Entry
Packit 857059
 *      );
Packit 857059
 */
Packit 857059
#define	DLIST_INSERT_HEAD		DListInsertHead
Packit 857059
Packit 857059
#define DListInsertHead(ListHead, Entry, List, Obj) {\
Packit 857059
    PDLIST_ENTRY pHead = (ListHead);\
Packit 857059
    PDLIST_ENTRY pNext = (ListHead)->Next;\
Packit 857059
    (Entry)->Next = pNext;\
Packit 857059
    (Entry)->Prev = pHead;\
Packit 857059
    pNext->Prev = (Entry);\
Packit 857059
    pHead->Next = (Entry);\
Packit 857059
	_DBG_INFO(("<cep 0x%p> --> Insert into " #List "\n", _DBG_PTR(Obj)));\
Packit 857059
    }
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 *  void
Packit 857059
 *  DListIterate(
Packit 857059
 *      PDLIST_ENTRY anchor,
Packit 857059
 *      PDLIST_ENTRY index,
Packit 857059
 *		PDLIST_ENTRY listp
Packit 857059
 *      );
Packit 857059
 */
Packit 857059
Packit 857059
#define	DLIST_ITERATE	DListIterate
Packit 857059
Packit 857059
#define DListIterate(anchor, index, listp) \
Packit 857059
	(anchor) = (PDLIST_ENTRY)(listp); \
Packit 857059
	for((index) = (anchor)->Next; (index) != (anchor); (index) = (index)->Next)
Packit 857059
Packit 857059
/*************************************************************************
Packit 857059
 * Keyed Map macros
Packit 857059
 */
Packit 857059
Packit 857059
#define CM_MAP cl_qmap_t
Packit 857059
#define CM_MAP_ITEM cl_map_item_t
Packit 857059
Packit 857059
#define CM_MapInit(pMap, pFunc)	cl_qmap_init(pMap, pFunc)
Packit 857059
#define CM_MapHead(pMap)		cl_qmap_head(pMap)
Packit 857059
#define CM_MapEnd(pMap)			cl_qmap_end(pMap)
Packit 857059
#define CM_MapNext(pMapEntry)	cl_qmap_next(pMapEntry)
Packit 857059
#define CM_MapPrev(pMapEntry)	cl_qmap_prev(pMapEntry)
Packit 857059
#define CM_MapGet(pMap, Key)	cl_qmap_get(pMap, Key)
Packit 857059
#define CM_MapGetCompare(pMap, Key, pFunc) cl_qmap_get_compare(pMap, Key, pFunc)
Packit 857059
#define CM_MapIsEmpty(pMap)		cl_is_qmap_empty(pMap)
Packit 857059
Packit 857059
#define CM_MapInsert(pMap, Key, pEntry, MapName, pCEP) {\
Packit 857059
	CM_MAP_ITEM *pMapEntry; \
Packit 857059
	pMapEntry = cl_qmap_insert(pMap, Key, pEntry); \
Packit 857059
	/* If duplicate key, insert does nothing and returns existing entry */ \
Packit 857059
	ASSERT(pMapEntry == pEntry); \
Packit 857059
	_DBG_INFO(("<cep 0x%p> --> Insert into " #MapName "\n", _DBG_PTR(pCEP)));\
Packit 857059
	}
Packit 857059
Packit 857059
#define CM_MapRemoveEntry(pMap, pEntry, MapName, pCEP) {\
Packit 857059
	cl_qmap_remove_item(pMap, pEntry); \
Packit 857059
	_DBG_INFO(("<cep 0x%p> --> Removed from " #MapName "\n", _DBG_PTR(pCEP)));\
Packit 857059
	}
Packit 857059
Packit 857059
Packit 857059
/*************************************************************************/
Packit 857059
Packit 857059
/*************************************************************************
Packit 857059
 * Function prototypes
Packit 857059
 */
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * CmInit
Packit 857059
 *
Packit 857059
 *	Initialize the CM module. This should only be called once normally during
Packit 857059
 *	system startup time.
Packit 857059
 *
Packit 857059
 *
Packit 857059
 *
Packit 857059
 *
Packit 857059
 * INPUTS:
Packit 857059
 *
Packit 857059
 *	None.
Packit 857059
 *	
Packit 857059
 *
Packit 857059
 * OUTPUTS:
Packit 857059
 *
Packit 857059
 *	None.
Packit 857059
 *
Packit 857059
 *
Packit 857059
 * RETURNS:
Packit 857059
 *
Packit 857059
 *	FSUCCESS
Packit 857059
 *	FERROR
Packit 857059
 *	FINSUFFICIENT_RESOURCES
Packit 857059
 *
Packit 857059
 */
Packit 857059
FSTATUS
Packit 857059
CmInit(
Packit 857059
	IN struct _IBT_COMPONENT_INFO *ComponentInfo
Packit 857059
	);
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * CmDestroy
Packit 857059
 *
Packit 857059
 *	Destroy the CM module. This should only be called once normally during
Packit 857059
 *	system shutdown time to cleanup any resources used by the CM.
Packit 857059
 *
Packit 857059
 *
Packit 857059
 *
Packit 857059
 *
Packit 857059
 * INPUTS:
Packit 857059
 *
Packit 857059
 *	None.
Packit 857059
 *	
Packit 857059
 *
Packit 857059
 * OUTPUTS:
Packit 857059
 *
Packit 857059
 *	None.
Packit 857059
 *
Packit 857059
 *
Packit 857059
 * RETURNS:
Packit 857059
 *
Packit 857059
 *	FSUCCESS
Packit 857059
 *	FERROR
Packit 857059
 *
Packit 857059
 */
Packit 857059
void
Packit 857059
CmDestroy( void );
Packit 857059
Packit 857059
Packit 857059
/*
Packit 857059
 * CmGetConnInfo
Packit 857059
 *
Packit 857059
 *	This routine is used to retrieve the connection status and information
Packit 857059
 *	on the specified endpoint.  This is intended for Internal use only as part
Packit 857059
 *  of generating the arguments for CM callbacks
Packit 857059
 *
Packit 857059
 *  Internal use only
Packit 857059
 *
Packit 857059
 * INPUTS:
Packit 857059
 *
Packit 857059
 *	hCEP				- Handle to the CEP object.
Packit 857059
 *
Packit 857059
 *	pConnInfo			- Specify the buffer to store the connection information and status.
Packit 857059
 *
Packit 857059
 * OUTPUTS:
Packit 857059
 *
Packit 857059
 *	None.
Packit 857059
 *
Packit 857059
 *
Packit 857059
 * RETURNS:
Packit 857059
 *
Packit 857059
 *	FSUCCESS
Packit 857059
 *
Packit 857059
 *	FERROR
Packit 857059
 *
Packit 857059
 */
Packit 857059
FSTATUS
Packit 857059
CmGetConnInfo(
Packit 857059
	IN IB_HANDLE				hCEP,
Packit 857059
	OUT CM_CONN_INFO*			pConnInfo
Packit 857059
	);
Packit 857059
Packit 857059
Packit 857059
#if defined (__cplusplus)
Packit 857059
};
Packit 857059
#endif
Packit 857059
Packit 857059
Packit 857059
#endif  /* _IBA_IB_CM_COMMON_H_ */