windows-nt/Source/XPSP1/NT/drivers/wdm/usb/usbd/dbg.h

184 lines
4.4 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
DBG.H
Abstract:
This module contains the PRIVATE (driver-only) definitions for the
code that implements the usbd driver.
Environment:
Kernel & user mode
Revision History:
09-29-95 : created
--*/
#define NAME_MAX 64
#define USBD_TAG 0x44425355 /* "USBD" */
#define USBD_FREE_TAG 0x65657266 /* "free" */
#if DBG
#define DEBUG_LOG
#define DEBUG_HEAP
#endif
#define SIG_CONFIG 0x464E4F43 //"CONF" signature for config handle
#define SIG_PIPE 0x45504950 //"PIPE" signature for pipe handle
#define SIG_INTERFACE 0x43414658 //"XFAC" signature for interface handle
#define SIG_DEVICE 0x56454455 //"UDEV" signature for device handle
#if DBG
#define ASSERT_CONFIG(ch) USBD_ASSERT((ch)->Sig == SIG_CONFIG)
#define ASSERT_PIPE(ph) USBD_ASSERT((ph)->Sig == SIG_PIPE)
#define ASSERT_INTERFACE(ih) USBD_ASSERT((ih)->Sig == SIG_INTERFACE)
#define ASSERT_DEVICE(d) USBD_ASSERT((d)->Sig == SIG_DEVICE)
ULONG
_cdecl
USBD_KdPrintX(
PCH Format,
...
);
extern ULONG USBD_Debug_Trace_Level;
// the convention here is to print to the ntkern log if
// l (level) is > 1 otherwise print to the terminal
// in usbd you have to manully specify the ' in the output
// string
#define USBD_KdPrint(l, _x_) if (((l) == 0) || (((l)-1) < USBD_Debug_Trace_Level)) \
{\
if ((l) == 1) {\
DbgPrint("USBD: ");\
} else {\
DbgPrint("'USBD: ");\
}\
USBD_KdPrintX _x_;\
}
VOID
USBD_Assert(
PVOID FailedAssertion,
PVOID FileName,
ULONG LineNumber,
PCHAR Message
);
#define USBD_ASSERT( exp ) \
if (!(exp)) \
USBD_Assert( #exp, __FILE__, __LINE__, NULL )
#define USBD_ASSERTMSG( msg, exp ) \
if (!(exp)) \
USBD_Assert( #exp, __FILE__, __LINE__, msg )
// TEST_TRAP() is a code coverage trap these should be removed
// if you are able to 'g' past the OK
//
// TRAP() breaks in the debugger on the debugger build
// these indicate bugs in client drivers or fatal error
// conditions that should be debugged. also used to mark
// code for features not implemented yet.
//
// KdBreak() breaks in the debugger when in MAX_DEBUG mode
// ie debug trace info is turned on, these are intended to help
// debug drivers devices and special conditions on the
// bus.
#ifdef NTKERN
// Ntkern currently implements DebugBreak with a global int 3,
// we really would like the int 3 in our own code.
#define DBGBREAK() _asm { int 3 }
#else
#define DBGBREAK() DbgBreakPoint()
#endif /* NTKERN */
#define TEST_TRAP() { DbgPrint( " Code Coverage Trap %s %d\n", __FILE__, __LINE__); \
DBGBREAK(); }
#ifdef MAX_DEBUG
#define USBD_KdBreak(_x_) { DbgPrint("USBD:"); \
DbgPrint _x_ ; \
DBGBREAK(); }
#else
#define USBD_KdBreak(_x_)
#endif
#define USBD_KdTrap(_x_) { DbgPrint( "USBD: "); \
DbgPrint _x_; \
DBGBREAK(); }
VOID
USBD_Debug_LogEntry(
IN CHAR *Name,
IN ULONG_PTR Info1,
IN ULONG_PTR Info2,
IN ULONG_PTR Info3
);
#define LOGENTRY(sig, info1, info2, info3) \
USBD_Debug_LogEntry(sig, (ULONG_PTR)info1, (ULONG_PTR)info2, (ULONG_PTR)info3)
extern LONG USBDTotalHeapAllocated;
PVOID
USBD_Debug_GetHeap(
IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes,
IN ULONG Signature,
IN PLONG TotalAllocatedHeapSpace
);
#define GETHEAP(pooltype, numbytes) USBD_Debug_GetHeap(pooltype, numbytes,\
USBD_TAG, &USBDTotalHeapAllocated)
VOID
USBD_Debug_RetHeap(
IN PVOID P,
IN ULONG Signature,
IN PLONG TotalAllocatedHeapSpace
);
#define RETHEAP(p) USBD_Debug_RetHeap(p, USBD_TAG, &USBDTotalHeapAllocated)
#else /* DBG not defined */
#define USBD_KdBreak(_x_)
#define USBD_KdPrint(l, _x_)
#define USBD_KdTrap(_x_)
#define TEST_TRAP()
#define ASSERT_CONFIG(ch)
#define ASSERT_PIPE(ph)
#define ASSERT_INTERFACE(ih)
#define ASSERT_DEVICE(d)
#define USBD_ASSERT( exp )
#define USBD_ASSERTMSG( msg, exp )
#define GETHEAP(pooltype, numbytes) ExAllocatePoolWithTag(pooltype, numbytes, USBD_TAG)
#define RETHEAP(p) ExFreePool(p)
#endif /* DBG */