/*++ Copyright (c) 1990-1995 Microsoft Corporation Module Name: ndisdbg.h Abstract: NDIS wrapper definitions Author: Environment: Kernel mode, FSD Revision History: Jul-14 Kyle Brandon Added debug supported for conditional breaks. --*/ #ifndef __DEBUG_H #define __DEBUG_H // // Define module numbers. // #define MODULE_NDIS 0x00010000 #define MODULE_DATA 0x00020000 #define MODULE_INIT 0x00030000 #define MODULE_INITPNP 0x00040000 #define MODULE_COMMON 0x00050000 #define MODULE_CONFIG 0x00060000 #define MODULE_CONFIGM 0x00070000 #define MODULE_BUS 0x00080000 #define MODULE_TIMER 0x00090000 #define MODULE_TIMERM 0x000A0000 #define MODULE_MINIPORT 0x000B0000 #define MODULE_REQUESTM 0x000C0000 #define MODULE_MINISUB 0x000D0000 #define MODULE_MAC 0x000E0000 #define MODULE_PROTOCOL 0x000F0000 #define MODULE_EFILTER 0x00100000 #define MODULE_TFILTER 0x00110000 #define MODULE_FFILTER 0x00120000 #define MODULE_AFILTER 0x00130000 #define MODULE_NFILTER 0x00140000 #define MODULE_DEBUG 0x00150000 #define MODULE_MININT 0x00160000 #define MODULE_SENDM 0x00170000 #define MODULE_NDIS_CO 0x00180000 #define MODULE_NDIS_PNP 0x00190000 #define MODULE_POWER 0x001A0000 #define MODULE_WMI 0x001B0000 #define MODULE_DMA 0x001C0000 #define MODULE_CDATA 0x001D0000 #define MODULE_VERIFY 0x001E0000 #define DBG_LEVEL_INFO 0x00000000 #define DBG_LEVEL_LOG 0x00000800 #define DBG_LEVEL_WARN 0x00001000 #define DBG_LEVEL_ERR 0x00002000 #define DBG_LEVEL_FATAL 0x00003000 #define DBG_COMP_INIT 0x00000001 #define DBG_COMP_CONFIG 0x00000002 #define DBG_COMP_SEND 0x00000004 #define DBG_COMP_RECV 0x00000008 #define DBG_COMP_PROTOCOL 0x00000010 #define DBG_COMP_BIND 0x00000020 #define DBG_COMP_BUSINFO 0x00000040 #define DBG_COMP_REG 0x00000080 #define DBG_COMP_MEMORY 0x00000100 #define DBG_COMP_FILTER 0x00000200 #define DBG_COMP_REQUEST 0x00000400 #define DBG_COMP_WORK_ITEM 0x00000800 #define DBG_COMP_PNP 0x00001000 #define DBG_COMP_PM 0x00002000 #define DBG_COMP_OPENREF 0x00004000 #define DBG_COMP_LOCKS 0x00008000 #define DBG_COMP_RESET 0x00010000 #define DBG_COMP_WMI 0x00020000 #define DBG_COMP_CO 0x00040000 #define DBG_COMP_REF 0x00080000 #define DBG_COMP_ALL 0xFFFFFFFF #if DBG #if defined(MEMPRINT) #include "memprint.h" // DavidTr's memprint program at ntos\srv #endif // MEMPRINT VOID ndisDbgPrintUnicodeString( IN PUNICODE_STRING UnicodeString ); #define DBGPRINT(Component, Level, Fmt) \ { \ if ((Level >= ndisDebugLevel) && \ ((ndisDebugSystems & Component) == Component)) \ { \ DbgPrint("***NDIS*** (%x, %d) ", \ MODULE_NUMBER >> 16, __LINE__); \ DbgPrint Fmt; \ } \ } #define DBGPRINT_RAW(Component, Level, Fmt) \ { \ if ((Level >= ndisDebugLevel) && \ ((ndisDebugSystems & Component) == Component)) \ { \ DbgPrint Fmt; \ } \ } #define DBGPRINT_UNICODE(Component, Level, UString) \ { \ if ((Level >= ndisDebugLevel) && \ ((ndisDebugSystems & Component) == Component)) \ { \ ndisDbgPrintUnicodeString(UString); \ } \ } #define DBGBREAK(Component, Level) \ { \ if ((Level >= ndisDebugLevel) && ((ndisDebugSystems & Component) == Component)) \ { \ DbgPrint("***NDIS*** DbgBreak @ %x, %d\n", \ MODULE_NUMBER, __LINE__); \ DbgBreakPoint(); \ } \ } #define IF_DBG(Component, Level) if ((Level >= ndisDebugLevel) && ((ndisDebugSystems & Component) == Component)) #define DbgIsNonPaged(_Address) (MmIsNonPagedSystemAddressValid((PVOID)(_Address))) #define DbgIsNull(_Ptr) ( ((PVOID)(_Ptr)) == NULL ) #else #define DBGPRINT(Component, Level, Fmt) #define DBGPRINT_RAW(Component, Level, Fmt) #define DBGPRINT_UNICODE(Component, Level, UString) #define DBGBREAK(Component, Level) #define DbgIsNonPaged(_Address) TRUE #define DbgIsNull(_Ptr) FALSE #define IF_DBG(Component, Level) if (FALSE) #define ndisDbgPrintUnicodeString(UnicodeString) #endif // DBG #ifdef TRACK_MOPEN_REFCOUNTS // // Declarations for ndis' logfile. // The purpose of the logfile is to log events // relating to the increments and decrements of an mopen's // refcounts. // // // The Ndis Logfile's size is fixed at 0x10000 and the index // is of type ushort. This ensures that the logfile always stays // within its prescribed limits // #define NDIS_LOGFILE_SIZE 0x10000 // // NdisLogfile Events // #define NDIS_INCREMENT_M_OPEN_REFCOUNT 0x0101 #define NDIS_DECREMENT_M_OPEN_REFCOUNT 0x0102 #define NDIS_INCREMENT_OPEN_AF_NOTIFICATION 0xAF01 #define NDIS_DECREMENT_OPEN_AF_NOTIFICATION 0xAF02 /* VOID NDIS_APPEND_MOPEN_LOGFILE( IN USHORT EventCode, IN USHORT LineNumber, IN UINT ModuleNumber, IN UINT Arg1, IN UINT Arg2 ); */ #define NDIS_APPEND_MOPEN_LOGFILE( _Ev, _L, _M, _A1, _A2) \ ndisLogfile[ndisLogfileIndex++] = (ULONG_PTR)(_Ev); \ ndisLogfile[ndisLogfileIndex++] = (ULONG_PTR)((_M) | (_L)); \ ndisLogfile[ndisLogfileIndex++] = (ULONG_PTR)_A1; \ ndisLogfile[ndisLogfileIndex++] = (ULONG_PTR)_A2; #else // TRACK_MOPEN_REFCOUNTS #define NDIS_APPEND_MOPEN_LOGFILE( _Ev, _L, _M, _A1, _A2) #endif // TRACK_MOPEN_REFCOUNTS #ifdef TRACK_MINIPORT_REFCOUNTS // // Declarations for ndis' logfile. // The purpose of the logfile is to log events // relating to the increments and decrements of a miniport's // refcounts. // // // The Ndis Logfile's size is fixed at 0x10000 and the index // is of type ushort. This ensures that the logfile always stays // within its prescribed limits // #define NDIS_MINIPORT_LOGFILE_SIZE 0x10000 // // NdisLogfile Events // #define NDIS_INCREMENT_MINIPORT_REFCOUNT 0x0101 #define NDIS_DECREMENT_MINIPORT_REFCOUNT 0x0102 #define NDIS_SET_MINIPORT_REFCOUNT 0x0103 /* VOID NDIS_APPEND_MINIPORT_LOGFILE( USHORT EventCode, USHORT LineNumber, UINT ModuleNumber, UINT Arg1, UINT Arg2 ); */ #define NDIS_APPEND_MINIPORT_LOGFILE( _Ev, _L, _Mo, _Mi, _R) \ ndisMiniportLogfile[ndisMiniportLogfileIndex++] = (ULONG_PTR)(_Ev); \ ndisMiniportLogfile[ndisMiniportLogfileIndex++] = (ULONG_PTR)((_Mo) | (_L)); \ ndisMiniportLogfile[ndisMiniportLogfileIndex++] = (ULONG_PTR)(_Mi); \ ndisMiniportLogfile[ndisMiniportLogfileIndex++] = (ULONG_PTR)(_R); #define M_LOG_MINIPORT_INCREMENT_REF(_Mi, _L, _Mo) \ NDIS_APPEND_MINIPORT_LOGFILE(NDIS_INCREMENT_MINIPORT_REFCOUNT, \ _L, \ _Mo, \ (_Mi), \ (_Mi)->Ref.ReferenceCount); #define M_LOG_MINIPORT_INCREMENT_REF_CREATE(_Mi, _L, _Mo) \ NDIS_APPEND_MINIPORT_LOGFILE(IoGetCurrentProcess(), \ _L, \ _Mo, \ (_Mi), \ (_Mi)->Ref.ReferenceCount); #define M_LOG_MINIPORT_DECREMENT_REF(_Mi, _R) \ NDIS_APPEND_MINIPORT_LOGFILE(NDIS_DECREMENT_MINIPORT_REFCOUNT, \ __LINE__, \ MODULE_NUMBER, \ (_Mi), \ (_R)); #define M_LOG_MINIPORT_DECREMENT_REF_CLOSE(_Mi, _R) \ NDIS_APPEND_MINIPORT_LOGFILE(IoGetCurrentProcess(), \ __LINE__, \ MODULE_NUMBER, \ (_Mi), \ (_R)); #define M_LOG_MINIPORT_SET_REF(_Mi, _R) \ NDIS_APPEND_MINIPORT_LOGFILE(NDIS_SET_MINIPORT_REFCOUNT, \ __LINE__, \ MODULE_NUMBER, \ (_Mi), \ (_R)); #else // TRACK_MINIPORT_REFCOUNTS #define M_LOG_MINIPORT_INCREMENT_REF(_Mi, _L, _Mo) #define M_LOG_MINIPORT_INCREMENT_REF_CREATE(_Mi, _L, _Mo) #define M_LOG_MINIPORT_DECREMENT_REF(_M, _R) #define M_LOG_MINIPORT_DECREMENT_REF_CLOSE(_Mi, _R) #define M_LOG_MINIPORT_SET_REF(_M, _R) #endif // TRACK_MINIPORT_REFCOUNTS #ifdef TRACK_RECEIVED_PACKETS // // The Ndis Received Logfile's size is fixed at 0x10000 and the index // is of type ushort. This ensures that the logfile always stays // within its prescribed limits // #define NDIS_RCV_LOGFILE_SIZE 0x10000 /* VOID NDIS_APPEND_RCV_LOGFILE(PVOID Packet, PVOID Miniport, PVOID CurrentThread, ULONG Code, ULONG StackLocation, ULONG Ref, ULONG XRef, ULONG Status ); */ #define NDIS_APPEND_RCV_LOGFILE(_PACKET, _MINIPORT, _THREAD, _CODE, _SP, _REF, _XREF, _STATUS) \ ndisRcvLogfile[ndisRcvLogfileIndex++] = (UINT)(_PACKET); \ ndisRcvLogfile[ndisRcvLogfileIndex++] = (UINT)(_MINIPORT); \ ndisRcvLogfile[ndisRcvLogfileIndex++] = (UINT)(_THREAD); \ ndisRcvLogfile[ndisRcvLogfileIndex++] = (UINT)((_CODE<<24)|((_SP&0xff)<<16)|((_REF&0xf)<<12)|(_XREF<<8)|(_STATUS&0xff)); // ndisRcvLogfile[ndisRcvLogfileIndex++] = (UINT)((_Mo) | (_L)); \ // ndisRcvLogfile[ndisRcvLogfileIndex++] = (UINT)((_SP<<24)|((_REF&0xff)<<16)|(_XREF<<8)|(_Status&0xff)); #else // TRACK_MINIPORT_REFCOUNTS #define NDIS_APPEND_RCV_LOGFILE( _P, _L, _Mo, _SP, _REF, _XREF, _Status, _Arg1) #endif // TRACK_RECEIVED_PACKETS #define DBG_LEVEL_INFO 0x00000000 #define DBG_LEVEL_LOG 0x00000800 #define DBG_LEVEL_WARN 0x00001000 #define DBG_LEVEL_ERR 0x00002000 #define DBG_LEVEL_FATAL 0x00003000 #endif // __DEBUG_H