264 lines
7.2 KiB
C
264 lines
7.2 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1998-1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
macros.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Macros used in ATMEPVC
|
||
|
|
||
|
Author:
|
||
|
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
Who When What
|
||
|
-------- -------- ----
|
||
|
ADube 03-23-00 created, .
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
|
||
|
#ifndef _MACROS_H
|
||
|
#define _MACROS_H
|
||
|
|
||
|
|
||
|
#define FALL_THROUGH // For informational purpose in a switch statement
|
||
|
|
||
|
|
||
|
// Warning -- FAIL(NDIS_STATUS_PENDING) == TRUE
|
||
|
//
|
||
|
#define FAIL(_Status) ((_Status) != NDIS_STATUS_SUCCESS)
|
||
|
#define PEND(_Status) ((_Status) == NDIS_STATUS_PENDING)
|
||
|
|
||
|
#if RM_EXTRA_CHECKING
|
||
|
#define LOCKHDR(_pHdr, _psr) \
|
||
|
RmWriteLockObject((_pHdr), dbg_func_locid, (_psr))
|
||
|
#else // !RM_EXTRA_CHECKING
|
||
|
#define LOCKHDR(_pHdr, _psr) \
|
||
|
RmWriteLockObject((_pHdr), (_psr))
|
||
|
#endif // !RM_EXTRA_CHECKING
|
||
|
|
||
|
#define LOCKOBJ(_pObj, _psr) \
|
||
|
LOCKHDR(&(_pObj)->Hdr, (_psr))
|
||
|
|
||
|
#define UNLOCKHDR(_pHdr, _psr) \
|
||
|
RmUnlockObject((_pHdr), (_psr))
|
||
|
#define UNLOCKOBJ(_pObj, _psr) \
|
||
|
UNLOCKHDR(&(_pObj)->Hdr, (_psr))
|
||
|
|
||
|
|
||
|
|
||
|
#define EPVC_ALLOCSTRUCT(_p, _tag) \
|
||
|
NdisAllocateMemoryWithTag(&(_p), sizeof(*(_p)), (_tag))
|
||
|
|
||
|
|
||
|
|
||
|
#define EPVC_FREE(_p) NdisFreeMemory((_p), 0, 0)
|
||
|
|
||
|
#define EPVC_ZEROSTRUCT(_p) \
|
||
|
NdisZeroMemory((_p), sizeof(*(_p)))
|
||
|
|
||
|
#define ARRAY_LENGTH(_array) (sizeof(_array)/sizeof((_array)[0]))
|
||
|
|
||
|
#if RM_EXTRA_CHECKING
|
||
|
#define DBG_ADDASSOC(_phdr, _e1, _e2, _assoc, _fmt, _psr)\
|
||
|
RmDbgAddAssociation( \
|
||
|
dbg_func_locid, \
|
||
|
(_phdr), \
|
||
|
(UINT_PTR) (_e1), \
|
||
|
(UINT_PTR) (_e2), \
|
||
|
(_assoc), \
|
||
|
(_fmt), \
|
||
|
(_psr) \
|
||
|
)
|
||
|
|
||
|
#define DBG_DELASSOC(_phdr, _e1, _e2, _assoc, _psr) \
|
||
|
RmDbgDeleteAssociation( \
|
||
|
dbg_func_locid, \
|
||
|
(_phdr), \
|
||
|
(UINT_PTR) (_e1), \
|
||
|
(UINT_PTR) (_e2), \
|
||
|
(_assoc), \
|
||
|
(_psr) \
|
||
|
)
|
||
|
|
||
|
|
||
|
// (debug only) Enumeration of types of associations.
|
||
|
//
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#else // !RM_EXTRA_CHECKING
|
||
|
#define DBG_ADDASSOC(_phdr, _e1, _e2, _assoc, _fmt, _psr) (0)
|
||
|
#define DBG_DELASSOC(_phdr, _e1, _e2, _assoc, _psr) (0)
|
||
|
#endif // !RM_EXTRA_CHECKING
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#define EPVC_ATPASSIVE() (KeGetCurrentIrql()==PASSIVE_LEVEL)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#if DO_TIMESTAMPS
|
||
|
|
||
|
void
|
||
|
epvcTimeStamp(
|
||
|
char *szFormatString,
|
||
|
UINT Val
|
||
|
);
|
||
|
#define TIMESTAMP(_FormatString) \
|
||
|
epvcTimeStamp( "TIMESTAMP %lu:%lu.%lu ATMEPVC " _FormatString "\n", 0)
|
||
|
#define TIMESTAMP1(_FormatString, _Val) \
|
||
|
epvcTimeStamp( "TIMESTAMP %lu:%lu.%lu ATMEPVC " _FormatString "\n", (_Val))
|
||
|
|
||
|
#else // !DO_TIMESTAMPS
|
||
|
|
||
|
#define TIMESTAMP(_FormatString)
|
||
|
#define TIMESTAMP1(_FormatString, _Val)
|
||
|
#endif // !DO_TIMESTAMPS
|
||
|
|
||
|
|
||
|
#define TRACE_BREAK(_Mod, Str) \
|
||
|
TRACE (TL_A, _Mod, Str); \
|
||
|
ASSERT (NdisStatus == NDIS_STATUS_SUCCESS); \
|
||
|
break;
|
||
|
|
||
|
#define GET_ADAPTER_FROM_MINIPORT(_pM) _pM->pAdapter
|
||
|
|
||
|
|
||
|
//
|
||
|
// Miniport Flag access routines
|
||
|
//
|
||
|
|
||
|
#define MiniportTestFlag(_A, _F) ((epvcReadFlags(&(_A)->Hdr.State) & (_F))!= 0)
|
||
|
#define MiniportSetFlag(_A, _F) (epvcSetFlags(&(_A)->Hdr.State, (_F)))
|
||
|
#define MiniportClearFlag(_A, _F) (epvcClearFlags(&(_A)->Hdr.State, (_F)))
|
||
|
#define MiniportTestFlags(_A, _F) ((epvcReadFlags(&(_A)->Hdr.State) & (_F)) == (_F))
|
||
|
|
||
|
|
||
|
//
|
||
|
// Adapter Flag access routines
|
||
|
//
|
||
|
|
||
|
#define AdapterTestFlag(_A, _F) ((epvcReadFlags(&(_A)->Hdr.State) & (_F))!= 0)
|
||
|
#define AdapterSetFlag(_A, _F) (epvcSetFlags(&(_A)->Hdr.State, (_F)))
|
||
|
#define AdapterClearFlag(_A, _F) (epvcClearFlags(&(_A)->Hdr.State, (_F)))
|
||
|
#define AdapterTestFlags(_A, _F) ((epvcReadFlags(&(_A)->Hdr.State) & (_F)) == (_F))
|
||
|
|
||
|
#define epvcLinkToExternal(_Hdr, _Luid, _Ext, _Num, _Str, _sr) \
|
||
|
RmLinkToExternalEx (_Hdr,_Luid,_Ext,_Num,_Str,_sr);
|
||
|
|
||
|
|
||
|
#define epvcUnlinkFromExternal(_Hdr, _Luid, _Ext, _Assoc, _sr) \
|
||
|
RmUnlinkFromExternalEx( \
|
||
|
_Hdr, \
|
||
|
_Luid, \
|
||
|
_Ext, \
|
||
|
_Assoc, \
|
||
|
_sr \
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/*++
|
||
|
ULONG
|
||
|
LINKSPEED_TO_CPS(
|
||
|
IN ULONG LinkSpeed
|
||
|
)
|
||
|
Convert from NDIS "Link Speed" to cells per second
|
||
|
--*/
|
||
|
#define LINKSPEED_TO_CPS(_LinkSpeed) (((_LinkSpeed)*100)/(48*8))
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#define CALL_PARAMETER_SIZE sizeof(CO_CALL_PARAMETERS) + \
|
||
|
sizeof(CO_CALL_MANAGER_PARAMETERS) + \
|
||
|
sizeof(CO_MEDIA_PARAMETERS) + \
|
||
|
sizeof(ATM_MEDIA_PARAMETERS)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#define MP_OFFSET(field) ((UINT)FIELD_OFFSET(EPVC_I_MINIPORT,field))
|
||
|
#define MP_SIZE(field) sizeof(((PEPVC_I_MINIPORT)0)->field)
|
||
|
|
||
|
|
||
|
// All memory allocations and frees are done with these ALLOC_*/FREE_*
|
||
|
// macros/inlines to allow memory management scheme changes without global
|
||
|
// editing. For example, might choose to lump several lookaside lists of
|
||
|
// nearly equal sized items into a single list for efficiency.
|
||
|
//
|
||
|
// NdisFreeMemory requires the length of the allocation as an argument. NT
|
||
|
// currently doesn't use this for non-paged memory, but according to JameelH,
|
||
|
// Windows95 does. These inlines stash the length at the beginning of the
|
||
|
// allocation, providing the traditional malloc/free interface. The
|
||
|
// stash-area is a ULONGLONG so that all allocated blocks remain ULONGLONG
|
||
|
// aligned as they would be otherwise, preventing problems on Alphas.
|
||
|
//
|
||
|
__inline
|
||
|
VOID*
|
||
|
ALLOC_NONPAGED(
|
||
|
IN ULONG ulBufLength,
|
||
|
IN ULONG ulTag )
|
||
|
{
|
||
|
CHAR* pBuf;
|
||
|
|
||
|
NdisAllocateMemoryWithTag(
|
||
|
&pBuf, (UINT )(ulBufLength + MEMORY_ALLOCATION_ALIGNMENT), ulTag );
|
||
|
if (!pBuf)
|
||
|
{
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
((ULONG* )pBuf)[ 0 ] = ulBufLength;
|
||
|
((ULONG* )pBuf)[ 1 ] = ulTag;
|
||
|
return (pBuf + MEMORY_ALLOCATION_ALIGNMENT);
|
||
|
}
|
||
|
|
||
|
__inline
|
||
|
VOID
|
||
|
FREE_NONPAGED(
|
||
|
IN VOID* pBuf )
|
||
|
{
|
||
|
ULONG ulBufLen;
|
||
|
|
||
|
ulBufLen = *((ULONG* )(((CHAR* )pBuf) - MEMORY_ALLOCATION_ALIGNMENT));
|
||
|
NdisFreeMemory(
|
||
|
((CHAR* )pBuf) - MEMORY_ALLOCATION_ALIGNMENT,
|
||
|
(UINT )(ulBufLen + MEMORY_ALLOCATION_ALIGNMENT),
|
||
|
0 );
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#define CanMiniportIndicate(_M) (MiniportTestFlag(_M, fMP_MiniportInitialized)== TRUE)
|
||
|
|
||
|
|
||
|
#define epvcIncrementMallocFailure()
|
||
|
|
||
|
|
||
|
#define ASSERTAndBreak(_condition) ASSERT(_condition); break;
|
||
|
|
||
|
#define epvcSetSendPktStats()
|
||
|
|
||
|
#define epvcSendCompleteStats()
|
||
|
#endif
|
||
|
|