Kernel: Rework interrupt mechanism

All interruptrable classes now inherit from Interruptable which
has methdo handle_irq which is called on a interrupt.
This commit is contained in:
2023-10-05 18:53:45 +03:00
parent 68a913c838
commit 27eb5af6f0
23 changed files with 716 additions and 706 deletions

View File

@@ -1,11 +1,12 @@
#pragma once
#include <kernel/InterruptController.h>
#include <kernel/Timer/Timer.h>
namespace Kernel
{
class HPET final : public Timer
class HPET final : public Timer, public Interruptable
{
public:
static BAN::ErrorOr<BAN::UniqPtr<HPET>> create(bool force_pic);
@@ -13,6 +14,8 @@ namespace Kernel
virtual uint64_t ms_since_boot() const override;
virtual timespec time_since_boot() const override;
virtual void handle_irq() override;
private:
HPET() = default;
BAN::ErrorOr<void> initialize(bool force_pic);

View File

@@ -1,14 +1,12 @@
#pragma once
#include <kernel/InterruptController.h>
#include <kernel/Timer/Timer.h>
#include <stdint.h>
#define PIT_IRQ 0
namespace Kernel
{
class PIT final : public Timer
class PIT final : public Timer, public Interruptable
{
public:
static BAN::ErrorOr<BAN::UniqPtr<PIT>> create();
@@ -16,8 +14,13 @@ namespace Kernel
virtual uint64_t ms_since_boot() const override;
virtual timespec time_since_boot() const override;
virtual void handle_irq() override;
private:
void initialize();
private:
volatile uint64_t m_system_time { 0 };
};
}