Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
atktimer.h
Abstract:
This module contains routines to schedule timer events.
Author:
Jameel Hyder (jameelh@microsoft.com) Nikhil Kamkolkar (nikhilk@microsoft.com)
Revision History: 19 Jun 1992 Initial Version
Notes: Tab stop: 4 --*/
#ifndef _ATKTIMER_
#define _ATKTIMER_
struct _TimerList;
typedef LONG (FASTCALL * TIMER_ROUTINE)(IN struct _TimerList *pTimer, IN BOOLEAN TimerShuttingDown);
#define TMR_SIGNATURE *(PULONG)"ATMR"
#if DBG
#define VALID_TMR(pTmr) (((pTmr) != NULL) && \
((pTmr)->tmr_Signature == TMR_SIGNATURE)) #else
#define VALID_TMR(pTmr) ((pTmr) != NULL)
#endif
typedef struct _TimerList { #if DBG
ULONG tmr_Signature; #endif
struct _TimerList * tmr_Next; // Link to next
struct _TimerList ** tmr_Prev; // Link to prev
TIMER_ROUTINE tmr_Routine; // Timer routine
SHORT tmr_AbsTime; // Absolute time, for re-enqueue
SHORT tmr_RelDelta; // Relative to the previous entry
union { struct { BOOLEAN tmr_Queued; // TRUE, if currently queued
BOOLEAN tmr_Cancelled; // TRUE, if cancelled
BOOLEAN tmr_Running; // TRUE, if currently running
BOOLEAN tmr_CancelIt; // TRUE, if cancel called while active
}; DWORD tmr_Bools; // For clearing all
}; } TIMERLIST, *PTIMERLIST;
extern NTSTATUS AtalkTimerInit( VOID );
/*** AtalkTimerInitialize
* * Initialize the timer list structure. extern VOID AtalkTimerInitialize( IN PTIMERLIST pList, // TimerList to use for queuing
IN TIMER_ROUTINE TimerRoutine, // TimerRoutine
IN SHORT DeltaTime // Schedule after this much time
); */
#if DBG
#define AtalkTimerInitialize(pList, TimerRoutine, DeltaTime) \
{ \ (pList)->tmr_Signature = TMR_SIGNATURE; \ (pList)->tmr_Routine = TimerRoutine; \ (pList)->tmr_AbsTime = DeltaTime; \ (pList)->tmr_Bools = 0; \ } #else
#define AtalkTimerInitialize(pList, TimerRoutine, DeltaTime) \
{ \ (pList)->tmr_Routine = TimerRoutine; \ (pList)->tmr_AbsTime = DeltaTime; \ (pList)->tmr_Bools = 0; \ } #endif
extern VOID FASTCALL AtalkTimerScheduleEvent( IN PTIMERLIST pTimerList // TimerList to use for queuing
);
extern VOID AtalkTimerFlushAndStop( VOID );
extern BOOLEAN FASTCALL AtalkTimerCancelEvent( IN PTIMERLIST pTimerList, // TimerList used for queuing
IN PDWORD pdwOldState // return old state
);
#define AtalkTimerSetAbsTime(pTimerList, AbsTime) \
{ \ ASSERT(!(pTimerList)->tmr_Queued); \ (pTimerList)->tmr_AbsTime = AbsTime; \ }
extern LONG AtalkTimerCurrentTick;
#define AtalkGetCurrentTick() AtalkTimerCurrentTick
// Keep this at 100ms unit
#define ATALK_TIMER_FACTOR 10 // i.e. 10 ticks per second
#define ATALK_TIMER_TICK -1000000L // 100ms in 100ns units
#define ATALK_TIMER_NO_REQUEUE 0 // Do not re-enqueue
#define ATALK_TIMER_REQUEUE -1 // Re-enqueue at current count
#define ATALK_TIMER_QUEUED 1
#define ATALK_TIMER_RUNNING 2
#define ATALK_TIMER_CANCELLED 3
extern PTIMERLIST atalkTimerList; extern ATALK_SPIN_LOCK atalkTimerLock; extern LARGE_INTEGER atalkTimerTick; extern KTIMER atalkTimer; extern KDPC atalkTimerDpc; extern KEVENT atalkTimerStopEvent; extern BOOLEAN atalkTimerStopped; // Set to TRUE if timer system stopped
extern BOOLEAN atalkTimerRunning; // Set to TRUE when timer Dpc is running
LOCAL VOID atalkTimerDpcRoutine( IN PKDPC pKDpc, IN PVOID pContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2 );
LOCAL VOID FASTCALL atalkTimerEnqueue( IN PTIMERLIST pList );
#endif // _ATKTIMER_
|