/*++ 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 */