Update timer subsystem with multi-backend dispatch table
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in -59m27s
Builds / ExectOS (amd64, debug) (push) Successful in -59m23s
Builds / ExectOS (i686, debug) (push) Successful in -59m25s
Builds / ExectOS (i686, release) (push) Successful in -59m28s

This commit is contained in:
2026-05-07 19:50:37 +02:00
parent 4cb5b12e68
commit 689951cfde
11 changed files with 1243 additions and 113 deletions

View File

@@ -18,22 +18,56 @@ namespace HL
class Timer
{
private:
STATIC ULONG ProfilingInterval;
STATIC ULONG AcpiPmPerformanceCounter;
STATIC TIMER_TYPE ClockType;
STATIC ULONG FractionalIncrement;
STATIC PVOID HpetAddress;
STATIC ULONGLONG HpetFrequency;
STATIC KSPIN_LOCK PerformanceCounterLock;
STATIC ULONGLONG PerformanceFrequency;
STATIC ULONGLONG PitPerformanceCounter;
STATIC ULONG PitRollover;
STATIC BOOLEAN ProfilingEnabled;
STATIC ULONG ProfilingTicks;
STATIC ULONG RunningFraction;
STATIC ULONGLONG SystemPerformanceCounter;
STATIC ULONG TimeIncrement;
STATIC TIMER_CAPABILITIES TimerCapabilities;
STATIC ULONG TimerFrequency;
STATIC TIMER_ROUTINES TimerRoutines;
STATIC TIMER_TYPE TimerType;
public:
STATIC XTAPI VOID InitializeTimer(VOID);
STATIC XTAPI LARGE_INTEGER QueryPerformanceCounter(OUT PLARGE_INTEGER PerformanceFrequency);
STATIC XTAPI ULONG SetClockRate(IN ULONG Rate);
STATIC XTAPI ULONG_PTR SetProfileInterval(IN ULONG_PTR Interval);
STATIC XTAPI VOID StallExecution(IN ULONG MicroSeconds);
STATIC XTAPI VOID StartProfileInterrupt(IN KPROFILE_SOURCE ProfileSource);
STATIC XTAPI VOID StopProfileInterrupt(IN KPROFILE_SOURCE ProfileSource);
private:
STATIC XTAPI XTSTATUS CalibrateApicTimer();
STATIC XTAPI VOID InitializeApicTimer(VOID);
STATIC XTAPI VOID PitStallExecution(IN ULONG MicroSeconds);
STATIC XTAPI ULONGLONG CalibrateTscCounter(VOID);
STATIC XTAPI VOID ConfigureTimeIncrement(IN ULONGLONG BaseFrequency,
IN ULONGLONG HardwareDivider);
STATIC XTAPI XTSTATUS DetectHpet(VOID);
STATIC XTCDECL VOID HandleClockInterrupt(IN PKTRAP_FRAME TrapFrame);
STATIC XTCDECL VOID HandleClockIpiInterrupt(IN PKTRAP_FRAME TrapFrame);
STATIC XTAPI XTSTATUS InitializeApicTimer(VOID);
STATIC XTAPI XTSTATUS InitializeHpetTimer(VOID);
STATIC XTAPI XTSTATUS InitializePitTimer(VOID);
STATIC XTAPI VOID ProbeTimerType(VOID);
STATIC XTAPI ULONGLONG QueryPerformanceCounterAcpiPm(VOID);
STATIC XTAPI ULONGLONG QueryPerformanceCounterHpet(VOID);
STATIC XTAPI ULONGLONG QueryPerformanceCounterPit(VOID);
STATIC XTAPI ULONGLONG QueryPerformanceCounterTsc(VOID);
STATIC XTAPI VOID QueryTimerCapabilities(VOID);
STATIC XTAPI VOID StallExecution(IN ULONG MicroSeconds);
STATIC XTAPI ULONG SetClockRateApic(ULONG TargetIncrement);
STATIC XTAPI VOID StallExecutionAcpiPm(IN ULONG MicroSeconds);
STATIC XTAPI VOID StallExecutionPit(IN ULONG MicroSeconds);
STATIC XTAPI BOOLEAN ValidateTimerSupport(IN TIMER_TYPE TimerType,
IN BOOLEAN IsClock);
};
}