|
|
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
D:\nt\private\ntos\tdi\rawwan\core\macros.h
Abstract:
Macros for the NullTrans module. Adapted from ATMARP Client.
Revision History:
Who When What -------- -------- ---- arvindm 05-07-97 created
Notes:
--*/ #ifndef __RWAN_MACROS_H_INCLUDED
#define __RWAN_MACROS_H_INCLUDED
#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
/*++
VOID RWAN_SET_FLAG( IN ULONG Flags, IN ULONG Mask, IN ULONG Val ) --*/ #define RWAN_SET_FLAG(Flags, Mask, Val) \
(Flags) = ((Flags) & ~(Mask)) | (Val)
/*++
BOOLEAN RWAN_IS_FLAG_SET( IN ULONG Flags, IN ULONG Mask, IN ULONG Val ) --*/ #define RWAN_IS_FLAG_SET(Flags, Mask, Val) \
(((Flags) & (Mask)) == (Val))
#define RWAN_SET_BIT(_Flags, _Bit) \
(_Flags) = (_Flags) | (_Bit);
#define RWAN_RESET_BIT(_Flags, _Bit) \
(_Flags) &= ~(_Bit);
#define RWAN_IS_BIT_SET(_Flags, _Bit) \
(((_Flags) & (_Bit)) != 0)
/*++
VOID RWAN_INIT_EVENT_STRUCT( IN RWAN_EVENT *pEvent ) --*/ #define RWAN_INIT_EVENT_STRUCT(pEvent) NdisInitializeEvent(&((pEvent)->Event))
/*++
NDIS_STATUS RWAN_WAIT_ON_EVENT_STRUCT( IN RWAN_EVENT *pEvent ) --*/ #define RWAN_WAIT_ON_EVENT_STRUCT(pEvent) \
(NdisWaitEvent(&((pEvent)->Event), 0), (pEvent)->Status)
/*++
VOID RWAN_SIGNAL_EVENT_STRUCT( IN RWAN_EVENT *pEvent, IN UINT Status ) --*/ #define RWAN_SIGNAL_EVENT_STRUCT(pEvent, _Status) \
{ (pEvent)->Status = _Status; NdisSetEvent(&((pEvent)->Event)); }
/*++
VOID RWAN_FREE_EVENT_STRUCT( IN RWAN_EVENT *pEvent ) --*/ #define RWAN_FREE_EVENT_STRUCT(pEvent) // Nothing to be done here
/*++
VOID RWAN_INIT_LOCK( IN PNDIS_SPIN_LOCK pLock ) --*/ #if DBG_SPIN_LOCK
#define RWAN_INIT_LOCK(pLock) \
RWanAllocateSpinLock(pLock, _FILENUMBER, __LINE__) #else
#define RWAN_INIT_LOCK(pLock) \
NdisAllocateSpinLock(pLock) #endif // DBG_SPIN_LOCK
/*++
VOID RWAN_ACQUIRE_LOCK( IN PNDIS_SPIN_LOCK pLock ) --*/ #if DBG_SPIN_LOCK
#define RWAN_ACQUIRE_LOCK(pLock) \
RWanAcquireSpinLock(pLock, _FILENUMBER, __LINE__) #else
#define RWAN_ACQUIRE_LOCK(pLock) \
NdisAcquireSpinLock(pLock) #endif // DBG_SPIN_LOCK
/*++
VOID RWAN_ACQUIRE_LOCK_DPC( IN PNDIS_SPIN_LOCK pLock ) --*/ #if DBG_SPIN_LOCK
#define RWAN_ACQUIRE_LOCK_DPC(pLock) \
RWanAcquireSpinLock(pLock, _FILENUMBER, __LINE__) #else
#define RWAN_ACQUIRE_LOCK_DPC(pLock) \
NdisDprAcquireSpinLock(pLock) #endif // DBG_SPIN_LOCK
/*++
VOID RWAN_RELEASE_LOCK( IN PNDIS_SPIN_LOCK pLock ) --*/ #if DBG_SPIN_LOCK
#define RWAN_RELEASE_LOCK(pLock) \
RWanReleaseSpinLock(pLock, _FILENUMBER, __LINE__) #else
#define RWAN_RELEASE_LOCK(pLock) \
NdisReleaseSpinLock(pLock) #endif // DBG_SPIN_LOCK
/*++
VOID RWAN_RELEASE_LOCK_DPC( IN PNDIS_SPIN_LOCK pLock ) --*/ #if DBG_SPIN_LOCK
#define RWAN_RELEASE_LOCK_DPC(pLock) \
RWanReleaseSpinLock(pLock, _FILENUMBER, __LINE__) #else
#define RWAN_RELEASE_LOCK_DPC(pLock) \
NdisDprReleaseSpinLock(pLock) #endif // DBG_SPIN_LOCK
/*++
VOID RWAN_FREE_LOCK( IN PNDIS_SPIN_LOCK pLock ) --*/ #define RWAN_FREE_LOCK(pLock) \
NdisFreeSpinLock(pLock)
//
// Macros for operating the Global lock:
//
#define RWAN_INIT_GLOBAL_LOCK() \
RWAN_INIT_LOCK(&((pRWanGlobal)->GlobalLock))
#define RWAN_ACQUIRE_GLOBAL_LOCK() \
RWAN_ACQUIRE_LOCK(&((pRWanGlobal)->GlobalLock))
#define RWAN_RELEASE_GLOBAL_LOCK() \
RWAN_RELEASE_LOCK(&((pRWanGlobal)->GlobalLock))
#define RWAN_FREE_GLOBAL_LOCK() \
RWAN_FREE_LOCK(&((pRWanGlobal)->GlobalLock))
//
// Macros for operating the Address List lock:
//
#define RWAN_INIT_ADDRESS_LIST_LOCK() \
RWAN_INIT_LOCK(&((pRWanGlobal)->AddressListLock))
#define RWAN_ACQUIRE_ADDRESS_LIST_LOCK() \
RWAN_ACQUIRE_LOCK(&((pRWanGlobal)->AddressListLock))
#define RWAN_RELEASE_ADDRESS_LIST_LOCK() \
RWAN_RELEASE_LOCK(&((pRWanGlobal)->AddressListLock))
#define RWAN_FREE_ADDRESS_LIST_LOCK() \
RWAN_FREE_LOCK(&((pRWanGlobal)->AddressListLock))
//
// Macros for operating the Connection Table lock:
//
#define RWAN_INIT_CONN_TABLE_LOCK() \
RWAN_INIT_LOCK(&((pRWanGlobal)->ConnTableLock))
#define RWAN_ACQUIRE_CONN_TABLE_LOCK() \
RWAN_ACQUIRE_LOCK(&((pRWanGlobal)->ConnTableLock))
#define RWAN_RELEASE_CONN_TABLE_LOCK() \
RWAN_RELEASE_LOCK(&((pRWanGlobal)->ConnTableLock))
#define RWAN_FREE_CONN_TABLE_LOCK() \
RWAN_FREE_LOCK(&((pRWanGlobal)->ConnTableLock))
//
// Macros for operating Connection object locks:
//
#define RWAN_INIT_CONN_LOCK(pConnObj) \
RWAN_INIT_LOCK(&(pConnObj)->Lock)
#define RWAN_ACQUIRE_CONN_LOCK(pConnObj) \
RWAN_ACQUIRE_LOCK(&(pConnObj)->Lock)
#define RWAN_ACQUIRE_CONN_LOCK_DPC(pConnObj) \
RWAN_ACQUIRE_LOCK_DPC(&(pConnObj)->Lock)
#define RWAN_RELEASE_CONN_LOCK(pConnObj) \
RWAN_RELEASE_LOCK(&(pConnObj)->Lock)
#define RWAN_RELEASE_CONN_LOCK_DPC(pConnObj) \
RWAN_RELEASE_LOCK_DPC(&(pConnObj)->Lock)
#define RWAN_FREE_CONN_LOCK(pConnObj) \
RWAN_FREE_CONN_LOCK(&(pConnObj)->Lock)
//
// Macros for operating Address object locks:
//
#define RWAN_INIT_ADDRESS_LOCK(pAddrObj) \
RWAN_INIT_LOCK(&(pAddrObj)->Lock)
#define RWAN_ACQUIRE_ADDRESS_LOCK(pAddrObj) \
RWAN_ACQUIRE_LOCK(&(pAddrObj)->Lock)
#define RWAN_ACQUIRE_ADDRESS_LOCK_DPC(pAddrObj) \
RWAN_ACQUIRE_LOCK_DPC(&(pAddrObj)->Lock)
#define RWAN_RELEASE_ADDRESS_LOCK(pAddrObj) \
RWAN_RELEASE_LOCK(&(pAddrObj)->Lock)
#define RWAN_RELEASE_ADDRESS_LOCK_DPC(pAddrObj) \
RWAN_RELEASE_LOCK_DPC(&(pAddrObj)->Lock)
#define RWAN_FREE_ADDRESS_LOCK(pAddrObj) \
RWAN_FREE_ADDRESS_LOCK(&(pAddrObj)->Lock)
//
// Macros for operating AF locks:
//
#define RWAN_INIT_AF_LOCK(pAfBlk) \
RWAN_INIT_LOCK(&(pAfBlk)->Lock)
#define RWAN_ACQUIRE_AF_LOCK(pAfBlk) \
RWAN_ACQUIRE_LOCK(&(pAfBlk)->Lock)
#define RWAN_ACQUIRE_AF_LOCK_DPC(pAfBlk) \
RWAN_ACQUIRE_LOCK_DPC(&(pAfBlk)->Lock)
#define RWAN_RELEASE_AF_LOCK(pAfBlk) \
RWAN_RELEASE_LOCK(&(pAfBlk)->Lock)
#define RWAN_RELEASE_AF_LOCK_DPC(pAfBlk) \
RWAN_RELEASE_LOCK_DPC(&(pAfBlk)->Lock)
#define RWAN_FREE_AF_LOCK(pAfBlk) \
RWAN_FREE_AF_LOCK(&(pAfBlk)->Lock)
//
// Macros for operating Adapter locks:
//
#define RWAN_INIT_ADAPTER_LOCK(pAdptr) \
RWAN_INIT_LOCK(&(pAdptr)->Lock)
#define RWAN_ACQUIRE_ADAPTER_LOCK(pAdptr) \
RWAN_ACQUIRE_LOCK(&(pAdptr)->Lock)
#define RWAN_ACQUIRE_ADAPTER_LOCK_DPC(pAdptr) \
RWAN_ACQUIRE_LOCK_DPC(&(pAdptr)->Lock)
#define RWAN_RELEASE_ADAPTER_LOCK(pAdptr) \
RWAN_RELEASE_LOCK(&(pAdptr)->Lock)
#define RWAN_RELEASE_ADAPTER_LOCK_DPC(pAdptr) \
RWAN_RELEASE_LOCK_DPC(&(pAdptr)->Lock)
#define RWAN_FREE_ADAPTER_LOCK(pAdptr) \
RWAN_FREE_ADAPTER_LOCK(&(pAdptr)->Lock)
/*++
VOID RWAN_ALLOC_MEM( IN POPAQUE pVar, IN OPAQUE StructureType, IN ULONG SizeOfStructure ) --*/ #if DBG
#define RWAN_ALLOC_MEM(pVar, StructureType, SizeOfStructure) \
pVar = (StructureType *)RWanAuditAllocMem( \ (PVOID)(&(pVar)), \ (ULONG)(SizeOfStructure), \ _FILENUMBER, \ __LINE__ \ ); #else
#define RWAN_ALLOC_MEM(pVar, StructureType, SizeOfStructure) \
NdisAllocateMemoryWithTag((PVOID *)(&pVar), (ULONG)(SizeOfStructure), (ULONG)'naWR'); #endif // DBG
/*++
VOID RWAN_FREE_MEM( IN POPAQUE pMem ) --*/ #if DBG
#define RWAN_FREE_MEM(pMem) RWanAuditFreeMem((PVOID)(pMem));
#else
#define RWAN_FREE_MEM(pMem) NdisFreeMemory((PVOID)(pMem), 0, 0);
#endif // DBG
/*++
VOID RWAN_SET_MEM( IN POPAQUE pMem, IN UCHAR bValue, IN ULONG NumberOfBytes ) --*/ #define RWAN_SET_MEM(pMem, bValue, NumberOfBytes) \
RtlFillMemory((PVOID)(pMem), (ULONG)(NumberOfBytes), (UCHAR)(bValue));
/*++
VOID RWAN_ZERO_MEM( IN POPAQUE pMem, IN ULONG NumberOfBytes ) --*/ #define RWAN_ZERO_MEM(pMem, NumberOfBytes) \
RtlZeroMemory((PVOID)pMem, (ULONG)(NumberOfBytes));
/*++
VOID RWAN_COPY_MEM( IN POPAQUE pDst, IN POPAQUE pSrc, IN ULONG NumberOfBytes ) --*/ #define RWAN_COPY_MEM(pDst, pSrc, NumberOfBytes) \
NdisMoveMemory((PVOID)(pDst), (PVOID)(pSrc), NumberOfBytes);
/*++
BOOLEAN RWAN_EQUAL_MEM( IN POPAQUE pMem1, IN POPAQUE pMem2, IN ULONG Length ) --*/ #define RWAN_EQUAL_MEM(_pMem1, _pMem2, _Length) \
(RtlCompareMemory((PVOID)(_pMem1), (PVOID)(_pMem2), (ULONG)(_Length)) == (_Length))
/*++
VOID RWAN_SET_NEXT_PACKET( IN PNDIS_PACKET pNdisPacket, IN PNDIS_PACKET pNextPacket ) --*/ #define RWAN_SET_NEXT_PACKET(pPkt, pNext) \
*((PNDIS_PACKET *)((pPkt)->MiniportReserved)) = (pNext);
/*++
PNDIS_PACKET RWAN_GET_NEXT_PACKET( IN PNDIS_PACKET pNdisPacket ) --*/ #define RWAN_GET_NEXT_PACKET(pPkt) \
(*((PNDIS_PACKET *)((pPkt)->MiniportReserved)))
//
// Doubly linked list manipulation definitions and macros.
//
#define RWAN_INIT_LIST(_pListHead) \
InitializeListHead(_pListHead)
#define RWAN_IS_LIST_EMPTY(_pListHead) \
IsListEmpty(_pListHead)
#define RWAN_INSERT_HEAD_LIST(_pListHead, _pEntry) \
InsertHeadList((_pListHead), (_pEntry))
#define RWAN_INSERT_TAIL_LIST(_pListHead, _pEntry) \
InsertTailList((_pListHead), (_pEntry))
#define RWAN_DELETE_FROM_LIST(_pEntry) \
RemoveEntryList(_pEntry)
/*++
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)
/*++
VOID RWAN_ADVANCE_RCV_REQ_BUFFER( IN PRWAN_RECEIVE_REQUEST pRcvReq ) --*/ #define RWAN_ADVANCE_RCV_REQ_BUFFER(_pRcvReq) \
{ \ PNDIS_BUFFER _pNextBuffer; \ NdisGetNextBuffer((_pRcvReq)->pBuffer, &(_pNextBuffer)); \ (_pRcvReq)->pBuffer = _pNextBuffer; \ if (_pNextBuffer != NULL) \ { \ NdisQueryBuffer( \ (_pNextBuffer), \ &(_pRcvReq)->pWriteData, \ &(_pRcvReq)->BytesLeftInBuffer \ ); \ \ if (((_pRcvReq)->BytesLeftInBuffer > (_pRcvReq)->AvailableBufferLength)) \ { \ (_pRcvReq)->BytesLeftInBuffer = (_pRcvReq)->AvailableBufferLength; \ } \ } \ else \ { \ (_pRcvReq)->BytesLeftInBuffer = 0; \ (_pRcvReq)->pWriteData = NULL; \ } \ }
/*++
VOID RWAN_ADVANCE_RCV_IND_BUFFER( IN PRWAN_RECEIVE_INDICATION pRcvInd ) --*/ #define RWAN_ADVANCE_RCV_IND_BUFFER(_pRcvInd) \
{ \ PNDIS_BUFFER _pNextBuffer; \ NdisGetNextBuffer((_pRcvInd)->pBuffer, &(_pNextBuffer)); \ (_pRcvInd)->pBuffer = _pNextBuffer; \ if (_pNextBuffer != NULL) \ { \ NdisQueryBuffer( \ (_pNextBuffer), \ &(_pRcvInd)->pReadData, \ &(_pRcvInd)->BytesLeftInBuffer \ ); \ } \ else \ { \ (_pRcvInd)->BytesLeftInBuffer = 0; \ (_pRcvInd)->pReadData = NULL; \ } \ }
/*++
VOID RWAN_SET_DELETE_NOTIFY( IN PRWAN_DELETE_NOTIFY pNotifyObject, IN PCOMPLETE_RTN pDeleteRtn, IN PVOID DeleteContext ) --*/ #define RWAN_SET_DELETE_NOTIFY(_pNotifyObj, _pDeleteRtn, _DeleteContext) \
{ \ (_pNotifyObj)->pDeleteRtn = (_pDeleteRtn); \ (_pNotifyObj)->DeleteContext = (_DeleteContext); \ }
/*++
PRWAN_SEND_REQUEST RWAN_SEND_REQUEST_FROM_PACKET( IN PNDIS_PACKET pNdisPacket ) --*/ #define RWAN_SEND_REQUEST_FROM_PACKET(_pNdisPacket) \
(PRWAN_SEND_REQUEST)((_pNdisPacket)->ProtocolReserved)
#if DBG
#define RWAN_LINK_CONNECTION_TO_VC(_pConn, _pVc) \
{ \ (_pConn)->NdisConnection.pNdisVc = _pVc; \ (_pConn)->pNdisVcSave = _pVc; \ (_pVc)->pConnObject = (_pConn); \ } #else
#define RWAN_LINK_CONNECTION_TO_VC(_pConn, _pVc) \
{ \ (_pConn)->NdisConnection.pNdisVc = _pVc; \ (_pConn)->pNdisVcSave = _pVc; \ (_pVc)->pConnObject = (_pConn); \ } #endif // DBG
#define RWAN_UNLINK_CONNECTION_AND_VC(_pConn, _pVc) \
{ \ (_pConn)->NdisConnection.pNdisVc = NULL_PRWAN_NDIS_VC;\ (_pVc)->pConnObject = NULL_PRWAN_TDI_CONNECTION; \ }
/*++
VOID RWAN_SET_VC_CALL_PARAMS( IN PRWAN_NDIS_VC pVc, IN PCO_CALL_PARAMETERS pCallParameters ) --*/ #define RWAN_SET_VC_CALL_PARAMS(_pVc, _pCallParameters) \
{ \ if ((_pCallParameters != NULL) && \ (_pCallParameters->CallMgrParameters != NULL)) \ { \ _pVc->MaxSendSize = _pCallParameters->CallMgrParameters->Transmit.MaxSduSize; \ } \ if (gHackSendSize) \ { \ _pVc->MaxSendSize = gHackSendSize; \ } \ /* DbgPrint("RWan: set vc %x: maxsendsize to %d\n", _pVc, _pVc->MaxSendSize); */ \ }
#define RWAN_SET_VC_EVENT(_pVc, _Flags) ((_pVc)->Flags) |= (_Flags);
#if STATS
#define INCR_STAT(_pSt) InterlockedIncrement(_pSt);
#define ADD_STAT(_pSt, Incr) *(_pSt) += Incr;
#endif // STATS
#endif // __RWAN_MACROS_H_INCLUDED
|