Kernel: Rewrite HPET code

Now the set timer frequency actually works... :D
This commit is contained in:
2024-02-13 17:59:48 +02:00
parent 420a7b60ca
commit 00662bad46
2 changed files with 234 additions and 98 deletions

View File

@@ -6,10 +6,13 @@
namespace Kernel
{
struct HPETRegisters;
class HPET final : public Timer, public Interruptable
{
public:
static BAN::ErrorOr<BAN::UniqPtr<HPET>> create(bool force_pic);
~HPET();
virtual uint64_t ms_since_boot() const override;
virtual uint64_t ns_since_boot() const override;
@@ -21,11 +24,19 @@ namespace Kernel
HPET() = default;
BAN::ErrorOr<void> initialize(bool force_pic);
void write_register(ptrdiff_t reg, uint64_t value) const;
uint64_t read_register(ptrdiff_t reg) const;
volatile HPETRegisters& registers();
const volatile HPETRegisters& registers() const;
uint64_t read_main_counter() const;
private:
uint64_t m_counter_tick_period_fs { 0 };
bool m_is_64bit { false };
uint64_t m_last_ticks { 0 };
uint32_t m_32bit_wraps { 0 };
uint32_t m_ticks_per_s { 0 };
vaddr_t m_mmio_base { 0 };
};