/*++

Copyright (c) 2000-2001 Microsoft Corporation

Module Name:

    repltrace.cxx

Abstract:

    This module implements an endpoint replenish tracing facility.

Author:

    Michael Courage (mcourage)  3-Oct-2000

Revision History:

--*/


#include "precomp.h"

#if ENABLE_REPL_TRACE

ENDPOINT_SYNCH DummySynch;

/***************************************************************************++

Routine Description:

    Creates a new (empty) replenish trace log buffer.

Arguments:

    LogSize - Supplies the number of entries in the log.

    ExtraBytesInHeader - Supplies the number of extra bytes to include
        in the log header. This is useful for adding application-
        specific data to the log.

Return Value:

    PTRACE_LOG - Pointer to the newly created log if successful,
        NULL otherwise.

--***************************************************************************/
PTRACE_LOG
CreateReplenishTraceLog(
    IN LONG LogSize,
    IN LONG ExtraBytesInHeader
    )
{
    //
    // Init the global placeholder synch value.
    //
    DummySynch.Value = 0;

    //
    // Create the actual log.
    //

    return CreateTraceLog(
               REPLENISH_TRACE_LOG_SIGNATURE,
               LogSize,
               ExtraBytesInHeader,
               sizeof(REPLENISH_TRACE_LOG_ENTRY)
               );

}   // CreateReplenishTraceLog


/***************************************************************************++

Routine Description:

    Destroys a replenish trace log buffer created with
    CreateReplenishTraceLog().

Arguments:

    pLog - Supplies the replenish trace log buffer to destroy.

--***************************************************************************/
VOID
DestroyReplenishTraceLog(
    IN PTRACE_LOG pLog
    )
{
    DestroyTraceLog( pLog );

}   // DestroyReplenishTraceLog


/***************************************************************************++

Routine Description:

    Writes a new entry to the specified replenish trace log.

Arguments:

    pLog - Supplies the log to write to.

    pEndpoint - the endpoint we're tracing

    Previous - the previous replenish state information

    Current - the current replenish state information

    Action - Supplies an action code for the new log entry.


--***************************************************************************/
VOID
WriteReplenishTraceLog(
    IN PTRACE_LOG pLog,
    IN PUL_ENDPOINT pEndpoint,
    IN ENDPOINT_SYNCH Previous,
    IN ENDPOINT_SYNCH Current,
    IN USHORT Action
    )
{
    REPLENISH_TRACE_LOG_ENTRY entry;

    //
    // Initialize the entry.
    //

    entry.pEndpoint = pEndpoint;
    entry.Previous.Value = Previous.Value;
    entry.Current.Value = Current.Value;
    entry.Action = Action;
    entry.Processor = (USHORT)KeGetCurrentProcessorNumber();

    //
    // Write it to the logs.
    //

    WriteTraceLog( pLog, &entry );

}   // WriteReplenishTraceLog


#endif  // ENABLE_REPL_TRACE