/************************************************************************************************************************** * DEBUG.H SigmaTel STIR4200 debug header file ************************************************************************************************************************** * (C) Unpublished Copyright of Sigmatel, Inc. All Rights Reserved. * * * Created: 04/06/2000 * Version 0.9 * Edited: 04/27/2000 * Version 0.92 * * **************************************************************************************************************************/ #ifndef _DEBUG_H_ #define _DEBUG_H_ #if DBG #define DEBUG #define DEBUG_IRUSB //Begin, Debug code from BulkUsb #ifndef DBGSTR_PREFIX #define DBGSTR_PREFIX "StIrUsb: " #endif #define DPRINT DbgPrint #define TRAP() DbgBreakPoint(); #define IRUSB_DBGOUTSIZE 512 typedef struct _IRUSB_DBGDATA { // mirrors device extension pending io count ULONG PendingIoCount; // count of pipe errors detected during the life of this device instance ULONG PipeErrorCount; // count of pipe resets performed during the life of this device instance ULONG ResetPipeCount; } IRUSB_DBGDATA, *PIRUSB_DBGDATA; //these declared in debug 'c' file extern PIRUSB_DBGDATA gpDbg; static const PCHAR szIrpMajFuncDesc[] = { // note this depends on corresponding values to the indexes in wdm.h "IRP_MJ_CREATE", "IRP_MJ_CREATE_NAMED_PIPE", "IRP_MJ_CLOSE", "IRP_MJ_READ", "IRP_MJ_WRITE", "IRP_MJ_QUERY_INFORMATION", "IRP_MJ_SET_INFORMATION", "IRP_MJ_QUERY_EA", "IRP_MJ_SET_EA", "IRP_MJ_FLUSH_BUFFERS", "IRP_MJ_QUERY_VOLUME_INFORMATION", "IRP_MJ_SET_VOLUME_INFORMATION", "IRP_MJ_DIRECTORY_CONTROL", "IRP_MJ_FILE_SYSTEM_CONTROL", "IRP_MJ_DEVICE_CONTROL", "IRP_MJ_INTERNAL_DEVICE_CONTROL", "IRP_MJ_SHUTDOWN", "IRP_MJ_LOCK_CONTROL", "IRP_MJ_CLEANUP", "IRP_MJ_CREATE_MAILSLOT", "IRP_MJ_QUERY_SECURITY", "IRP_MJ_SET_SECURITY", "IRP_MJ_POWER", "IRP_MJ_SYSTEM_CONTROL", "IRP_MJ_DEVICE_CHANGE", "IRP_MJ_QUERY_QUOTA", "IRP_MJ_SET_QUOTA", "IRP_MJ_PNP" }; //IRP_MJ_MAXIMUM_FUNCTION defined in wdm.h static const PCHAR szPnpMnFuncDesc[] = { // note this depends on corresponding values to the indexes in wdm.h "IRP_MN_START_DEVICE", "IRP_MN_QUERY_REMOVE_DEVICE", "IRP_MN_REMOVE_DEVICE", "IRP_MN_CANCEL_REMOVE_DEVICE", "IRP_MN_STOP_DEVICE", "IRP_MN_QUERY_STOP_DEVICE", "IRP_MN_CANCEL_STOP_DEVICE", "IRP_MN_QUERY_DEVICE_RELATIONS", "IRP_MN_QUERY_INTERFACE", "IRP_MN_QUERY_CAPABILITIES", "IRP_MN_QUERY_RESOURCES", "IRP_MN_QUERY_RESOURCE_REQUIREMENTS", "IRP_MN_QUERY_DEVICE_TEXT", "IRP_MN_FILTER_RESOURCE_REQUIREMENTS", "IRP_MN_READ_CONFIG", "IRP_MN_WRITE_CONFIG", "IRP_MN_EJECT", "IRP_MN_SET_LOCK", "IRP_MN_QUERY_ID", "IRP_MN_QUERY_PNP_DEVICE_STATE", "IRP_MN_QUERY_BUS_INFORMATION", "IRP_MN_DEVICE_USAGE_NOTIFICATION", "IRP_MN_SURPRISE_REMOVAL" }; #define IRP_PNP_MN_FUNCMAX IRP_MN_SURPRISE_REMOVAL static const PCHAR szSystemPowerState[] = { "PowerSystemUnspecified", "PowerSystemWorking", "PowerSystemSleeping1", "PowerSystemSleeping2", "PowerSystemSleeping3", "PowerSystemHibernate", "PowerSystemShutdown", "PowerSystemMaximum" }; static const PCHAR szDevicePowerState[] = { "PowerDeviceUnspecified", "PowerDeviceD0", "PowerDeviceD1", "PowerDeviceD2", "PowerDeviceD3", "PowerDeviceMaximum" }; VOID DBG_PrintBuf( IN PUCHAR bufptr, int buflen ); #define IRUSB_ASSERT( cond ) ASSERT( cond ) #define IRUSB_StringForDevState( devState ) szDevicePowerState[ devState ] #define IRUSB_StringForSysState( sysState ) szSystemPowerState[ sysState ] #define IRUSB_StringForPnpMnFunc( mnfunc ) szPnpMnFuncDesc[ mnfunc ] #define IRUSB_StringForIrpMjFunc( mjfunc ) szIrpMajFuncDesc[ mjfunc ] #else // if not DBG // // dummy definitions that go away in the retail build // #define IRUSB_ASSERT( cond ) #define IRUSB_StringForDevState( devState ) #define IRUSB_StringForSysState( sysState ) #define IRUSB_StringForPnpMnFunc( mnfunc ) #define IRUSB_StringForIrpMjFunc( mjfunc ) #endif // End, debug code from Bul kUsb #ifdef DEBUG #define DEBUGCOND( ilev, cond, _x_) \ if( (ilev & DbgSettings) && ( cond )) { \ DbgPrint( DBGSTR_PREFIX ); \ DbgPrint _x_ ; \ } #define DEBUGONCE( ilev, _x_ ) \ { \ static BOOLEAN didOnce = FALSE; \ if ( !didOnce ) { \ didOnce = TRUE; \ DEBUGMSG( ilev, _x_ ); \ } \ } #define DEBUGONCECOND( ilev, cond, _x_ ) \ { \ static BOOLEAN didOnce = FALSE; \ if (( !didOnce ) && (cond)) { \ didOnce = TRUE; \ DEBUGMSG( ilev, _x_ ); \ } \ } extern int DbgSettings; #define DEBUGMSG( dbgs, format ) ( ((dbgs) & DbgSettings)? DbgPrint format:0 ) #define IRUSB_DUMP( flag, parms ) ( (( flag) & DbgSettings )? DBG_PrintBuf parms: 0 ) #define DBG_STAT (1 << 23) #define DBG_PNP (1 << 24) #define DBG_TIME (1 << 25) #define DBG_DBG (1 << 26) #define DBG_OUT (1 << 27) #define DBG_BUF (1 << 28) #define DBG_BUFS (1 << 28) #define DBG_FUNCTION (1 << 29) #define DBG_FUNC (1 << 29) #define DBG_WARN (1 << 30) #define DBG_WARNING (1 << 30) #define DBG_ERROR (1 << 31) #define DBG_ERR (1 << 31) #if defined(ERROR_MESSAGES) #define DBG_INT_ERR (1 << 31) #else #define DBG_INT_ERR (1 << 29) #endif #define DBGDBG(_dbgPrint) \ DbgPrint(_dbgPrint) #ifdef DEBUG_IRUSB #define DBG_D(dbgs, i) (((dbgs) & DbgSettings)? DbgPrint("irusb:"#i"==%d\n", (i)):0) #define DBG_X(dbgs, x) (((dbgs) & DbgSettings)? DbgPrint("irusb:"#x"==0x%0*X\n", sizeof(x)*2, ((ULONG_PTR)(x))&((1<<(sizeof(x)*8))-1) ):0) #define DBG_UNISTR(dbgs, s) (((dbgs) & DbgSettings)? DbgPrint("irusb:"#s"==%wZ\n", (s) ):0)) #define DBGTIME(_str) \ { \ LARGE_INTEGER Time; \ \ KeQuerySystemTime(&Time); \ DEBUGMSG(DBG_TIME, (_str " %d:%d\n", \ Time.HighPart, \ Time.LowPart/10000)); \ } #else // DEBUG_IRUSB #define DBGTIME(_str) #define DBGFUNC(_dbgPrint) #define DBGOUT(_dbgPrint) #define DBGERR(_dbgPrint) #define DBGWARN(_dbgPrint) #define DBGSTAT(_dbgPrint) #define DBGTIME(_dbgPrint) #define DEBUGMSG(dbgs,format) #define DEBUGONCE( ilev, _x_ ) #define DEBUGCOND( a, b, c ) #define DEBUGONCECOND( a, b, c ) #define IRUSB_DUMP(dbgs,format) #endif // DEBUG_IRUSB #else // DEBUG #define DBGTIME(_str) #define DBGFUNC(_dbgPrint) #define DBGDBG(_dbgPrint) #define DBGOUT(_dbgPrint) #define DBGERR(_dbgPrint) #define DBGWARN(_dbgPrint) #define DBGSTAT(_dbgPrint) #define DEBUGMSG(dbgs,format) #define DBG_D(dbgs, ivar) #define DBG_X(dbgs, xvar) #define DBG_UNISTR(dbgs, svar) #define DEBUGONCE( ilev, _x_ ) #define DEBUGONCECOND( a, b, c ) #define DEBUGCOND( a, b, c ) #define IRUSB_DUMP(dbgs,format) #endif // DEBUG #endif // _DEBUG_H_