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

167 lines
3.2 KiB
C

/*++
Copyright (c) 1990-1995 Microsoft Corporation
Module Name:
timer.c
Abstract:
NDIS wrapper functions for full mac drivers isr/timer
Author:
Sean Selitrennikoff (SeanSe) 05-Oct-93
Environment:
Kernel mode, FSD
Revision History:
Jameel Hyder (JameelH) Re-organization 01-Jun-95
--*/
#include <precomp.h>
#pragma hdrstop
#include <stdarg.h>
//
// Define the module number for debug code.
//
#define MODULE_NUMBER MODULE_TIMER
VOID
NdisInitializeTimer(
IN OUT PNDIS_TIMER NdisTimer,
IN PNDIS_TIMER_FUNCTION TimerFunction,
IN PVOID FunctionContext
)
/*++
Routine Description:
Sets up an NdisTimer object, initializing the DPC in the timer to
the function and context.
Arguments:
NdisTimer - the timer object.
TimerFunction - Routine to start.
FunctionContext - Context of TimerFunction.
Return Value:
None.
--*/
{
INITIALIZE_TIMER(&NdisTimer->Timer);
//
// Initialize our dpc. If Dpc was previously initialized, this will
// reinitialize it.
//
INITIALIZE_DPC(&NdisTimer->Dpc,
(PKDEFERRED_ROUTINE)TimerFunction,
FunctionContext);
SET_DPC_IMPORTANCE(&NdisTimer->Dpc);
}
VOID
NdisSetTimer(
IN PNDIS_TIMER NdisTimer,
IN UINT MillisecondsToDelay
)
/*++
Routine Description:
Sets up TimerFunction to fire after MillisecondsToDelay.
Arguments:
NdisTimer - the timer object.
MillisecondsToDelay - Amount of time before TimerFunction is started.
Return Value:
None.
--*/
{
LARGE_INTEGER FireUpTime;
if ((NdisTimer->Dpc.DeferredRoutine == ndisMTimerDpc) ||
(NdisTimer->Dpc.DeferredRoutine == ndisMTimerDpcX))
{
NdisMSetTimer((PNDIS_MINIPORT_TIMER)NdisTimer, MillisecondsToDelay);
}
else
{
FireUpTime.QuadPart = Int32x32To64((LONG)MillisecondsToDelay, -10000);
//
// Set the timer
//
SET_TIMER(&NdisTimer->Timer, FireUpTime, &NdisTimer->Dpc);
}
}
VOID
NdisSetTimerEx(
IN PNDIS_TIMER NdisTimer,
IN UINT MillisecondsToDelay,
IN PVOID FunctionContext
)
/*++
Routine Description:
Sets up TimerFunction to fire after MillisecondsToDelay.
Arguments:
NdisTimer - the timer object.
MillisecondsToDelay - Amount of time before TimerFunction is started.
FunctionContext - This over-rides the one specified via NdisInitializeTimer
Return Value:
None.
--*/
{
LARGE_INTEGER FireUpTime;
NdisTimer->Dpc.DeferredContext = FunctionContext;
if ((NdisTimer->Dpc.DeferredRoutine == ndisMTimerDpc) ||
(NdisTimer->Dpc.DeferredRoutine == ndisMTimerDpcX))
{
NdisMSetTimer((PNDIS_MINIPORT_TIMER)NdisTimer, MillisecondsToDelay);
}
else
{
FireUpTime.QuadPart = Int32x32To64((LONG)MillisecondsToDelay, -10000);
//
// Set the timer
//
SET_TIMER(&NdisTimer->Timer, FireUpTime, &NdisTimer->Dpc);
}
}
VOID
NdisCancelTimer(
IN PNDIS_TIMER Timer,
OUT PBOOLEAN TimerCancelled
)
{
*TimerCancelled = KeCancelTimer(&Timer->Timer);
}