windows-nt/Source/XPSP1/NT/net/qos/psched/sys/debug.h

321 lines
12 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1995-1999 Microsoft Corporation
Module Name:
debug.h
Abstract:
debug defines shared between the KD extensions and the driver
Author:
Charlie Wickham (charlwi) 11-May-1995
Revision History:
--*/
#ifndef _DEBUG_
#define _DEBUG_
//
//
// Debug Level and Mask definitions.
//
#define DBG_DEATH 1
#define DBG_CRITICAL_ERROR 2
#define DBG_FAILURE 4
#define DBG_INFO 6
#define DBG_TRACE 8
#define DBG_VERBOSE 10
#define DBG_INIT 0x00000001
#define DBG_MINIPORT 0x00000002
#define DBG_PROTOCOL 0x00000004
#define DBG_SEND 0x00000008
#define DBG_RECEIVE 0x00000010
#define DBG_IO 0x00000020
#define DBG_MEMORY 0x00000040
#define DBG_CM 0x00000080
#define DBG_REFCNTS 0x00000100
#define DBG_VC 0x00000200
#define DBG_GPC_QOS 0x00000400
#define DBG_WAN 0x00000800
#define DBG_STATE 0x00001000
#define DBG_ROUTINEOIDS 0x00002000
#define DBG_SCHED_TBC 0x00004000
#define DBG_SCHED_SHAPER 0x00008000
#define DBG_SCHED_DRR 0x00010000
#define DBG_WMI 0x00020000
#define DBG_ZAW 0x00040000
#define DBG_ALL 0xFFFFFFFF
//
// these tags are used in Lookaside lists therefore need to be
// available regardless of the type of build
//
extern ULONG NdisRequestTag;
extern ULONG GpcClientVcTag;
extern ULONG WanLinkTag;
extern ULONG PsMiscTag;
extern ULONG WMITag;
#define NDIS_PACKET_POOL_TAG_FOR_PSCHED 'pPDN'
// We mark all memory allocated via PsAllocateXXX with a signature
// immediately following allocation, and with another signature
// immediately preceeding freeing.
#define ALLOCATED_MARK (UCHAR) 0xDD
#define FREED_MARK (UCHAR) 0xBB
//
// NT Debugging routines
//
//
// signatures for data structures
//
extern ULONG AdapterTag;
extern ULONG CmParamsTag;
extern ULONG PipeContextTag;
extern ULONG FlowContextTag;
extern ULONG ClassMapContextTag;
extern ULONG ProfileTag;
extern ULONG ComponentTag;
extern ULONG WanTableTag;
#if DBG
extern CHAR VersionNumber[];
extern CHAR VersionHerald[];
extern CHAR VersionTimestamp[];
#define DEBUGCHK DbgBreakPoint()
#define STATIC
//
// these correspond to DebugLevel and DebugMask in Psched\Parameters
//
extern ULONG DbgTraceLevel;
extern ULONG DbgTraceMask;
extern ULONG LogTraceLevel;
extern ULONG LogTraceMask;
extern ULONG LogId;
extern ULONG DbgTraceControl;
#define PsDbgSched(_DebugLevel, _DebugMask, _r, _s, _t, _u, _v, _w, _x1, _x2, _y, _z){\
if ((LogTraceLevel >= _DebugLevel) && \
((_DebugMask) & LogTraceMask)){ \
DbugSched(_r, _s, _t, _u, _v, _w, (_x1), (_x2), _y, _z);\
}\
}
#define PsDbgRecv(_DebugLevel, _DebugMask, _event, _action, _a, _p1, _p2) {\
if ((LogTraceLevel >= _DebugLevel) && \
((_DebugMask) & LogTraceMask)){ \
DbugRecv(_event, _action, _a, _p1, _p2); \
} \
}
#define PsDbgSend(_DebugLevel, _DebugMask, _event, _action, _a, _v, _p1, _p2) {\
if ((LogTraceLevel >= _DebugLevel) && \
((_DebugMask) & LogTraceMask)){ \
DbugSend(_event, _action, _a, _v, _p1, _p2); \
} \
}
#define PsDbgOid(_DebugLevel, _DebugMask, Action, Local, PTState, MPState, Adapter, Oid, Status) {\
if ((LogTraceLevel >= _DebugLevel) && \
((_DebugMask) & LogTraceMask)){ \
DbugOid(Action, Local, PTState, MPState, Adapter, Oid, Status); \
} \
}
#define PsDbgOut(_DebugLevel, _DebugMask, _Out){ \
if ((DbgTraceLevel >= _DebugLevel) && \
((_DebugMask) & DbgTraceMask)){ \
DbgPrint("PSched: "); \
DbgPrint _Out; \
} \
if ((LogTraceLevel >= _DebugLevel) && \
((_DebugMask) & LogTraceMask)){ \
DbugSchedString _Out; \
} \
}
#define PsDbgOutNoID(_DebugLevel, _DebugMask, _Out) { \
if ((DbgTraceLevel >= _DebugLevel) && \
((_DebugMask) & DbgTraceMask)){ \
DbgPrint _Out; \
} \
if ((LogTraceLevel >= _DebugLevel) && \
((_DebugMask) & LogTraceMask)){ \
DbugSchedString _Out; \
} \
}
#define PS_LOCK(_s) { \
NdisAcquireSpinLock(&((_s)->Lock)); \
PsAssert((_s)->LockAcquired == FALSE); \
(_s)->LockAcquired = TRUE; \
(_s)->LastAcquiredLine = __LINE__; \
strncpy((_s)->LastAcquiredFile, strrchr(__FILE__, '\\')+1, 7); \
}
#define PS_UNLOCK(_s) \
{ \
PsAssert((_s)->LockAcquired == TRUE); \
(_s)->LockAcquired = FALSE; \
(_s)->LastReleasedLine = __LINE__; \
strncpy((_s)->LastReleasedFile, strrchr(__FILE__, '\\')+1, 7); \
NdisReleaseSpinLock(&((_s)->Lock)); \
}
#define PS_LOCK_DPC(_s) { \
PsAssert(KeGetCurrentIrql() == DISPATCH_LEVEL); \
NdisDprAcquireSpinLock(&((_s)->Lock)); \
PsAssert((_s)->LockAcquired == FALSE); \
(_s)->LockAcquired = TRUE; \
(_s)->LastAcquiredLine = __LINE__; \
strncpy((_s)->LastAcquiredFile, strrchr(__FILE__, '\\')+1, 7); \
}
#define PS_UNLOCK_DPC(_s) \
{ \
PsAssert(KeGetCurrentIrql() == DISPATCH_LEVEL); \
PsAssert((_s)->LockAcquired == TRUE); \
(_s)->LockAcquired = FALSE; \
(_s)->LastReleasedLine = __LINE__; \
strncpy((_s)->LastReleasedFile, strrchr(__FILE__, '\\')+1, 7); \
NdisDprReleaseSpinLock(&((_s)->Lock)); \
}
#define PS_INIT_SPIN_LOCK(_s) { \
(_s)->LockAcquired = FALSE; \
(_s)->LastAcquiredLine = __LINE__; \
strncpy((_s)->LastAcquiredFile, strrchr(__FILE__, '\\')+1, 7); \
NdisAllocateSpinLock(&((_s)->Lock)); \
}
#define KdPrint( x ) DbgPrint x
#define STRUCT_LLTAG ULONG LLTag
#define PsStructAssert(_tag) if ((_tag) != NULL && *(PULONG)((PUCHAR)_tag - sizeof(ULONG)) != _tag##Tag) {\
DbgPrint( "PSched: structure assertion failure for type " #_tag " in file " __FILE__ " line %d\n", __LINE__ );\
DEBUGCHK;\
}
#define PsAssert(c) if (!(c)) {\
DbgPrint( "PSched: assertion @ line %d in file " __FILE__ " \n", __LINE__ );\
DEBUGCHK;\
}
//
// allocate memory from nonpaged pool and set the tag in the checked
// version of the structure
//
#define PsAllocatePool( _addr, _size, _tag ) \
{ \
PCHAR _Temp; \
ULONG _Size = (_size) + 2 * sizeof(ULONG); \
_Temp = ExAllocatePoolWithTag( NonPagedPool, (_Size), (_tag)); \
if ( _Temp ) { \
NdisFillMemory( _Temp, _Size, ALLOCATED_MARK); \
*(PULONG)_Temp = _Size; \
*(PULONG)(_Temp + sizeof(ULONG)) = _tag; \
(PCHAR)(_addr) = _Temp + 2 * sizeof(ULONG); \
} \
else{ \
(PCHAR)(_addr) = _Temp; \
} \
}
#define PsFreePool(_addr) \
{ \
PCHAR _Temp = (PCHAR)(_addr) - 2 * sizeof(ULONG); \
ULONG _Size = *(PULONG)_Temp; \
NdisFillMemory( _Temp, _Size, FREED_MARK); \
ExFreePool(_Temp); \
}
//
// structures allocated from lookaside lists don't go through PsAllocateXXX.
// so - if we wanna tag these, we'll have to macro the LL routines.
//
#define PsAllocFromLL(_ptr, _list, _tag) \
*_ptr = NdisAllocateFromNPagedLookasideList(_list); \
if(*_ptr != 0) {\
*_ptr->LLTag = _tag##Tag; \
}
#define PsFreeToLL(_ptr, _list, _tag) \
PsAssert(_ptr->LLTag == _tag##Tag); \
_ptr->LLTag = (ULONG)0; \
NdisFreeToNPagedLookasideList(_list, _ptr); \
#define CheckLLTag(_ptr, _tag) \
PsAssert(_ptr->LLTag == _tag##Tag);
#define SetLLTag(_ptr, _tag) (_ptr)->LLTag = _tag##Tag;
#else // DBG
#define DEBUGCHK
#define PsDbgSched(_DebugLevel, _DebugMask, _r, _s, _t, _u, _v, _w, _x1, _x2, _y, _z)
#define PsDbgRecv(_DebugLevel, _DebugMask, _event, _action, _a, _p1, _p2)
#define PsDbgSend(_DebugLevel, _DebugMask, _event, _action, _a, _v, _p1, _p2)
#define PsDbgOut(s,t,u)
#define PsDbgOid(p,q,s,t,u,v,w,x,y)
#define PsDbgOutNoID(s,t,u)
#define PsDbg(r, s, t, u)
#define KdPrint( x )
#define STRUCT_LLTAG /##/
#define PsStructAssert( t )
#define PsAssert(c)
#define PS_LOCK(_s) NdisAcquireSpinLock(&((_s)->Lock))
#define PS_UNLOCK(_s) NdisReleaseSpinLock(&((_s)->Lock))
#define PS_LOCK_DPC(_s) NdisDprAcquireSpinLock(&((_s)->Lock))
#define PS_UNLOCK_DPC(_s) NdisDprReleaseSpinLock(&((_s)->Lock))
#define PS_INIT_SPIN_LOCK(_s) NdisAllocateSpinLock(&((_s)->Lock))
#define PsAllocatePool( _addr, _size, _tag ) \
_addr = ExAllocatePoolWithTag( NonPagedPool, (_size), (_tag)); \
if ( _addr ) { \
NdisZeroMemory( _addr, _size ); \
}
#define PsFreePool(_addr) ExFreePool(_addr)
//
// structures allocated from lookaside lists don't go through PsAllocateXXX.
// so - if we wanna tag these, we'll have to macro the LL routines.
//
#define PsAllocFromLL(_ptr, _list, _tag) \
*_ptr = (PVOID)NdisAllocateFromNPagedLookasideList(_list); \
#define PsFreeToLL(_ptr, _list, _tag) \
NdisFreeToNPagedLookasideList(_list, _ptr);
#define CheckLLTag(_ptr, _tag)
#define SetLLTag(_ptr, _tag)
#define STATIC static
#endif // DBG
#endif /* _DEBUG_ */
/* end debug.h */