Kernel: Start work on abstracting Timers

This commit is contained in:
Bananymous
2023-08-04 10:22:20 +03:00
parent dd17124c77
commit 659adb89a6
15 changed files with 163 additions and 46 deletions

View File

@@ -0,0 +1,23 @@
#pragma once
#include <kernel/Timer/Timer.h>
#include <stdint.h>
#define PIT_IRQ 0
namespace Kernel
{
class PIT final : public Timer
{
public:
static BAN::ErrorOr<BAN::UniqPtr<PIT>> create();
virtual uint64_t ms_since_boot() const override;
virtual void sleep(uint64_t) const override;
private:
void initialize();
};
}

View File

@@ -0,0 +1,36 @@
#pragma once
#include <BAN/UniqPtr.h>
#include <BAN/Vector.h>
namespace Kernel
{
class Timer
{
public:
virtual ~Timer() {};
virtual uint64_t ms_since_boot() const = 0;
virtual void sleep(uint64_t) const = 0;
};
class TimerHandler
{
public:
static void initialize();
static TimerHandler& get();
static bool is_initialized();
uint64_t ms_since_boot() const;
void sleep(uint64_t) const;
private:
TimerHandler() = default;
void initialize_timers();
private:
BAN::Vector<BAN::UniqPtr<Timer>> m_timers;
};
}