Source code of Windows XP (NT5)
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) 1997-2001 Microsoft Corporation
Module Name:
timer.h
Abstract:
Contains timer management structures.
Author:
Sanjay Anand (SanjayAn) 26-May-1997 ChunYe
Environment:
Kernel mode
Revision History:
--*/
#ifndef _TIMER_H
#define _TIMER_H
#if DBG
#define atl_signature 'LTA '
#endif // DBG
/*++
ULONG SECONDS_TO_LONG_TICKS( IN ULONG Seconds ) Convert from seconds to "long duration timer ticks" --*/ #define SECONDS_TO_SUPER_LONG_TICKS(Seconds) ((Seconds)/3600)
/*++
ULONG SECONDS_TO_LONG_TICKS( IN ULONG Seconds ) Convert from seconds to "long duration timer ticks" --*/ #define SECONDS_TO_LONG_TICKS(Seconds) ((Seconds)/60)
/*++
ULONG SECONDS_TO_SHORT_TICKS( IN ULONG Seconds ) Convert from seconds to "short duration timer ticks" --*/ #define SECONDS_TO_SHORT_TICKS(Seconds) (Seconds)
/*++
VOID IPSEC_INIT_SYSTEM_TIMER( IN PNDIS_TIMER pTimer, IN PNDIS_TIMER_FUNCTON pFunc, IN PVOID Context ) --*/ #define IPSEC_INIT_SYSTEM_TIMER(pTimer, pFunc, Context) \
NdisInitializeTimer(pTimer, (PNDIS_TIMER_FUNCTION)(pFunc), (PVOID)Context)
/*++
VOID IPSEC_START_SYSTEM_TIMER( IN PNDIS_TIMER pTimer, IN UINT PeriodInSeconds ) --*/ #define IPSEC_START_SYSTEM_TIMER(pTimer, PeriodInSeconds) \
NdisSetTimer(pTimer, (UINT)(PeriodInSeconds * 1000))
/*++
VOID IPSEC_STOP_SYSTEM_TIMER( IN PNDIS_TIMER pTimer ) --*/ #define IPSEC_STOP_SYSTEM_TIMER(pTimer) \
{ \ BOOLEAN WasCancelled; \ NdisCancelTimer(pTimer, &WasCancelled); \ }
/*++
BOOLEAN IPSEC_IS_TIMER_ACTIVE( IN PIPSEC_TIMER pArpTimer ) --*/ #define IPSEC_IS_TIMER_ACTIVE(pTmr) ((pTmr)->pTimerList != (PIPSEC_TIMER_LIST)NULL)
/*++
ULONG IPSEC_GET_TIMER_DURATION( IN PIPSEC_TIMER pTimer ) --*/ #define IPSEC_GET_TIMER_DURATION(pTmr) ((pTmr)->Duration)
//
// Timer management using Timing Wheels (adapted from IPSEC)
//
struct _IPSEC_TIMER ; struct _IPSEC_TIMER_LIST ;
//
// Timeout Handler prototype
//
typedef VOID (*IPSEC_TIMEOUT_HANDLER) ( IN struct _IPSEC_TIMER * pTimer, IN PVOID Context );
//
// An IPSEC_TIMER structure is used to keep track of each timer
// in the IPSEC module.
//
typedef struct _IPSEC_TIMER { struct _IPSEC_TIMER * pNextTimer; struct _IPSEC_TIMER * pPrevTimer; struct _IPSEC_TIMER * pNextExpiredTimer; // Used to chain expired timers
struct _IPSEC_TIMER_LIST * pTimerList; // NULL iff this timer is inactive
ULONG Duration; // In seconds
ULONG LastRefreshTime; IPSEC_TIMEOUT_HANDLER TimeoutHandler; PVOID Context; // To be passed to timeout handler
} IPSEC_TIMER, *PIPSEC_TIMER;
//
// NULL pointer to IPSEC Timer
//
#define NULL_PIPSEC_TIMER ((PIPSEC_TIMER)NULL)
//
// Control structure for a timer wheel. This contains all information
// about the class of timers that it implements.
//
typedef struct _IPSEC_TIMER_LIST { #if DBG
ULONG atl_sig; #endif // DBG
PIPSEC_TIMER pTimers; // List of timers
ULONG TimerListSize; // Length of above
ULONG CurrentTick; // Index into above
ULONG TimerCount; // Number of running timers
ULONG MaxTimer; // Max timeout value for this
NDIS_TIMER NdisTimer; // System support
UINT TimerPeriod; // Interval between ticks
PVOID ListContext; // Used as a back pointer to the
// Interface structure
} IPSEC_TIMER_LIST, *PIPSEC_TIMER_LIST;
//
// Timer Classes
//
typedef enum { IPSEC_CLASS_SHORT_DURATION, IPSEC_CLASS_LONG_DURATION, IPSEC_CLASS_SUPER_LONG_DURATION, IPSEC_CLASS_MAX } IPSEC_TIMER_CLASS;
//
// Timer configuration.
//
#define IPSEC_MAX_TIMER_SHORT_DURATION (60) // 60 seconds
#define IPSEC_MAX_TIMER_LONG_DURATION (60*60) // 1 hour in secs
#define IPSEC_MAX_TIMER_SUPER_LONG_DURATION (48*3600) // 48 hours in secs
#define IPSEC_SHORT_DURATION_TIMER_PERIOD (1) // 1 second
#define IPSEC_LONG_DURATION_TIMER_PERIOD (1*60) // 1 minute
#define IPSEC_SUPER_LONG_DURATION_TIMER_PERIOD (1*3600) // 1 hour
#define IPSEC_SA_EXPIRY_TIME (1*60) // 1 minute in secs
#define IPSEC_REAPER_TIME (60) // 60 secs
BOOLEAN IPSecInitTimer( );
VOID IPSecStartTimer( IN PIPSEC_TIMER pTimer, IN IPSEC_TIMEOUT_HANDLER TimeoutHandler, IN ULONG SecondsToGo, IN PVOID Context );
BOOLEAN IPSecStopTimer( IN PIPSEC_TIMER pTimer );
VOID IPSecTickHandler( IN PVOID SystemSpecific1, IN PVOID Context, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3 );
#endif _TIMER_H
|