/*++ Copyright (c) 1996 Microsoft Corporation Module Name: macros.h Abstract: Macros for the ATMARP module Author: Revision History: Who When What -------- -------- ---- arvindm 05-20-96 created Notes: --*/ #ifndef __ATMARP_MACROS_H_INCLUDED #define __ATMARP_MACROS_H_INCLUDED #include "atmarp.h" #define INCR_STAT(_x) NdisInterlockedIncrement(&(_x)) #ifndef MAX /*++ OPAQUE MAX( IN OPAQUE Fred, IN OPAQUE Shred ) --*/ #define MAX(Fred, Shred) (((Fred) > (Shred)) ? (Fred) : (Shred)) #endif // MAX #ifndef MIN /*++ OPAQUE MIN( IN OPAQUE Fred, IN OPAQUE Shred ) --*/ #define MIN(Fred, Shred) (((Fred) < (Shred)) ? (Fred) : (Shred)) #endif // MIN /*++ ULONG ATMARP_HASH( IN IP_ADDRESS IpAddress ) --*/ #define ATMARP_HASH(IpAddress) \ (((ULONG)(IpAddress)) % ATMARP_TABLE_SIZE) /*++ VOID AA_SET_FLAG( IN ULONG Flags, IN ULONG Mask, IN ULONG Val ) --*/ #define AA_SET_FLAG(Flags, Mask, Val) \ (Flags) = ((Flags) & ~(Mask)) | (Val) /*++ BOOLEAN AA_IS_FLAG_SET( IN ULONG Flags, IN ULONG Mask, IN ULONG Val ) --*/ #define AA_IS_FLAG_SET(Flags, Mask, Val) \ (((Flags) & (Mask)) == (Val)) #ifdef IPMCAST /*++ VOID AAMC_SET_IF_STATE( IN PATMARP_INTERFACE _pIf, IN ULONG _NewState ) Set the Multicast state for the specified Interface to the given value. --*/ #define AAMC_SET_IF_STATE(_pIf, _NewState) \ AA_SET_FLAG((_pIf)->Flags, AAMC_IF_STATE_MASK, (_NewState)) /*++ ULONG AAMC_IF_STATE( IN PATMARP_INTERFACE _pIf ) Get the Multicast state for the specified Interface. --*/ #define AAMC_IF_STATE(_pIf) ((_pIf)->Flags & AAMC_IF_STATE_MASK) #endif // IPMCAST /*++ VOID AA_INIT_BLOCK_STRUCT( IN ATMARP_BLOCK *pBlock ) --*/ #define AA_INIT_BLOCK_STRUCT(pBlock) NdisInitializeEvent(&((pBlock)->Event)) /*++ NDIS_STATUS AA_WAIT_ON_BLOCK_STRUCT( IN ATMARP_BLOCK *pBlock ) --*/ #define AA_WAIT_ON_BLOCK_STRUCT(pBlock) \ (NdisWaitEvent(&((pBlock)->Event), 0), (pBlock)->Status) /*++ VOID AA_SIGNAL_BLOCK_STRUCT( IN ATMARP_BLOCK *pBlock, IN UINT Status ) --*/ #define AA_SIGNAL_BLOCK_STRUCT(pBlock, _Status) \ { (pBlock)->Status = _Status; NdisSetEvent(&((pBlock)->Event)); } /*++ VOID AA_FREE_BLOCK_STRUCT( IN ATMARP_BLOCK *pBlock ) --*/ #define AA_FREE_BLOCK_STRUCT(pBlock) // Nothing to be done here /*++ VOID AA_INIT_LOCK( IN PNDIS_SPIN_LOCK pLock ) --*/ #if DBG_SPIN_LOCK #define AA_INIT_LOCK(pLock) \ AtmArpAllocateSpinLock(pLock, _FILENUMBER, __LINE__) #else #define AA_INIT_LOCK(pLock) \ NdisAllocateSpinLock(pLock) #endif // DBG_SPIN_LOCK /*++ VOID AA_ACQUIRE_LOCK( IN PNDIS_SPIN_LOCK pLock ) --*/ #if DBG_SPIN_LOCK #define AA_ACQUIRE_LOCK(pLock) \ AtmArpAcquireSpinLock(pLock, _FILENUMBER, __LINE__) #else #define AA_ACQUIRE_LOCK(pLock) \ NdisAcquireSpinLock(pLock) #endif // DBG_SPIN_LOCK /*++ VOID AA_ACQUIRE_LOCK_DPC( IN PNDIS_SPIN_LOCK pLock ) --*/ #if DBG_SPIN_LOCK #define AA_ACQUIRE_LOCK_DPC(pLock) \ AtmArpAcquireSpinLock(pLock, _FILENUMBER, __LINE__) #else #define AA_ACQUIRE_LOCK_DPC(pLock) \ NdisDprAcquireSpinLock(pLock) #endif // DBG_SPIN_LOCK /*++ VOID AA_RELEASE_LOCK( IN PNDIS_SPIN_LOCK pLock ) --*/ #if DBG_SPIN_LOCK #define AA_RELEASE_LOCK(pLock) \ AtmArpReleaseSpinLock(pLock, _FILENUMBER, __LINE__) #else #define AA_RELEASE_LOCK(pLock) \ NdisReleaseSpinLock(pLock) #endif // DBG_SPIN_LOCK /*++ VOID AA_RELEASE_LOCK_DPC( IN PNDIS_SPIN_LOCK pLock ) --*/ #if DBG_SPIN_LOCK #define AA_RELEASE_LOCK_DPC(pLock) \ AtmArpReleaseSpinLock(pLock, _FILENUMBER, __LINE__) #else #define AA_RELEASE_LOCK_DPC(pLock) \ NdisDprReleaseSpinLock(pLock) #endif // DBG_SPIN_LOCK /*++ VOID AA_FREE_LOCK( IN PNDIS_SPIN_LOCK pLock ) --*/ #define AA_FREE_LOCK(pLock) \ NdisFreeSpinLock(pLock) /*++ VOID AA_INIT_IF_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_INIT_IF_LOCK(pIf) \ AA_INIT_LOCK(&((pIf)->InterfaceLock)) /*++ VOID AA_ACQUIRE_IF_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_ACQUIRE_IF_LOCK(pIf) \ AA_ACQUIRE_LOCK(&((pIf)->InterfaceLock)) /*++ VOID AA_ACQUIRE_IF_LOCK_DPC( IN PATMARP_INTERFACE pIf ) --*/ #define AA_ACQUIRE_IF_LOCK_DPC(pIf) \ AA_ACQUIRE_LOCK_DPC(&((pIf)->InterfaceLock)) /*++ VOID AA_RELEASE_IF_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_RELEASE_IF_LOCK(pIf) \ AA_RELEASE_LOCK(&((pIf)->InterfaceLock)) /*++ VOID AA_RELEASE_IF_LOCK_DPC( IN PATMARP_INTERFACE pIf ) --*/ #define AA_RELEASE_IF_LOCK_DPC(pIf) \ AA_RELEASE_LOCK_DPC(&((pIf)->InterfaceLock)) /*++ VOID AA_FREE_IF_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_FREE_IF_LOCK(pIf) \ AA_FREE_LOCK(&((pIf)->InterfaceLock)) /*++ VOID AA_INIT_IF_TABLE_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_INIT_IF_TABLE_LOCK(pIf) \ AA_INIT_LOCK(&((pIf)->ArpTableLock)) /*++ VOID AA_ACQUIRE_IF_TABLE_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_ACQUIRE_IF_TABLE_LOCK(pIf) \ AA_ACQUIRE_LOCK(&((pIf)->ArpTableLock)) /*++ VOID AA_ACQUIRE_IF_TABLE_LOCK_DPC( IN PATMARP_INTERFACE pIf ) --*/ #define AA_ACQUIRE_IF_TABLE_LOCK_DPC(pIf) \ AA_ACQUIRE_LOCK_DPC(&((pIf)->ArpTableLock)) /*++ VOID AA_RELEASE_IF_TABLE_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_RELEASE_IF_TABLE_LOCK(pIf) \ AA_RELEASE_LOCK(&((pIf)->ArpTableLock)) /*++ VOID AA_RELEASE_IF_TABLE_LOCK_DPC( IN PATMARP_INTERFACE pIf ) --*/ #define AA_RELEASE_IF_TABLE_LOCK_DPC(pIf) \ AA_RELEASE_LOCK_DPC(&((pIf)->ArpTableLock)) /*++ VOID AA_FREE_IF_TABLE_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_FREE_IF_TABLE_LOCK(pIf) \ AA_FREE_LOCK(&((pIf)->ArpTableLock)) /*++ VOID AA_INIT_IF_ATM_LIST_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_INIT_IF_ATM_LIST_LOCK(pIf) \ AA_INIT_LOCK(&((pIf)->AtmEntryListLock)) /*++ VOID AA_ACQUIRE_IF_ATM_LIST_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_ACQUIRE_IF_ATM_LIST_LOCK(pIf) \ AA_ACQUIRE_LOCK(&((pIf)->AtmEntryListLock)) /*++ VOID AA_ACQUIRE_IF_ATM_LIST_LOCK_DPC( IN PATMARP_INTERFACE pIf ) --*/ #define AA_ACQUIRE_IF_ATM_LIST_LOCK_DPC(pIf) \ AA_ACQUIRE_LOCK_DPC(&((pIf)->AtmEntryListLock)) /*++ VOID AA_RELEASE_IF_ATM_LIST_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_RELEASE_IF_ATM_LIST_LOCK(pIf) \ AA_RELEASE_LOCK(&((pIf)->AtmEntryListLock)) /*++ VOID AA_RELEASE_IF_ATM_LIST_LOCK_DPC( IN PATMARP_INTERFACE pIf ) --*/ #define AA_RELEASE_IF_ATM_LIST_LOCK_DPC(pIf) \ AA_RELEASE_LOCK_DPC(&((pIf)->AtmEntryListLock)) /*++ VOID AA_FREE_IF_ATM_LIST_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_FREE_IF_ATM_LIST_LOCK(pIf) \ AA_FREE_LOCK(&((pIf)->AtmEntryListLock)) /*++ VOID AA_INIT_IF_TIMER_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_INIT_IF_TIMER_LOCK(pIf) \ AA_INIT_LOCK(&((pIf)->TimerLock)) /*++ VOID AA_ACQUIRE_IF_TIMER_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_ACQUIRE_IF_TIMER_LOCK(pIf) \ AA_ACQUIRE_LOCK(&((pIf)->TimerLock)) /*++ VOID AA_ACQUIRE_IF_TIMER_LOCK_DPC( IN PATMARP_INTERFACE pIf ) --*/ #define AA_ACQUIRE_IF_TIMER_LOCK_DPC(pIf) \ AA_ACQUIRE_LOCK_DPC(&((pIf)->TimerLock)) /*++ VOID AA_RELEASE_IF_TIMER_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_RELEASE_IF_TIMER_LOCK(pIf) \ AA_RELEASE_LOCK(&((pIf)->TimerLock)) /*++ VOID AA_RELEASE_IF_TIMER_LOCK_DPC( IN PATMARP_INTERFACE pIf ) --*/ #define AA_RELEASE_IF_TIMER_LOCK_DPC(pIf) \ AA_RELEASE_LOCK_DPC(&((pIf)->TimerLock)) /*++ VOID AA_FREE_IF_TIMER_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_FREE_IF_TIMER_LOCK(pIf) \ AA_FREE_LOCK(&((pIf)->TimerLock)) /*++ VOID AA_INIT_VC_LOCK( IN PATMARP_VC pVc ) --*/ #define AA_INIT_VC_LOCK(pVc) \ AA_INIT_LOCK(&((pVc)->Lock)) /*++ VOID AA_ACQUIRE_VC_LOCK( IN PATMARP_VC pVc ) --*/ #define AA_ACQUIRE_VC_LOCK(pVc) \ AA_ACQUIRE_LOCK(&((pVc)->Lock)) /*++ VOID AA_ACQUIRE_VC_LOCK_DPC( IN PATMARP_VC pVc ) --*/ #define AA_ACQUIRE_VC_LOCK_DPC(pVc) \ AA_ACQUIRE_LOCK_DPC(&((pVc)->Lock)) /*++ VOID AA_RELEASE_VC_LOCK( IN PATMARP_VC pVc ) --*/ #define AA_RELEASE_VC_LOCK(pVc) \ AA_RELEASE_LOCK(&((pVc)->Lock)) /*++ VOID AA_RELEASE_VC_LOCK_DPC( IN PATMARP_VC pVc ) --*/ #define AA_RELEASE_VC_LOCK_DPC(pVc) \ AA_RELEASE_LOCK_DPC(&((pVc)->Lock)) /*++ VOID AA_FREE_VC_LOCK( IN PATMARP_VC pVc ) --*/ #define AA_FREE_VC_LOCK(pVc) \ AA_FREE_LOCK(&((pVc)->Lock)) /*++ VOID AA_INIT_AE_LOCK( IN PATMARP_ATM_ENTRY pAtmEntry ) --*/ #define AA_INIT_AE_LOCK(pAtmEntry) \ AA_INIT_LOCK(&((pAtmEntry)->Lock)) /*++ VOID AA_ACQUIRE_AE_LOCK( IN PATMARP_ATM_ENTRY pAtmEntry ) --*/ #define AA_ACQUIRE_AE_LOCK(pAtmEntry) \ AA_ACQUIRE_LOCK(&((pAtmEntry)->Lock)) /*++ VOID AA_ACQUIRE_AE_LOCK_DPC( IN PATMARP_ATM_ENTRY pAtmEntry ) --*/ #define AA_ACQUIRE_AE_LOCK_DPC(pAtmEntry) \ AA_ACQUIRE_LOCK_DPC(&((pAtmEntry)->Lock)) /*++ VOID AA_RELEASE_AE_LOCK( IN PATMARP_ATM_ENTRY pAtmEntry ) --*/ #define AA_RELEASE_AE_LOCK(pAtmEntry) \ AA_RELEASE_LOCK(&((pAtmEntry)->Lock)) /*++ VOID AA_RELEASE_AE_LOCK_DPC( IN PATMARP_ATM_ENTRY pAtmEntry ) --*/ #define AA_RELEASE_AE_LOCK_DPC(pAtmEntry) \ AA_RELEASE_LOCK_DPC(&((pAtmEntry)->Lock)) /*++ VOID AA_FREE_AE_LOCK( IN PATMARP_ATM_ENTRY pAtmEntry ) --*/ #define AA_FREE_AE_LOCK(pAtmEntry) \ AA_FREE_LOCK(&((pAtmEntry)->Lock)) /*++ VOID AA_INIT_IE_LOCK( IN PATMARP_IP_ENTRY pIpEntry ) --*/ #define AA_INIT_IE_LOCK(pIpEntry) \ AA_INIT_LOCK(&((pIpEntry)->Lock)) /*++ VOID AA_ACQUIRE_IE_LOCK( IN PATMARP_IP_ENTRY pIpEntry ) --*/ #define AA_ACQUIRE_IE_LOCK(pIpEntry) \ AA_ACQUIRE_LOCK(&((pIpEntry)->Lock)) /*++ VOID AA_ACQUIRE_IE_LOCK_DPC( IN PATMARP_IP_ENTRY pIpEntry ) --*/ #define AA_ACQUIRE_IE_LOCK_DPC(pIpEntry) \ AA_ACQUIRE_LOCK_DPC(&((pIpEntry)->Lock)) /*++ VOID AA_RELEASE_IE_LOCK( IN PATMARP_IP_ENTRY pIpEntry ) --*/ #define AA_RELEASE_IE_LOCK(pIpEntry) \ AA_RELEASE_LOCK(&((pIpEntry)->Lock)) /*++ VOID AA_RELEASE_IE_LOCK_DPC( IN PATMARP_IP_ENTRY pIpEntry ) --*/ #define AA_RELEASE_IE_LOCK_DPC(pIpEntry) \ AA_RELEASE_LOCK_DPC(&((pIpEntry)->Lock)) /*++ VOID AA_FREE_IE_LOCK( IN PATMARP_IP_ENTRY pIpEntry ) --*/ #define AA_FREE_IE_LOCK(pIpEntry) \ AA_FREE_LOCK(&((pIpEntry)->Lock)) /*++ VOID AA_INIT_GLOBAL_LOCK( IN PATMARP_GLOBALS pGlob ) --*/ #define AA_INIT_GLOBAL_LOCK(pGlob) \ AA_INIT_LOCK(&((pGlob)->Lock)) /*++ VOID AA_ACQUIRE_GLOBAL_LOCK( IN PATMARP_GLOBALS pGlob ) --*/ #define AA_ACQUIRE_GLOBAL_LOCK(pGlob) \ AA_ACQUIRE_LOCK(&((pGlob)->Lock)) /*++ VOID AA_RELEASE_GLOBAL_LOCK( IN PATMARP_GLOBALS pGlob ) --*/ #define AA_RELEASE_GLOBAL_LOCK(pGlob) \ AA_RELEASE_LOCK(&((pGlob)->Lock)) /*++ VOID AA_FREE_GLOBAL_LOCK( IN PATMARP_GLOBALS pGlob ) --*/ #define AA_FREE_GLOBAL_LOCK(pGlob) \ AA_FREE_LOCK(&((pGlob)->Lock)) #ifdef ATMARP_WMI /*++ VOID AA_INIT_IF_WMI_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_INIT_IF_WMI_LOCK(pIf) \ AA_INIT_LOCK(&((pIf)->WmiLock)) /*++ VOID AA_ACQUIRE_IF_WMI_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_ACQUIRE_IF_WMI_LOCK(pIf) \ AA_ACQUIRE_LOCK(&((pIf)->WmiLock)) /*++ VOID AA_ACQUIRE_IF_WMI_LOCK_DPC( IN PATMARP_INTERFACE pIf ) --*/ #define AA_ACQUIRE_IF_WMI_LOCK_DPC(pIf) \ AA_ACQUIRE_LOCK_DPC(&((pIf)->WmiLock)) /*++ VOID AA_RELEASE_IF_WMI_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_RELEASE_IF_WMI_LOCK(pIf) \ AA_RELEASE_LOCK(&((pIf)->WmiLock)) /*++ VOID AA_RELEASE_IF_WMI_LOCK_DPC( IN PATMARP_INTERFACE pIf ) --*/ #define AA_RELEASE_IF_WMI_LOCK_DPC(pIf) \ AA_RELEASE_LOCK_DPC(&((pIf)->WmiLock)) /*++ VOID AA_FREE_IF_WMI_LOCK( IN PATMARP_INTERFACE pIf ) --*/ #define AA_FREE_IF_WMI_LOCK(pIf) \ AA_FREE_LOCK(&((pIf)->WmiLock)) #endif // ATMARP_WMI /*++ BOOLEAN AA_IS_VC_GOING_DOWN( IN PATMARP_VC pVc ) Is the VC being closed, or marked for closing? --*/ #define AA_IS_VC_GOING_DOWN(_pVc) \ (((_pVc)->Flags & (AA_VC_CLOSE_STATE_CLOSING|AA_VC_CALL_STATE_CLOSE_IN_PROGRESS)) != 0) #if !BINARY_COMPATIBLE #define AA_ALLOC_FROM_POOL(_pVar, _StructType, _Size) \ (_pVar) = (_StructType *)ExAllocatePoolWithTag(NonPagedPool, \ (_Size), \ 'CPRA') #define AA_FREE_TO_POOL(_pMem) ExFreePool((PVOID)(_pMem)) #endif /*++ VOID AA_ALLOC_MEM( IN POPAQUE pVar, IN OPAQUE StructureType, IN ULONG SizeOfStructure ) --*/ #if DBG #define AA_ALLOC_MEM(pVar, StructureType, SizeOfStructure) \ pVar = (StructureType *)AaAuditAllocMem( \ (PVOID)(&(pVar)), \ (ULONG)(SizeOfStructure), \ _FILENUMBER, \ __LINE__ \ ); #else #define AA_ALLOC_MEM(pVar, StructureType, SizeOfStructure) \ NdisAllocateMemoryWithTag((PVOID *)(&pVar), (ULONG)(SizeOfStructure), (ULONG)'CPRA'); #endif // DBG /*++ VOID AA_FREE_MEM( IN POPAQUE pMem ) --*/ #if DBG #define AA_FREE_MEM(pMem) AaAuditFreeMem((PVOID)(pMem)); #else #define AA_FREE_MEM(pMem) NdisFreeMemory((PVOID)(pMem), 0, 0); #endif // DBG /*++ VOID AA_SET_MEM( IN POPAQUE pMem, IN UCHAR bValue, IN ULONG NumberOfBytes ) --*/ #define AA_SET_MEM(pMem, bValue, NumberOfBytes) \ AtmArpSetMemory((PUCHAR)(pMem), (bValue), (NumberOfBytes)); /*++ VOID AA_COPY_MEM( IN POPAQUE pDst, IN POPAQUE pSrc, IN ULONG NumberOfBytes ) --*/ #define AA_COPY_MEM(pDst, pSrc, NumberOfBytes) \ NdisMoveMemory((PVOID)(pDst), (PVOID)(pSrc), NumberOfBytes); /*++ ULONG AA_MEM_CMP( IN PVOID pString1, IN PVOID pString2, IN ULONG Length ) --*/ #define AA_MEM_CMP(pString1, pString2, Length) \ AtmArpMemCmp((PUCHAR)(pString1), (PUCHAR)(pString2), (ULONG)(Length)) /*++ VOID AA_INIT_SYSTEM_TIMER( IN PNDIS_TIMER pTimer, IN PNDIS_TIMER_FUNCTON pFunc, IN PVOID Context ) --*/ #define AA_INIT_SYSTEM_TIMER(pTimer, pFunc, Context) \ NdisInitializeTimer(pTimer, (PNDIS_TIMER_FUNCTION)(pFunc), (PVOID)Context) /*++ VOID AA_START_SYSTEM_TIMER( IN PNDIS_TIMER pTimer, IN UINT PeriodInSeconds ) --*/ #define AA_START_SYSTEM_TIMER(pTimer, PeriodInSeconds) \ NdisSetTimer(pTimer, (UINT)(PeriodInSeconds * 1000)) /*++ VOID AA_STOP_SYSTEM_TIMER( IN PNDIS_TIMER pTimer ) --*/ #define AA_STOP_SYSTEM_TIMER(pTimer) \ { \ BOOLEAN WasCancelled; \ NdisCancelTimer(pTimer, &WasCancelled); \ } /*++ BOOLEAN AA_IS_TIMER_ACTIVE( IN PATMARP_TIMER pArpTimer ) --*/ #define AA_IS_TIMER_ACTIVE(pTmr) ((pTmr)->pTimerList != (PATMARP_TIMER_LIST)NULL) /*++ ULONG AA_GET_TIMER_DURATION( IN PATMARP_TIMER pTimer ) --*/ #define AA_GET_TIMER_DURATION(pTmr) ((pTmr)->Duration) #ifndef NO_TIMER_MACRO /*++ VOID AtmArpRefreshTimer( IN PATMARP_TIMER pTimer ) --*/ #define AtmArpRefreshTimer(_pTmr) \ { \ PATMARP_TIMER_LIST _pTimerList; \ \ if ((_pTimerList = (_pTmr)->pTimerList) != (PATMARP_TIMER_LIST)NULL) \ { \ (_pTmr)->LastRefreshTime = _pTimerList->CurrentTick; \ } \ } #endif // !NO_TIMER_MACRO /*++ ULONG SECONDS_TO_LONG_TICKS( IN ULONG Seconds ) Convert from seconds to "long duration timer ticks" --*/ #define SECONDS_TO_LONG_TICKS(Seconds) ((Seconds)/10) /*++ ULONG SECONDS_TO_SHORT_TICKS( IN ULONG Seconds ) Convert from seconds to "short duration timer ticks" --*/ #define SECONDS_TO_SHORT_TICKS(Seconds) (Seconds) /*++ ULONG CELLS_TO_BYTES( IN ULONG NumberOfCells ) Convert from cell count to byte count --*/ #define CELLS_TO_BYTES(NumberOfCells) ((NumberOfCells) * 48) /*++ ULONG BYTES_TO_CELLS( IN ULONG ByteCount ) Convert from byte count to cell count --*/ #define BYTES_TO_CELLS(ByteCount) ((ByteCount) / 48) /*++ VOID AA_IF_STAT_INCR( IN PATMARP_INTERFACE pInterface, IN OPAQUE StatsCounter ) Increment the specified StatsCounter on an Interface by 1. --*/ #define AA_IF_STAT_INCR(pInterface, StatsCounter) \ NdisInterlockedIncrement(&(pInterface->StatsCounter)) /*++ VOID AA_IF_STAT_ADD_LOCK( IN PATMARP_INTERFACE pInterface, IN OPAQUE StatsCounter, IN ULONG IncrValue ) Increment the specified StatsCounter on an Interface by the specified IncrValue. Take a lock on the interface to do so. --*/ #if DBG_SPIN_LOCK #define AA_IF_STAT_ADD_LOCK(pInterface, StatsCounter, IncrValue) \ NdisInterlockedAddUlong(&(pInterface->StatsCounter), IncrValue, &(pInterface->InterfaceLock.NdisLock)) #else #define AA_IF_STAT_ADD_LOCK(pInterface, StatsCounter, IncrValue) \ NdisInterlockedAddUlong(&(pInterface->StatsCounter), IncrValue, &(pInterface->InterfaceLock)) #endif // DBG_SPIN_LOCK /*++ VOID AA_IF_STAT_ADD( IN PATMARP_INTERFACE pInterface, IN OPAQUE StatsCounter, IN ULONG IncrValue ) Add to the specified StatsCounter on an Interface by the specified IncrValue. Use the more efficient InterlockedEcxhangeAdd instruction. --*/ #if BINARY_COMPATIBLE #define AA_IF_STAT_ADD(pInterface, StatsCounter, IncrValue) \ AA_IF_STAT_ADD_LOCK(pInterface, StatsCounter, IncrValue) #else // !BINARY_COMPATIBLE #define AA_IF_STAT_ADD(pInterface, StatsCounter, IncrValue) \ InterlockedExchangeAdd(&(pInterface->StatsCounter), IncrValue) //((pInterface)->StatsCounter+=(IncrValue)) #endif // !BINARY_COMPATIBLE /*++ BOOLEAN AA_IS_BCAST_IP_ADDRESS( IN IP_ADDRESS Destination, IN PATMARP_INTERFACE pIf ) Check if the given Destination is a broadcast IP address on the given Interface. Currently, we only check if the destination is the same as the (limited) broadcast address for the interface. TBD: extend this when we support addition of broadcast addresses to an interface. --*/ #define AA_IS_BCAST_IP_ADDRESS(Destn, pIf) \ (IP_ADDR_EQUAL((pIf)->BroadcastAddress, Destn)) /*++ BOOLEAN AA_FILTER_SPEC_MATCH( IN PATMARP_INTERFACE pInterface, IN PATMARP_FILTER_SPEC pSrc, IN PATMARP_FILTER_SPEC pDst ) Check if the given filter spec matches a target filter spec, for the specified interface. --*/ #define AA_FILTER_SPEC_MATCH(pIf, pSrc, pDst) \ ( ((pIf)->pFilterMatchFunc == NULL_PAA_FILTER_SPEC_MATCH_FUNC) ? \ TRUE: \ (*((pIf)->pFilterMatchFunc))((PVOID)pIf, pSrc, pDst)) /*++ BOOLEAN AA_FLOW_SPEC_MATCH( IN PATMARP_INTERFACE pInterface, IN PATMARP_FLOW_SPEC pSrc, IN PATMARP_FLOW_SPEC pDst ) Check if the given flow spec matches a target flow spec, for the specified interface. --*/ #define AA_FLOW_SPEC_MATCH(pIf, pSrc, pDst) \ ( ((pIf)->pFlowMatchFunc == NULL_PAA_FLOW_SPEC_MATCH_FUNC) ? \ TRUE: \ (*((pIf)->pFlowMatchFunc))((PVOID)pIf, pSrc, pDst)) /*++ VOID AA_GET_PACKET_SPECS( IN PATMARP_INTERFACE pInterface, IN PNDIS_PACKET pNdisPacket, OUT PATMARP_FLOW_INFO *ppFlowInfo, OUT PATMARP_FLOW_SPEC *ppFlowSpec, OUT PATMARP_FILTER_SPEC *ppFilterSpec ) Get the flow and filter specs for the given packet --*/ #define AA_GET_PACKET_SPECS(pIf, pPkt, ppFlowInfo, ppFlow, ppFilt) \ { \ if ((pIf)->pGetPacketSpecFunc != NULL_PAA_GET_PACKET_SPEC_FUNC) \ { \ (*((pIf)->pGetPacketSpecFunc)) \ ((PVOID)(pIf), pPkt, ppFlowInfo, ppFlow, ppFilt); \ } \ else \ { \ *(ppFlowInfo) = NULL; \ *(ppFlow) = &((pIf)->DefaultFlowSpec); \ *(ppFilt) = &((pIf)->DefaultFilterSpec); \ } \ } \ /*++ VOID AA_GET_CONTROL_PACKET_SPECS( IN PATMARP_INTERFACE pInterface, OUT PATMARP_FLOW_SPEC *ppFlowSpec ) --*/ #define AA_GET_CONTROL_PACKET_SPECS(pIf, ppFlow) \ *(ppFlow) = &((pIf)->DefaultFlowSpec); /*++ BOOLEAN AA_IS_BEST_EFFORT_FLOW( IN PATMARP_FLOW_SPEC pFlowSpec ) --*/ #define AA_IS_BEST_EFFORT_FLOW(pFlowSpec) \ (((pFlowSpec)->SendServiceType == SERVICETYPE_BESTEFFORT) && \ ((pFlowSpec)->SendPeakBandwidth > 0)) /*++ VOID AA_SET_NEXT_PACKET( IN PNDIS_PACKET pNdisPacket, IN PNDIS_PACKET pNextPacket ) --*/ #define AA_SET_NEXT_PACKET(pPkt, pNext) \ *((PNDIS_PACKET *)((pPkt)->MiniportReserved)) = (pNext); /*++ PNDIS_PACKET AA_GET_NEXT_PACKET( IN PNDIS_PACKET pNdisPacket ) --*/ #define AA_GET_NEXT_PACKET(pPkt) \ (*((PNDIS_PACKET *)((pPkt)->MiniportReserved))) /*++ ULONG ROUND_UP( IN ULONG Val ) Round up a value so that it becomes a multiple of 4. --*/ #define ROUND_UP(Val) (((Val) + 3) & ~0x3) /*++ ULONG ROUND_TO_8_BYTES( IN ULONG Val ) Round up a value so that it becomes a multiple of 8. --*/ #define ROUND_TO_8_BYTES(_Val) (((_Val) + 7) & ~7) #ifndef NET_SHORT #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || ((defined(_M_AMD64) || defined(_M_IA64)) && (_MSC_FULL_VER > 13009175)) #define NET_SHORT(_x) _byteswap_ushort((USHORT)(_x)) #else /*++ USHORT NET_SHORT( IN USHORT Val ) --*/ #define NET_SHORT(Val) \ ((((Val) & 0xff) << 8) | (((Val) & 0xff00) >> 8)) #endif #define NET_TO_HOST_SHORT(Val) NET_SHORT(Val) #define HOST_TO_NET_SHORT(Val) NET_SHORT(Val) #endif // NET_SHORT #ifndef NET_LONG #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || ((defined(_M_AMD64) || defined(_M_IA64)) && (_MSC_FULL_VER > 13009175)) #define NET_LONG(_x) _byteswap_ulong((ULONG)(_x)) #else /*++ ULONG NET_LONG( IN ULONG Val ) --*/ #define NET_LONG(Val) \ ((((Val) & 0x000000ff) << 24) | \ (((Val) & 0x0000ff00) << 8) | \ (((Val) & 0x00ff0000) >> 8) | \ (((Val) & 0xff000000) >> 24) ) #endif #define NET_TO_HOST_LONG(Val) NET_LONG(Val) #define HOST_TO_NET_LONG(Val) NET_LONG(Val) #endif // NET_LONG /*++ BOOLEAN AA_IS_TRANSIENT_FAILURE( IN NDIS_STATUS Status ) Return TRUE if the given Status indicates a transient connection failure, otherwise return FALSE. --*/ #define AA_IS_TRANSIENT_FAILURE(_Status) \ ((_Status == NDIS_STATUS_RESOURCES) || \ (_Status == NDIS_STATUS_CELLRATE_NOT_AVAILABLE) || \ (_Status == NDIS_STATUS_INCOMPATABLE_QOS)) /*++ LONG AA_GET_RANDOM( IN LONG min, IN LONG max ) --*/ #define AA_GET_RANDOM(min, max) \ (((LONG)AtmArpRandomNumber() % (LONG)(((max+1) - (min))) + (min))) #define AA_LOG_ERROR() // Nothing /*++ BOOLEAN AA_AE_IS_ALIVE( IN PATMARP_ATM_ENTRY pAtmEntry ) --*/ #define AA_AE_IS_ALIVE(pAtmEntry) \ (!AA_IS_FLAG_SET( \ (pAtmEntry)->Flags, \ AA_ATM_ENTRY_STATE_MASK, \ AA_ATM_ENTRY_IDLE)) /*++ BOOLEAN AA_IE_ALIVE( IN PATMARP_IP_ENTRY pIpEntry ) --*/ #define AA_IE_IS_ALIVE(pIpEntry) \ (!AA_IS_FLAG_SET( \ (pIpEntry)->Flags, \ AA_IP_ENTRY_STATE_MASK, \ AA_IP_ENTRY_IDLE)) #endif // __ATMARP_MACROS_H_INCLUDED