windows-nt/Source/XPSP1/NT/net/atm/rawwan/sys/debug.h

370 lines
7.4 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
D:\nt\private\ntos\tdi\rawwan\core\debug.h
Abstract:
Debug macros for the Null Transport module.
Revision History:
Who When What
-------- -------- ----------------------------------------------
arvindm 05-29-97 created based on ATM ARP.
Notes:
--*/
#ifndef _RWANDEBUG__H
#define _RWANDEBUG__H
//
// Message verbosity: lower values indicate higher urgency
//
#define DL_EXTRA_LOUD 20
#define DL_VERY_LOUD 10
#define DL_LOUD 8
#define DL_INFO 6
#define DL_WARN 4
#define DL_ERROR 2
#define DL_FATAL 0
//
// Component being debugged.
//
#define DC_DISPATCH 0x00000001
#define DC_BIND 0x00000002
#define DC_ADDRESS 0x00000004
#define DC_CONNECT 0x00000008
#define DC_DISCON 0x00000010
#define DC_DATA_TX 0x00000020
#define DC_DATA_RX 0x00000040
#define DC_UTIL 0x00000080
#define DC_WILDCARD 0xffffffff
//
// Data traffic debug message flags
//
#define RWAND_DATA_IN 0x01
#define RWAND_DATA_OUT 0x02
#define RWAND_TRACK_BIG_SENDS 0x04
//
// Logging for sends and receives
//
typedef struct _RWAND_DATA_LOG_ENTRY
{
ULONG Operation;
#define RWAND_DLOG_TX_START ' xt'
#define RWAND_DLOG_TX_END ' xT'
#define RWAND_DLOG_RX_START ' xr'
#define RWAND_DLOG_RX_END ' xR'
PNDIS_PACKET pNdisPacket;
PVOID Context;
ULONG PendingCount;
} RWAND_DATA_LOG_ENTRY, *PRWAND_DATA_LOG_ENTRY;
#define MAX_RWAND_PKT_LOG 32
#ifdef PERF
typedef struct _RWAND_SEND_LOG_ENTRY
{
ULONG Flags;
PNDIS_PACKET pNdisPacket;
ULONG Destination;
ULONG Length;
LARGE_INTEGER SendTime;
LARGE_INTEGER SendCompleteTime;
} RWAND_SEND_LOG_ENTRY, *PRWAND_SEND_LOG_ENTRY;
#define RWAND_SEND_FLAG_UNUSED 0x00000000
#define RWAND_SEND_FLAG_WAITING_COMPLETION 0x00000001
#define RWAND_SEND_FLAG_COMPLETED 0x00000002
#define RWAND_SEND_FLAG_RCE_GIVEN 0x00000100
extern VOID
RWandLogSendStart(
IN PNDIS_PACKET pNdisPacket,
IN ULONG Destination,
IN PVOID pRCE
);
extern VOID
RWandLogSendUpdate(
IN PNDIS_PACKET pNdisPacket
);
extern VOID
RWandLogSendComplete(
IN PNDIS_PACKET pNdisPacket
);
extern VOID
RWandLogSendAbort(
IN PNDIS_PACKET pNdisPacket
);
extern LARGE_INTEGER TimeFrequency;
#endif // PERF
#if DBG_SPIN_LOCK
typedef struct _RWAN_LOCK
{
ULONG Signature;
ULONG IsAcquired;
PKTHREAD OwnerThread;
ULONG TouchedByFileNumber;
ULONG TouchedInLineNumber;
NDIS_SPIN_LOCK NdisLock;
} RWAN_LOCK, *PRWAN_LOCK;
#define RWANL_SIG 'KCOL'
extern
VOID
RWanAllocateSpinLock(
IN PRWAN_LOCK pLock,
IN ULONG FileNumber,
IN ULONG LineNumber
);
extern
VOID
RWanAcquireSpinLock(
IN PRWAN_LOCK pLock,
IN ULONG FileNumber,
IN ULONG LineNumber
);
extern
VOID
RWanReleaseSpinLock(
IN PRWAN_LOCK pLock,
IN ULONG FileNumber,
IN ULONG LineNumber
);
#define CHECK_LOCK_COUNT(Count) \
{ \
if ((INT)(Count) < 0) \
{ \
DbgPrint("Lock Count %d is < 0! File %s, Line %d\n", \
Count, __FILE__, __LINE__); \
DbgBreakPoint(); \
} \
}
#else
#define CHECK_LOCK_COUNT(Count)
#define RWAN_LOCK NDIS_SPIN_LOCK
#define PRWAN_LOCK PNDIS_SPIN_LOCK
#endif // DBG_SPIN_LOCK
#if DBG
extern NDIS_SPIN_LOCK RWanDbgLogLock;
extern INT RWanDebugLevel; // The value here defines what the user wants to see
// all messages with this urgency and higher are enabled
extern ULONG RWanDebugComp; // The bits set here define what components are being
// debugged
extern INT RWanDataDebugLevel;
extern INT RWandBigDataLength;
#define RWANDEBUGP(lev, comp, stmt) \
{ \
if (((lev) <= RWanDebugLevel) && ((comp) & RWanDebugComp)) \
{ \
DbgPrint("RWan: "); DbgPrint stmt; \
} \
}
#define RWANDEBUGPDUMP(lev, comp, pBuf, Len) \
{ \
if (((lev) <= RWanDebugLevel) && ((comp) & RWanDebugComp)) \
{ \
DbgPrintHexDump((PUCHAR)(pBuf), (ULONG)(Len)); \
} \
}
#define RWANDEBUGPATMADDR(lev, comp, pString, pAddr) \
{ \
if (((lev) <= RWanDebugLevel) && ((comp) & RWanDebugComp)) \
{ \
DbgPrintAtmAddr(pString, pAddr); \
} \
}
#define RWAN_ASSERT(exp) \
{ \
if (!(exp)) \
{ \
DbgPrint("RWan: assert " #exp " failed in file %s, line %d\n", __FILE__, __LINE__); \
DbgBreakPoint(); \
} \
}
#define RWAN_SET_SIGNATURE(s, t)\
(s)->t##_sig = t##_signature;
#define RWAN_STRUCT_ASSERT(s, t)\
if ((s)->t##_sig != t##_signature) {\
DbgPrint("RWan: assertion failure for type " #t " at 0x%x in file %s, line %d\n", (PUCHAR)s, __FILE__, __LINE__); \
DbgBreakPoint(); \
}
#if DBG_CO_SEND
#define NDIS_CO_SEND_PACKETS(_VcHandle, _PktArray, _Count) \
RWanCoSendPackets(_VcHandle, _PktArray, _Count)
#else
#define NDIS_CO_SEND_PACKETS(_VcHandle, _PktArray, _Count) \
NdisCoSendPackets(_VcHandle, _PktArray, _Count)
#endif // DBG_CO_SEND
extern INT RWanSkipAll; // Used as an emergency exit mechanism!
//
// Memory Allocation/Freeing Audit:
//
//
// The RWAND_ALLOCATION structure stores all info about one allocation
//
typedef struct _RWAND_ALLOCATION {
ULONG Signature;
struct _RWAND_ALLOCATION *Next;
struct _RWAND_ALLOCATION *Prev;
ULONG FileNumber;
ULONG LineNumber;
ULONG Size;
ULONG_PTR Location; // where the returned pointer was put
union
{
ULONGLONG Alignment;
UCHAR UserData;
};
} RWAND_ALLOCATION, *PRWAND_ALLOCATION;
#define RWAND_MEMORY_SIGNATURE (ULONG)'CSII'
extern
PVOID
RWanAuditAllocMem (
PVOID pPointer,
ULONG Size,
ULONG FileNumber,
ULONG LineNumber
);
extern
VOID
RWanAuditFreeMem(
PVOID Pointer
);
extern
VOID
RWanAuditShutdown(
VOID
);
extern
VOID
DbgPrintHexDump(
PUCHAR pBuffer,
ULONG Length
);
extern
VOID
DbgPrintAtmAddr(
PCHAR pString,
ATM_ADDRESS UNALIGNED * pAddr
);
extern
VOID
DbgPrintMapping(
PCHAR pString,
UCHAR UNALIGNED * pIpAddr,
ATM_ADDRESS UNALIGNED * pAddr
);
extern
VOID
RWanCoSendPackets(
IN NDIS_HANDLE NdisVcHandle,
IN PNDIS_PACKET * PacketArray,
IN UINT PacketCount
);
extern NDIS_SPIN_LOCK RWanDPacketLogLock;
#if DBG_LOG_PACKETS
#define RWAND_LOG_PACKET(_pVc, _Op, _pPkt, _Ctxt) \
{ \
struct _RWAND_DATA_LOG_ENTRY * pEnt; \
NdisAcquireSpinLock(&RWanDPacketLogLock); \
pEnt = &(_pVc)->DataLog[(_pVc)->Index]; \
(_pVc)->Index++; \
if ((_pVc)->Index == MAX_RWAND_PKT_LOG) \
(_pVc)->Index = 0; \
pEnt->Operation = _Op; \
pEnt->pNdisPacket = _pPkt; \
pEnt->Context = _Ctxt; \
pEnt->PendingCount = (_pVc)->PendingPacketCount;\
NdisReleaseSpinLock(&RWanDPacketLogLock); \
}
#else
#define RWAND_LOG_PACKET(_pVc, _Op, _pPkt, _Ctxt)
#endif
#else
//
// No debug
//
#define RWANDEBUGP(lev, comp, stmt)
#define RWANDEBUGPDUMP(lev, comp, pBuf, Len)
#define RWANDEBUGPATMADDR(lev, comp, pString, pAddr)
#define RWAN_ASSERT(exp)
#define RWAN_SET_SIGNATURE(s, t)
#define RWAN_STRUCT_ASSERT(s, t)
#define NDIS_CO_SEND_PACKETS(_VcHandle, _PktArray, _Count) \
NdisCoSendPackets(_VcHandle, _PktArray, _Count)
#define RWAND_LOG_PACKET(_pVc, _Op, _pPkt, _Ctxt)
#endif // DBG
extern ULONG gHackSendSize;
#endif // _RWANDEBUG__H