Update timer subsystem with multi-backend dispatch table
All checks were successful
All checks were successful
This commit is contained in:
@@ -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);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user