/*++ Copyright (c) 1990 Microsoft Corporation Module Name: debug.h Abstract: It contains the various debug definitions and macros used in displaying debugging information on the kernel debugger. Author: Environment: Kernel Mode Operating Systems : NT Revision History: --*/ #if DBG typedef struct _DEBUG_STATS { ULONG TotalInterrupts; ULONG TxCompIntCount; ULONG TxAvailIntCount; ULONG TxCompleted; ULONG RxCompIntCount; ULONG RxEarlyIntCount; ULONG PacketIndicated; ULONG IndicationCompleted; ULONG TransferDataCount; ULONG IndicateWithDataReady; ULONG BadReceives; ULONG SecondEarlyReceive; ULONG BroadcastsRejected; } DEBUG_STATS, *PDEBUG_STATUS; typedef struct _LOG_ENTRY { UCHAR Letter1; UCHAR Letter2; USHORT Data; } LOG_ENTRY, *PLOG_ENTRY; #define ELNK3_MAX_LOG_SIZE 128 extern ULONG Elnk3LogArray[]; extern ULONG ElnkLogPointer; #define IF_ELNK3DEBUG(f) if (Elnk3DebugFlag & (f)) extern ULONG Elnk3DebugFlag; #define ELNK3_DEBUG_LOUD 0x00000001 // debugging info #define ELNK3_DEBUG_VERY_LOUD 0x00000002 // excessive debugging info #define ELNK3_DEBUG_IO 0x00000004 // debug I/O port access #define ELNK3_DEBUG_INIT 0x00000100 // init debugging info #define ELNK3_DEBUG_SEND 0x00000200 // init debugging info #define ELNK3_DEBUG_RCV 0x00000400 #define ELNK3_DEBUG_REQ 0x00000800 #define ELNK3_DEBUG_LOG 0x00001000 #define ELNK3_DEBUG_INIT_BREAK 0x80000000 // break at DriverEntry #define ELNK3_DEBUG_INIT_FAIL 0x40000000 // fail driver load // // Macro for deciding whether to dump lots of debugging information. // #define IF_LOUD(A) IF_ELNK3DEBUG( ELNK3_DEBUG_LOUD ) { A } #define IF_VERY_LOUD(A) IF_ELNK3DEBUG( ELNK3_DEBUG_VERY_LOUD ) { A } #define IF_IO_LOUD(A) IF_ELNK3DEBUG( ELNK3_DEBUG_IO ) { A } #define IF_INIT_LOUD(A) IF_ELNK3DEBUG( ELNK3_DEBUG_INIT ) { A } #define IF_SEND_LOUD(A) IF_ELNK3DEBUG( ELNK3_DEBUG_SEND ) { A } #define IF_RCV_LOUD(A) IF_ELNK3DEBUG( ELNK3_DEBUG_RCV ) { A } #define IF_REQ_LOUD(A) IF_ELNK3DEBUG( ELNK3_DEBUG_REQ ) { A } #define IF_LOG(c1,c2,data) { \ if (Elnk3DebugFlag & ELNK3_DEBUG_LOG) { \ Elnk3LogArray[ElnkLogPointer]=((ULONG)(data)<<16) | ((c1)<<8) | (c2); \ ElnkLogPointer=(ElnkLogPointer+1)% ELNK3_MAX_LOG_SIZE; \ Elnk3LogArray[ElnkLogPointer]=0; \ } \ } #if 0 #define IF_LOG(c1,c2,data) { \ \ if (Elnk3DebugFlag & ELNK3_DEBUG_LOG) { \ Elnk3LogArray[ElnkLogPointer].Letter1=(c2); \ Elnk3LogArray[ElnkLogPointer].Letter2=(c1); \ Elnk3LogArray[ElnkLogPointer].Data =(USHORT)(data); \ ElnkLogPointer=(ElnkLogPointer+1)% ELNK3_MAX_LOG_SIZE; \ \ Elnk3LogArray[ElnkLogPointer].Letter1=0; \ Elnk3LogArray[ElnkLogPointer].Letter2=0; \ Elnk3LogArray[ElnkLogPointer].Data =0; \ } \ } #endif #define DEBUG_STAT(x) ((x)++) #else #define IF_LOUD(A) #define IF_VERY_LOUD(A) #define IF_IO_LOUD(A) #define IF_INIT_LOUD(A) #define IF_SEND_LOUD(A) #define IF_RCV_LOUD(A) #define IF_REQ_LOUD(A) #define DEBUG_STAT(x) #define IF_LOG(c1,c2,data) #endif