|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
debug.h
Abstract:
Debug macros for NDISUIO
Revision History:
arvindm 04/11/2000 created based on rawwan.
Notes:
--*/
#ifndef _NUIODEBUG__H
#define _NUIODEBUG__H
//
// Message verbosity: lower values indicate higher urgency
//
#define DL_EXTRA_LOUD 20
#define DL_VERY_LOUD 10
#define DL_LOUD 8
#define DL_INFO 6
#define DL_WARN 4
#define DL_ERROR 2
#define DL_FATAL 0
#if DBG_SPIN_LOCK
typedef struct _NUIO_LOCK { ULONG Signature; ULONG IsAcquired; PKTHREAD OwnerThread; ULONG TouchedByFileNumber; ULONG TouchedInLineNumber; NDIS_SPIN_LOCK NdisLock; } NUIO_LOCK, *PNUIO_LOCK;
#define NUIOL_SIG 'KCOL'
extern NDIS_SPIN_LOCK ndisuioDbgLogLock;
extern VOID ndisuioAllocateSpinLock( IN PNUIO_LOCK pLock, IN ULONG FileNumber, IN ULONG LineNumber );
extern VOID ndisuioAcquireSpinLock( IN PNUIO_LOCK pLock, IN ULONG FileNumber, IN ULONG LineNumber );
extern VOID ndisuioReleaseSpinLock( IN PNUIO_LOCK pLock, IN ULONG FileNumber, IN ULONG LineNumber );
#define CHECK_LOCK_COUNT(Count) \
{ \ if ((INT)(Count) < 0) \ { \ DbgPrint("Lock Count %d is < 0! File %s, Line %d\n",\ Count, __FILE__, __LINE__); \ DbgBreakPoint(); \ } \ } #else
#define CHECK_LOCK_COUNT(Count)
typedef NDIS_SPIN_LOCK NUIO_LOCK; typedef PNDIS_SPIN_LOCK PNUIO_LOCK;
#endif // DBG_SPIN_LOCK
#if DBG
extern INT ndisuioDebugLevel;
#define DEBUGP(lev, stmt) \
{ \ if ((lev) <= ndisuioDebugLevel) \ { \ DbgPrint("Ndisuio: "); DbgPrint stmt; \ } \ }
#define DEBUGPDUMP(lev, pBuf, Len) \
{ \ if ((lev) <= ndisuioDebugLevel) \ { \ DbgPrintHexDump((PUCHAR)(pBuf), (ULONG)(Len)); \ } \ }
#define NUIO_ASSERT(exp) \
{ \ if (!(exp)) \ { \ DbgPrint("Ndisuio: assert " #exp " failed in" \ " file %s, line %d\n", __FILE__, __LINE__); \ DbgBreakPoint(); \ } \ }
#define NUIO_SET_SIGNATURE(s, t)\
(s)->t##_sig = t##_signature;
#define NUIO_STRUCT_ASSERT(s, t) \
if ((s)->t##_sig != t##_signature) \ { \ DbgPrint("ndisuio: assertion failure" \ " for type " #t " at 0x%x in file %s, line %d\n", \ (PUCHAR)s, __FILE__, __LINE__); \ DbgBreakPoint(); \ }
//
// Memory Allocation/Freeing Audit:
//
//
// The NUIOD_ALLOCATION structure stores all info about one allocation
//
typedef struct _NUIOD_ALLOCATION {
ULONG Signature; struct _NUIOD_ALLOCATION *Next; struct _NUIOD_ALLOCATION *Prev; ULONG FileNumber; ULONG LineNumber; ULONG Size; ULONG_PTR Location; // where the returned ptr was stored
union { ULONGLONG Alignment; UCHAR UserData; };
} NUIOD_ALLOCATION, *PNUIOD_ALLOCATION;
#define NUIOD_MEMORY_SIGNATURE (ULONG)'CSII'
extern PVOID ndisuioAuditAllocMem ( PVOID pPointer, ULONG Size, ULONG FileNumber, ULONG LineNumber );
extern VOID ndisuioAuditFreeMem( PVOID Pointer );
extern VOID ndisuioAuditShutdown( VOID );
extern VOID DbgPrintHexDump( PUCHAR pBuffer, ULONG Length );
#else
//
// No debug
//
#define DEBUGP(lev, stmt)
#define DEBUGPDUMP(lev, pBuf, Len)
#define NUIO_ASSERT(exp)
#define NUIO_SET_SIGNATURE(s, t)
#define NUIO_STRUCT_ASSERT(s, t)
#endif // DBG
#endif // _NUIODEBUG__H
|