|
|
/*****************************************************************************
* * Copyright (c) 1996-1999 Microsoft Corporation * * @doc * @module debug.h | IrSIR NDIS Miniport Driver * @comm * *----------------------------------------------------------------------------- * * Author: Scott Holden (sholden) * * Date: 10/4/1996 (created) * * Contents: debug output * *****************************************************************************/
#ifndef _DEBUG_H_
#define _DEBUG_H_
#if DBG
#define DEBUG
#define DEBUG_IRSIR
#endif
#ifdef DEBUG
extern int DbgSettings;
#define DEBUGMSG(dbgs,format) (((dbgs) & DbgSettings)? DbgPrint format:0)
#define DBG_PNP (1 << 24)
#define DBG_TIME (1 << 25)
#define DBG_DBG (1 << 26)
#define DBG_OUT (1 << 27)
#define DBG_STAT (1 << 28)
#define DBG_FUNCTION (1 << 29)
#define DBG_FUNC (1 << 29)
#define DBG_WARN (1 << 30)
#define DBG_ERROR (1 << 31)
#define DBG_ERR (1 << 31)
#define DBGDBG(_dbgPrint) \
DbgPrint(_dbgPrint)
#ifdef DEBUG_IRSIR
#define DBG_D(dbgs, i) (((dbgs) & DbgSettings)? DbgPrint("IRSIR:"#i"==%d\n", (i)):0)
#define DBG_X(dbgs, x) (((dbgs) & DbgSettings)? DbgPrint("IRSIR:"#x"==0x%0*X\n", sizeof(x)*2, ((ULONG_PTR)(x))&((1<<(sizeof(x)*8))-1) ):0)
#define DBG_UNISTR(dbgs, s) (((dbgs) & DbgSettings)? DbgPrint("IRSIR:"#s"==%wZ\n", (s) ):0))
#define DBGTIME(_str) \
{ \ LARGE_INTEGER Time; \ \ KeQuerySystemTime(&Time); \ DEBUGMSG(DBG_TIME, (_str " %d:%d\n", \ Time.HighPart, \ Time.LowPart/10000)); \ } #else // DEBUG_IRSIR
#define DBGTIME(_str)
#define DBGFUNC(_dbgPrint)
#define DBGOUT(_dbgPrint)
#define DBGERR(_dbgPrint)
#define DBGWARN(_dbgPrint)
#define DBGSTAT(_dbgPrint)
#define DBGTIME(_dbgPrint)
#define DEBUGMSG(dbgs,format)
#endif // DEBUG_IRSIR
#else // DEBUG
#define DBGTIME(_str)
#define DBGFUNC(_dbgPrint)
#define DBGDBG(_dbgPrint)
#define DBGOUT(_dbgPrint)
#define DBGERR(_dbgPrint)
#define DBGWARN(_dbgPrint)
#define DBGSTAT(_dbgPrint)
#define DEBUGMSG(dbgs,format)
#define DBG_D(dbgs, ivar)
#define DBG_X(dbgs, xvar)
#define DBG_UNISTR(dbgs, svar)
#endif // DEBUG
#ifndef LIST_CHECKING
#define LIST_CHECKING 0
#endif
#ifndef MEM_CHECKING
#define MEM_CHECKING 0
#endif
#ifndef LOGGING
#define LOGGING 0
#endif
#if LOGGING
typedef struct { UHALF_PTR Tag; UHALF_PTR Line; ULONG_PTR Data[3]; } LOG;
#define NUM_LOG 1024
extern ULONG LogIndex; extern LOG Log[NUM_LOG];
#define NextLog() ((NdisInterlockedIncrement(&LogIndex)-1)&(NUM_LOG-1))
#define LOG_ENTRY(tag, d1, d2, d3) \
{ \ ULONG ThisLog = NextLog(); \ Log[ThisLog].Tag = (tag); \ Log[ThisLog].Line = __LINE__; \ Log[ThisLog].Data[0] = (ULONG_PTR)(d1); \ Log[ThisLog].Data[1] = (ULONG_PTR)(d2); \ Log[ThisLog].Data[2] = (ULONG_PTR)(d3); \ } #else
#define LOG_ENTRY(tag, d1, d2, d3)
#endif
#if LIST_CHECKING
PLIST_ENTRY FASTCALL MyInterlockedInsertHeadList(PLIST_ENTRY Head, PLIST_ENTRY Entry, PNDIS_SPIN_LOCK SpinLock); PLIST_ENTRY FASTCALL MyInterlockedInsertTailList(PLIST_ENTRY Head, PLIST_ENTRY Entry, PNDIS_SPIN_LOCK SpinLock); PLIST_ENTRY FASTCALL MyInterlockedRemoveHeadList(PLIST_ENTRY Head, PNDIS_SPIN_LOCK SpinLock); VOID FASTCALL CheckList(PLIST_ENTRY ListHead); #define CheckedRemoveEntryList(Entry) {\
PLIST_ENTRY _EX_Blink;\ PLIST_ENTRY _EX_Flink;\ PLIST_ENTRY _EX_Entry;\ CheckList(Entry);\ _EX_Entry = (Entry);\ _EX_Flink = _EX_Entry->Flink;\ _EX_Blink = _EX_Entry->Blink;\ _EX_Blink->Flink = _EX_Flink;\ _EX_Flink->Blink = _EX_Blink;\ _EX_Entry->Flink = _EX_Entry->Blink = NULL; \ } #ifdef RemoveEntryList
#undef RemoveEntryList
#endif
#define RemoveEntryList CheckedRemoveEntryList
#define CheckedInsertHeadList(ListHead,Entry) {\
PLIST_ENTRY _EX_Flink;\ PLIST_ENTRY _EX_ListHead;\ CheckList(ListHead);\ _EX_ListHead = (ListHead);\ _EX_Flink = _EX_ListHead->Flink;\ (Entry)->Flink = _EX_Flink;\ (Entry)->Blink = _EX_ListHead;\ _EX_Flink->Blink = (Entry);\ _EX_ListHead->Flink = (Entry);\ CheckList(ListHead);\ } #ifdef InsertHeadList
#undef InsertHeadList
#endif
#define InsertHeadList CheckedInsertHeadList
#define CheckedInsertTailList(ListHead,Entry) {\
PLIST_ENTRY _EX_Blink;\ PLIST_ENTRY _EX_ListHead;\ CheckList(ListHead);\ _EX_ListHead = (ListHead);\ _EX_Blink = _EX_ListHead->Blink;\ (Entry)->Flink = _EX_ListHead;\ (Entry)->Blink = _EX_Blink;\ _EX_Blink->Flink = (Entry);\ _EX_ListHead->Blink = (Entry);\ CheckList(ListHead);\ } #ifdef InsertTailList
#undef InsertTailList
#endif
#define InsertTailList CheckedInsertTailList
#define CheckedRemoveHeadList(ListHead) \
(ListHead)->Flink;\ if(!IsListEmpty(ListHead)){ \ RemoveEntryList((ListHead)->Flink);\ CheckList(ListHead);\ } #ifdef RemoveHeadList
#undef RemoveHeadList
#endif
#define RemoveHeadList CheckedRemoveHeadList
#define CheckedRemoveTailList(ListHead) \
(ListHead)->Blink;\ if(!IsListEmpty(ListHead)){ \ RemoveEntryList((ListHead)->Blink);\ CheckList(ListHead);\ } #ifdef RemoveTailList
#undef RemoveTailList
#endif
#define RemoveTailList CheckedRemoveTailList
#else // ! LIST_CHECKING
#define CheckList(h)
#define MyInterlockedInsertHeadList NdisInterlockedInsertHeadList
#define MyInterlockedInsertTailList NdisInterlockedInsertTailList
#define MyInterlockedRemoveHeadList NdisInterlockedRemoveHeadList
#endif
#if MEM_CHECKING
#define MyMemAlloc(size) _MyMemAlloc((size),__FILE__,__LINE__)
PVOID _MyMemAlloc(UINT, PUCHAR, UINT); VOID InitMemory(); VOID DeinitMemory(); #else
PVOID MyMemAlloc(UINT); #endif
#endif // _DEBUG_H_
|