windows-nt/Source/XPSP1/NT/net/1394/nic/sys/pktlog.c
2020-09-26 16:20:57 +08:00

154 lines
3 KiB
C

//
// Copyright (c) 1998-1999, Microsoft Corporation, all rights reserved
//
// pktlog.c
//
// IEEE1394 mini-port/call-manager driver
//
// Packet logging utilities.
//
// 10/12/1999 JosephJ Created
//
#include <precomp.h>
VOID
nic1394InitPktLog(
PNIC1394_PKTLOG pPktLog
)
/*++
Routine Description:
Initializes a packet log.
Arguments:
pPktLog - Pkt log to to be initialized.
--*/
{
if (pPktLog == NULL)
return;
NdisZeroMemory(pPktLog, sizeof(*pPktLog));
pPktLog->InitialTimestamp = KeQueryPerformanceCounter(
&pPktLog->PerformanceFrequency);
pPktLog->EntrySize = sizeof(pPktLog->Entries[0]);
pPktLog->NumEntries = N1394_NUM_PKTLOG_ENTRIES;
}
VOID
Nic1394LogPkt (
PNIC1394_PKTLOG pPktLog,
ULONG Flags,
ULONG SourceID,
ULONG DestID,
PVOID pvData,
ULONG cbData
)
/*++
Routine Description:
Adds a pkt log entry to the specified circular pkt log.
The entry gets added at location
(NdisInterlockedIncrement(&pPktLog->SequenceNo) % N1394_NUM_PKTLOG_ENTRIES)
May be called at any IRQL. Does not use explicit locking -- relies on
the serialization produced by NdisInterlockedIncrement.
Arguments:
pPktLog - Pkt log to log packet
Flags - User-defined flags
SourceID - User-defined source ID
DestID - User-defined destination ID
pvData - Data from packet // can be null
cbData - size of this data (at most N1394_PKTLOG_DATA_SIZE bytes are logged)
--*/
{
ULONG SequenceNo;
PN1394_PKTLOG_ENTRY pEntry;
SequenceNo = NdisInterlockedIncrement(&pPktLog->SequenceNo);
pEntry = &pPktLog->Entries[SequenceNo % N1394_NUM_PKTLOG_ENTRIES];
pEntry->SequenceNo = SequenceNo;
pEntry->Flags = Flags;
pEntry->TimeStamp = KeQueryPerformanceCounter(NULL);
pEntry->SourceID = SourceID;
pEntry->DestID = DestID;
pEntry->OriginalDataSize = cbData;
if (cbData > sizeof(pEntry->Data))
{
cbData = sizeof(pEntry->Data);
}
if (pvData != NULL && cbData != 0)
{
NdisMoveMemory(pEntry->Data, pvData, cbData);
}
}
VOID
nic1394AllocPktLog(
IN ADAPTERCB* pAdapter
)
/*++
Routine Description:
Initialize the packet log
Arguments:
Return Value:
--*/
{
ASSERT (pAdapter->pPktLog==NULL);
pAdapter->pPktLog = ALLOC_NONPAGED(sizeof(*pAdapter->pPktLog), MTAG_PKTLOG);
if (pAdapter->pPktLog == NULL)
{
TRACE( TL_A, TM_Misc, ( " Could not allocate packet log for Adapter %x",
pAdapter ) );
}
}
VOID
nic1394DeallocPktLog(
IN ADAPTERCB* pAdapter
)
/*++
Routine Description:
Free the packet log
Arguments:
Return Value:
--*/
{
if (pAdapter->pPktLog != NULL)
{
FREE_NONPAGED(pAdapter->pPktLog);
pAdapter->pPktLog = NULL;
}
}