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

@@ -1,15 +1,14 @@
#pragma once
#include <BAN/Formatter.h>
#include <kernel/PIT.h>
#define dprintln(...) \
do { \
Debug::DebugLock::lock(); \
BAN::Formatter::print(Debug::putchar, "[{5}.{3}] {}:{}: ", PIT::ms_since_boot() / 1000, PIT::ms_since_boot() % 1000, __FILE__, __LINE__); \
BAN::Formatter::print(Debug::putchar, __VA_ARGS__); \
BAN::Formatter::print(Debug::putchar, "\r\n"); \
Debug::DebugLock::unlock(); \
#define dprintln(...) \
do { \
Debug::DebugLock::lock(); \
Debug::print_prefix(__FILE__, __LINE__); \
BAN::Formatter::print(Debug::putchar, __VA_ARGS__); \
BAN::Formatter::print(Debug::putchar, "\r\n"); \
Debug::DebugLock::unlock(); \
} while(false)
#define dwarnln(...) \
@@ -36,6 +35,7 @@ namespace Debug
{
void dump_stack_trace();
void putchar(char);
void print_prefix(const char*, int);
class DebugLock
{

View File

@@ -1,14 +0,0 @@
#pragma once
#include <stdint.h>
#define PIT_IRQ 0
namespace PIT
{
uint64_t ms_since_boot();
void initialize();
void sleep(uint64_t);
}

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;
};
}