|
|
/*++
Copyright (C) Microsoft Corporation, 1993 - 1999
Module Name:
debug.h
Abstract:
This module contains debug macros and goodies.
Author:
Robbie Harris (Hewlett-Packard) 1-July-1998
Environment:
Kernel mode
Revision History :
--*/ #define DDPnP1(_x_)
#define DD(_x_)
// #define DDPnP1(_x_) DbgPrint _x_
#ifndef _DEBUG_
#define _DEBUG_
#if (1 == DVRH_DELAY_THEORY)
extern int DVRH_wt; extern int DVRH_wb; extern int DVRH_rt; extern int DVRH_rb; #endif
typedef struct tagSTRUCTUREOFFSETSTABLE { char * pszField; unsigned long dwOffset; } STRUCTUREOFFSETSTABLE, *PSTRUCTUREOFFSETSTABLE;
#if DBG
// PAR_TEST_HARNESS is used to enable a special mode to bucket
// writes and siphon reads to a test harness. This functionality
// is for debugging purposes only.
// 0 - off
// 1 - on
#define PAR_TEST_HARNESS 0
// use with ParDebugLevel and ParDump(...)
#define PARALWAYS ((ULONG)0xffffffff) // Set all the bits. So this will always show
#define PARERRORS ((ULONG)0x00000001)
#define PARUNLOAD ((ULONG)0x00000002)
#define PARINITDEV ((ULONG)0x00000004)
#define PARIRPPATH ((ULONG)0x00000008)
#define PARSTARTER ((ULONG)0x00000010)
#define PAROPENCLOSE ((ULONG)0x00000020)
#define PARREMLOCK ((ULONG)0x00000040)
#define PARTHREAD ((ULONG)0x00000080)
#define PARIEEE ((ULONG)0x00000100)
#define PAREXIT ((ULONG)0x00000200)
#define PARENTRY ((ULONG)0x00000400)
#define PARENTRY_EXIT (PARENTRY | PAREXIT)
#define PARINFO ((ULONG)0x00000800)
#define PARECPTRACE ((ULONG)0x00001000)
#define PARALLOCFREEPORT ((ULONG)0x00002000)
#define PARSELECTDESELECT ((ULONG)0x00004000)
#define PARDOT3DL ((ULONG)0x00008000)
#define PARPNP1 ((ULONG)0x00010000) // device object create/kill - major events
#define PARPNP2 ((ULONG)0x00020000) // device object create/kill - verbose
#define PARPNP4 ((ULONG)0x00040000)
#define PARPNP8 ((ULONG)0x00080000)
#define PARLGZIP ((ULONG)0x00100000) // Legacy Zip drive
#define PARRESCAN ((ULONG)0x00200000) // bus rescan - QUERY_DEVICE_RELATIONS/BusRelations
#define PARIOCTL1 ((ULONG)0x00400000) // IOCTL related info
#define PARIOCTL2 ((ULONG)0x00800000) // IOCTL related info
#define PARDUMP_PNP_PARPORT ((ULONG)0x01000000) // ParPort PnP interface and device notification callback activity
#define PARDUMP_PNP_DL ((ULONG)0x02000000) // 1284.3 DL PnP
#define PARREG ((ULONG)0x04000000) // registry operations
#define PARPOWER ((ULONG)0x08000000)
#define PARDUMP_SILENT ((ULONG)0x00000000)
#define PARDUMP_VERBOSE ((ULONG)0x20000000)
#define PARDUMP_VERBOSE_VERY ((ULONG)0x40000000)
#define PARDUMP_VERBOSE_MAX ((ULONG)0xFFFFFFFF)
// use with ParBreakOn
#define PAR_BREAK_ON_NOTHING ((ULONG)0x00000000)
#define PAR_BREAK_ON_DRIVER_ENTRY ((ULONG)0x00000001)
#define PAR_BREAK_ON_UNLOAD ((ULONG)0x00000002)
#define PAR_BREAK_ON_ADD_DEVICE ((ULONG)0x00000004)
#define PAR_BREAK_ON_DEV_1 ((ULONG)0x00000100)
extern ULONG ParDebugLevel; // How verbose do we want parallel.sys to be with DbgPrint messages?
extern ULONG ParBreakOn; // What conditions do we want to break on?
extern ULONG ParUseAsserts; // 0 == disable ASSERTs
#endif // DBG
#if DBG
// DVRH_SHOW_DEBUG_SPEW 0 - Debug Spew is off
// 1 - Debug Spew is on
// - Note: The timer spew is not controlled by this
// Look at DVRH_SHOW_SHALLOW_TIMER and
// DVRH_SHOW_DEEP_TIMER.
#define DVRH_SHOW_DEBUG_SPEW 1
// DVRH_SHOW_SHALLOW_TIMER 0 - Entry Timers off
// 1 - Entry Timers on
#define DVRH_SHOW_SHALLOW_TIMER 0
// DVRH_SHOW_DEEP_TIMER 0 - Full Timer off
// 1 - Full Timer on
#define DVRH_SHOW_DEEP_TIMER 0
// 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.
// 0 - off
// 1 - on
#define DVRH_BUS_RESET_ON_ERROR 0
#else
#define DVRH_SHOW_DEBUG_SPEW 0
#define DVRH_SHOW_SHALLOW_TIMER 0
#define DVRH_SHOW_DEEP_TIMER 0
#define DVRH_SHOW_BYTE_LOG 0
#define DVRH_PAR_LOGFILE 0
#define DVRH_BUS_RESET_ON_ERROR 0
#endif
#if (1 == DVRH_PAR_LOGFILE)
#define DEFAULT_LOG_FILE_NAME L"\\??\\C:\\tmp\\parallel.log"
BOOLEAN DVRH_LogMessage(PCHAR szFormat, ...); // BOOLEAN DVRH_LogByteData(BOOLEAN READ,PCHAR szBuff,ULONG dwTransferred);
#if 1
#define DVRH_DbgPrint DVRH_LogMessage
#define DDF DVRH_LogMessage
#else
// This is put in so I can pinpoint a single debug message
#define DVRH_DbgPrint
// #define DVRH_ShallowDbgMsg DVRH_LogMessage
#define DVRH_ShallowDbgMsg
#endif
#else
#define DVRH_DbgPrint DbgPrint
#define DVRH_ShallowDbgMsg
#define DDF DbgPrint
#endif
#if (DBG && 1 == DVRH_SHOW_DEBUG_SPEW)
#define ParAssert( ASSERTION ) if(ParUseAsserts) ASSERT( ASSERTION )
#define ParDump(LEVEL,STRING) \
if (ParDebugLevel & (LEVEL)) DVRH_DbgPrint STRING
#define ParDump2(LEVEL,STRING) \
if (ParDebugLevel & (LEVEL)) { \ DVRH_DbgPrint("PARALLEL: "); \ DVRH_DbgPrint STRING; \ }
// display if we want PnP info
#define ParDumpP(STRING) \
if (ParDebugLevel & PARPNP1) { \ DVRH_DbgPrint("PARALLEL: "); \ DVRH_DbgPrint STRING; \ }
// display if we want Register info
#define ParDumpReg(LEVEL,STRING,ECRADDR,DCRADDR,DSRADDR) \
if (ParDebugLevel & (LEVEL) ) { \ DVRH_DbgPrint("PARALLEL: "); \ DVRH_DbgPrint STRING; \ DVRH_DbgPrint(" dsr[%02x] dcr[%02x] ecr[%02x]\r\n", \ (int)READ_PORT_UCHAR(DSRADDR), \ (int)READ_PORT_UCHAR(DCRADDR), \ (int)READ_PORT_UCHAR(ECRADDR)); \ }
// verbose - display if ANY debug flag is set
#define ParDumpV(STRING) \
if (ParDebugLevel & PARDUMP_VERBOSE_MAX) { \ DVRH_DbgPrint("PARALLEL: "); \ DVRH_DbgPrint STRING; \ }
#define ParBreak(BREAK_CONDITION,STRING) \
if (ParBreakOn & (BREAK_CONDITION)) { \ DVRH_DbgPrint("PARALLEL: Break: "); \ DVRH_DbgPrint STRING; \ DbgBreakPoint(); \ } #endif // (DBG && 1 == DVRH_SHOW_DEBUG_SPEW)
#if (DBG && 1 == DVRH_SHOW_SHALLOW_TIMER)
#define ParTimerMainCheck(x) { \
LARGE_INTEGER myTickCount; \ KeQueryTickCount(&myTickCount); \ DVRH_DbgPrint("Parallel:Timer: %d,%d,%I64d, ", \ PsGetCurrentProcessId(), \ PsGetCurrentThreadId(), \ myTickCount); \ DVRH_DbgPrint x; \ } #endif
#if (DBG && 1 == DVRH_SHOW_DEEP_TIMER)
#define ParTimerCheck(x) { \
LARGE_INTEGER myTickCount; \ KeQueryTickCount(&myTickCount); \ DVRH_DbgPrint("Parallel:Timer: %d,%d,%I64d, ", \ PsGetCurrentProcessId(), \ PsGetCurrentThreadId(), \ myTickCount); \ DVRH_DbgPrint x; \ } #endif
#if (0 == DVRH_SHOW_DEBUG_SPEW)
#define ParAssert( X ) //lint !e760
#define ParDump(LEVEL,STRING) //lint !e760
#define ParDump2(LEVEL,STRING) //lint !e760
#define ParDumpP(STRING) //lint !e760
#define ParDumpReg(LEVEL,STRING,ECRADDR,DCRADDR,DSRADDR) //lint !e760
#define ParDumpV(STRING) //lint !e760
#define ParBreak(LEVEL,STRING) //lint !e760
#endif // DBG
#if (0 == DVRH_SHOW_SHALLOW_TIMER)
#define ParTimerMainCheck(x) //lint !e760
#endif // DBG
#if (0 == DVRH_SHOW_DEEP_TIMER)
#define ParTimerCheck(x) //lint !e760
#endif // DBG
#endif
|