The Pedigree Project 0.1
kernel/machine/mach_virt/SchedulerTimer.h
1/*
2 * Copyright (c) 2026, Pedigree Developers
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted.
6 */
7
8#ifndef KERNEL_MACHINE_VIRT_SCHEDULERTIMER_H
9#define KERNEL_MACHINE_VIRT_SCHEDULERTIMER_H
10
11#include "pedigree/kernel/machine/SchedulerIrqHandler.h"
12#include "pedigree/kernel/machine/SchedulerTimer.h"
13#include "pedigree/kernel/machine/SchedulerTimerHandlerSlot.h"
14
16 public:
17 static VirtSchedulerTimer& instance();
18
19 bool initialise();
20 void uninitialise();
21 bool registerHandler(SchedulerTimerHandler* handler) override;
22 bool removeHandler(SchedulerTimerHandler* handler) override;
23 uint64_t nominalQuantumNs() const override;
24
25 private:
27 ~VirtSchedulerTimer() override;
28 void schedulerIrq(irq_id_t number, InterruptState& state) override;
29 uint64_t counter() const;
30 uint64_t ticksToNanoseconds(uint64_t ticks) const;
31
33 uint64_t m_Frequency;
34 uint64_t m_LastCount;
35 uint32_t m_IntervalTicks;
36 irq_id_t m_IrqId;
37 bool m_Initialised;
38
39 static VirtSchedulerTimer m_Instance;
40};
41
42#endif
bool registerHandler(SchedulerTimerHandler *handler) override
bool removeHandler(SchedulerTimerHandler *handler) override