|
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_ */
|