windows-nt/Source/XPSP1/NT/net/homenet/bridge/sys/brdgdbg.h
2020-09-26 16:20:57 +08:00

125 lines
3.3 KiB
C

/*++
Copyright(c) 1999-2000 Microsoft Corporation
Module Name:
brdgdbg.h
Abstract:
Ethernet MAC level bridge.
Debugging header
Author:
Mark Aiken
Environment:
Kernel mode driver
Revision History:
December 2000 - Original version
--*/
// Alias for KeGetCurrentIrql()
#define CURRENT_IRQL (KeGetCurrentIrql())
// Module identifiers for debug spew control
#define MODULE_ALWAYS_PRINT 0x0000000
#define MODULE_GENERAL 0x0000001
#define MODULE_FWD 0x0000002
#define MODULE_PROT 0x0000004
#define MODULE_MINI 0x0000008
#define MODULE_BUF 0x0000010
#define MODULE_STA 0x0000020
#define MODULE_COMPAT 0x0000040
#define MODULE_CTL 0x0000080
#define MODULE_TDI 0x0000100
#define MODULE_GPO 0x0000200
// Spew control flags
extern ULONG gSpewFlags;
#if DBG
// Interval for debug messages that risk flooding the debugger console (i.e.,
// per-packet status messages)
#define DBG_PRINT_INTERVAL 1000
extern ULONG gLastThrottledPrint;
extern BOOLEAN gSoftAssert;
extern LARGE_INTEGER gTime;
extern const LARGE_INTEGER gCorrection;
extern TIME_FIELDS gTimeFields;
// HACKHACK: Calling RtlSystemTimeToLocalTime or ExSystemTimeToLocalTime appears to be
// forbidden for WDM drivers, so just subtract a constant amount from the system time
// to recover Pacific Time.
_inline VOID
BrdgDbgPrintDateTime()
{
KeQuerySystemTime( &gTime );
gTime.QuadPart -= gCorrection.QuadPart;
RtlTimeToTimeFields( &gTime, &gTimeFields );
DbgPrint( "%02i/%02i/%04i %02i:%02i:%02i : ", gTimeFields.Month, gTimeFields.Day,
gTimeFields.Year, gTimeFields.Hour, gTimeFields.Minute,
gTimeFields.Second );
}
#define DBGPRINT( Module, Args ) \
{ \
if( (MODULE_ ## Module == MODULE_ALWAYS_PRINT) || (gSpewFlags & MODULE_ ## Module) ) \
{ \
DbgPrint( "## BRIDGE[" #Module "] " ); \
BrdgDbgPrintDateTime(); \
DbgPrint Args; \
} \
}
#define SAFEASSERT( test ) \
if( ! (test) ) \
{ \
if( gSoftAssert ) \
{ \
DBGPRINT(ALWAYS_PRINT, ("ASSERT FAILED: " #test " at " __FILE__ " line %i -- Continuing anyway!\n", __LINE__)); \
} \
else \
{ \
ASSERT( test ); \
} \
}
_inline BOOLEAN
BrdgCanThrottledPrint()
{
ULONG NowTime;
NdisGetSystemUpTime( &NowTime );
if( NowTime - gLastThrottledPrint > DBG_PRINT_INTERVAL )
{
// It's been longer than the interval
gLastThrottledPrint = NowTime;
return TRUE;
}
else
{
// It has not been longer than the interval
return FALSE;
}
}
#define THROTTLED_DBGPRINT( Module, Args ) if(BrdgCanThrottledPrint()) { DBGPRINT(Module, Args); }
#else
#define DBGPRINT( Module, Args )
#define THROTTLED_DBGPRINT( Module, Args )
#define SAFEASSERT( test )
#endif