//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1998 - 2000 // // File: debug.h // //-------------------------------------------------------------------------- #ifndef _DEBUG_H_ #define _DEBUG_H_ // // Debug Defines and Macros // extern ULONG d1; extern ULONG d2; extern ULONG d3; extern ULONG d4; extern ULONG d5; extern ULONG d6; extern ULONG d7; extern ULONG d8; extern ULONG d9; extern ULONG Trace; extern ULONG Break; extern ULONG AllowAsserts; // // set bits using DD_* bit defs to mask off debug spew for a specific device // extern ULONG DbgMaskFdo; extern ULONG DbgMaskRawPort; extern ULONG DbgMaskDaisyChain0; extern ULONG DbgMaskDaisyChain1; extern ULONG DbgMaskEndOfChain; extern ULONG DbgMaskLegacyZip; extern ULONG DbgMaskNoDevice; #define PptAssert(_expr_) if( AllowAsserts ) ASSERT((_expr_)) #define PptAssertMsg(_msg_,_expr_) if( AllowAsserts ) ASSERTMSG((_msg_),(_expr_)) #define ASSERT_EVENT(E) { \ ASSERT((E)->Header.Type == NotificationEvent || \ (E)->Header.Type == SynchronizationEvent); \ } // // Break bit definitions: // #define PPT_BREAK_ON_DRIVER_ENTRY 0x00000001 #define PptBreakOnRequest( BREAK_CONDITION, STRING) \ if( Break & (BREAK_CONDITION) ) { \ DbgPrint STRING; \ DbgBreakPoint(); \ } // driver logic analyzer - show data bytes xfer'd in NIBBLE and/or BECP/HWECP modes // 1 == ON // 0 == OFF #define DBG_SHOW_BYTES 0 #if 1 == DBG_SHOW_BYTES extern ULONG DbgShowBytes; #endif #if DBG #define PptEnableDebugSpew 1 #else #define PptEnableDebugSpew 0 #endif #if 1 == PptEnableDebugSpew #define DD PptPrint #else #define DD #define P5ReadPortUchar( _PORT_ ) READ_PORT_UCHAR( (_PORT_) ) #define P5ReadPortBufferUchar( _PORT_, _BUFFER_, _COUNT_ ) READ_PORT_BUFFER_UCHAR( (_PORT_), (_BUFFER_), (_COUNT_) ) #define P5WritePortUchar( _PORT_, _VALUE_ ) WRITE_PORT_UCHAR( (_PORT_), (_VALUE_) ) #define P5WritePortBufferUchar( _PORT_, _BUFFER_, _COUNT_ ) WRITE_PORT_BUFFER_UCHAR( (_PORT_), (_BUFFER_), (_COUNT_) ) #define PptFdoDumpPnpIrpInfo( _FDO_, _IRP_ ) #define PptPdoDumpPnpIrpInfo( _PDO_, _IRP_ ) #define P5TraceIrpArrival( _DEVOBJ_, _IRP_ ) #define P5TraceIrpCompletion( _IRP_ ) #define PptAcquireRemoveLock( _REMOVELOCK_, _TAG_ ) IoAcquireRemoveLock( (_REMOVELOCK_), (_TAG_) ) #define PptReleaseRemoveLock( _REMOVELOCK_, _TAG_ ) IoReleaseRemoveLock( (_REMOVELOCK_), (_TAG_) ) #define PptReleaseRemoveLockAndWait( _REMOVELOCK_, _TAG_ ) IoReleaseRemoveLockAndWait( (_REMOVELOCK_), (_TAG_) ) #define P5SetPhase( _PDX_, _PHASE_ ) (_PDX_)->CurrentPhase = (_PHASE_) #define P5BSetPhase( _IEEESTATE_, _PHASE_ ) (_IEEESTATE_)->CurrentPhase = (_PHASE_) #endif VOID PptPrint( PCOMMON_EXTENSION Ext, ULONG Flags, PCHAR FmtStr, ... ); // // Trace bit definitions: // #define DDE 0x00000001 // Error messages #define DDW 0x00000002 // Warning messages #define DDT 0x00000004 // program Trace messages #define DDINFO 0x00000008 // Informational messages #define DDP 0x00000010 // Pnp and Power messages #define DDC 0x00000020 // daisy Chain messages - select/deselect #define DDA 0x00000040 // port Arbitration messages - acquire/release of port #define DDR 0x00000080 // Registry access #define DD_SEL 0x01000000 // Acquire/Release port & DaisyChain Select/Deselect device #define DD_DL 0x02000000 // 1284.3 DataLink (for dot4) #define DDB 0x00000100 // show Bytes written to / read from i/o ports #define DD_IU 0x00000200 // Init(DriverEntry)/Unload #define DD_PNP1 0x00000400 // PnP on FDO #define DD_PNP2 0x00000800 // PnP on PDO #define DD_OC1 0x00001000 // Open/Close/Cleanup on FDO #define DD_OC2 0x00002000 // Open/Close/Cleanup on PDO #define DD_RW 0x00004000 // Read/Write #define DD_RWV 0x00008000 // Read/Write Verbose #define DD_IEEE 0x00010000 // IEEE negotiation/termination etc. #define DD_CHIP 0x00020000 // parallel port chip info #define DD_ERR 0x00040000 // Error detected #define DD_WRN 0x00080000 // Warning #define DD_CAN 0x00200000 // Cancel #define DD_SM 0x00400000 // IEEE state machine (state & phase) #define DD_EX 0x00800000 // Exported functions (to ppa/ppa3) #define DD_TMP1 0x10000000 // temp 1 - used for temporary debugging #define DD_TMP2 0x20000000 // temp 2 - used for temporary debugging #define DD_VERB 0x80000000 // Verbose #define DDPrint( _b_, _x_ ) if( (_b_) & Trace ) DbgPrint _x_ // // Specific Diagnostics // // // DVRH_SHOW_BYTE_LOG 0 - Byte Log off // 1 - Byte Log on #define DVRH_SHOW_BYTE_LOG 0 // // DVRH_PAR_LOGFILE is used to allow for debug logging to a file // This functionality is for debugging purposes only. // 0 - off // 1 - on #define DVRH_PAR_LOGFILE 0 // // DVRH_BUS_RESET_ON_ERROR // This functionality is for debugging purposes only. // Holds a bus reset for 100us when a handshaking error // is discovered. This is useful for triggering the // logic analyzer // 0 - off // 1 - on #define DVRH_BUS_RESET_ON_ERROR 0 #if (1 == DVRH_PAR_LOGFILE) #define DEFAULT_LOG_FILE_NAME L"\\??\\C:\\tmp\\parport.log" #define DbgPrint DVRH_LogMessage BOOLEAN DVRH_LogMessage(PCHAR szFormat, ...); #endif #endif // _DEBUG_H_