[NTVDM] Missed this file.
[reactos.git] / subsystems / mvdm / ntvdm / clock.h
1 /*
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)
8 */
9
10 #ifndef _CLOCK_H_
11 #define _CLOCK_H_
12
13 /* DEFINITIONS ****************************************************************/
14
15 #define HARDWARE_TIMER_ENABLED (1 << 0)
16 #define HARDWARE_TIMER_ONESHOT (1 << 1)
17 #define HARDWARE_TIMER_PRECISE (1 << 2)
18
19 /* Converts a frequency in Hertz into a duration in nanoseconds */
20 #define HZ_TO_NS(Freq) (ULONGLONG)(1000000000ULL / (ULONGLONG)(Freq))
21
22 typedef VOID (FASTCALL *PHARDWARE_TIMER_PROC)(ULONGLONG ElapsedTime);
23
24 typedef struct _HARDWARE_TIMER
25 {
26 LIST_ENTRY Link;
27 ULONG Flags;
28 LONG EnableCount;
29 ULONGLONG Delay;
30 LARGE_INTEGER LastTick;
31 PHARDWARE_TIMER_PROC Callback;
32 } HARDWARE_TIMER, *PHARDWARE_TIMER;
33
34 /* FUNCTIONS ******************************************************************/
35
36 extern ULONGLONG CurrentCycleCount;
37 extern ULONGLONG CurrentIps;
38
39 PHARDWARE_TIMER CreateHardwareTimer
40 (
41 ULONG Flags,
42 ULONGLONG Delay, /* nanoseconds */
43 PHARDWARE_TIMER_PROC Callback
44 );
45
46 VOID EnableHardwareTimer(PHARDWARE_TIMER Timer);
47 VOID DisableHardwareTimer(PHARDWARE_TIMER Timer);
48 VOID SetHardwareTimerDelay(PHARDWARE_TIMER Timer, ULONGLONG NewDelay);
49 VOID DestroyHardwareTimer(PHARDWARE_TIMER Timer);
50
51 VOID ClockUpdate(VOID);
52 BOOLEAN ClockInitialize(VOID);
53
54 #endif /* _CLOCK_H_ */