Files
Zag/src/platform/acpi/hpet.zig
T
Loïc Grégoire a7e319c922 Revert "refactor: time -> clock"
This reverts commit 44cf08e57c.
2026-04-19 08:38:45 -04:00

41 lines
1.1 KiB
Zig

const b = @import("root");
const std = @import("std");
const acpi = b.pl.acpi;
const mm = b.mm;
const ke = b.ke;
var hpet_timer: ke.TimeCounter = .{
.name = "HPET",
.quality = 50,
.frequency = 0, // Filled at runtime
.read_count = read_hpet,
.mask = std.math.maxInt(u64),
.p = 0,
.n = 0,
};
var hpet_regs: *volatile acpi.HpetRegs = undefined;
const femtos_per_s = 1_000_000_000_000_000;
pub fn init(hpet: *acpi.HpetTable) linksection(b.init) void {
hpet_regs = @ptrFromInt(mm.p2v(hpet.base_address.address));
hpet_timer.frequency = femtos_per_s / (b.mmio_read(u64, @intFromPtr(&hpet_regs.general_capabilities)) >> 32);
// Disable timer.
b.mmio_write(u64, @intFromPtr(&hpet_regs.general_configuration), 0);
// Reset counter.
b.mmio_write(u64, @intFromPtr(&hpet_regs.main_counter_value), 0);
// Enable timer.
b.mmio_write(u64, @intFromPtr(&hpet_regs.general_configuration), 1);
ke.time.register_source(&hpet_timer);
}
fn read_hpet() u64 {
return b.mmio_read(u64, @intFromPtr(&hpet_regs.main_counter_value));
}