2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
4 * FILE: subsystems/mvdm/ntvdm/clock.h
5 * PURPOSE: Clock for VDM
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
7 * Hermes Belusca-Maito (hermes.belusca@sfr.fr)
13 /* DEFINITIONS ****************************************************************/
15 #define HARDWARE_TIMER_ENABLED (1 << 0)
16 #define HARDWARE_TIMER_ONESHOT (1 << 1)
17 #define HARDWARE_TIMER_PRECISE (1 << 2)
19 /* Converts a frequency in Hertz into a duration in nanoseconds */
20 #define HZ_TO_NS(Freq) (ULONGLONG)(1000000000ULL / (ULONGLONG)(Freq))
22 typedef VOID (FASTCALL
*PHARDWARE_TIMER_PROC
)(ULONGLONG ElapsedTime
);
24 typedef struct _HARDWARE_TIMER
30 LARGE_INTEGER LastTick
;
31 PHARDWARE_TIMER_PROC Callback
;
32 } HARDWARE_TIMER
, *PHARDWARE_TIMER
;
34 /* FUNCTIONS ******************************************************************/
36 PHARDWARE_TIMER CreateHardwareTimer
39 ULONGLONG Delay
, /* nanoseconds */
40 PHARDWARE_TIMER_PROC Callback
42 VOID
EnableHardwareTimer(PHARDWARE_TIMER Timer
);
43 VOID
DisableHardwareTimer(PHARDWARE_TIMER Timer
);
44 VOID
SetHardwareTimerDelay(PHARDWARE_TIMER Timer
, ULONGLONG NewDelay
);
45 VOID
DestroyHardwareTimer(PHARDWARE_TIMER Timer
);
47 ULONGLONG
GetCycleCount(VOID
);
48 ULONGLONG
GetCycleSpeed(VOID
);
50 VOID
ClockUpdate(VOID
);
51 BOOLEAN
ClockInitialize(VOID
);