#pragma once #include "acpi/madt.h" namespace apic { struct duration_t { uint64_t timer_count; }; struct timestamp_t { uint64_t timer_count; }; constexpr duration_t operator+(duration_t left, duration_t right) { return duration_t{left.timer_count + right.timer_count}; } constexpr duration_t operator-(duration_t left, duration_t right) { return duration_t{left.timer_count - right.timer_count}; } constexpr duration_t operator*(duration_t duration, uint64_t scalar) { return duration_t{duration.timer_count * scalar}; } constexpr duration_t operator*(uint64_t scalar, duration_t duration) { return duration_t{duration.timer_count * scalar}; } constexpr timestamp_t operator+(timestamp_t timestamp, duration_t duration) { return timestamp_t{timestamp.timer_count + duration.timer_count}; } constexpr timestamp_t operator+(duration_t duration, timestamp_t timestamp) { return timestamp_t{timestamp.timer_count + duration.timer_count}; } constexpr timestamp_t operator-(timestamp_t timestamp, duration_t duration) { return timestamp_t{timestamp.timer_count - duration.timer_count}; } constexpr duration_t operator-(timestamp_t left, timestamp_t right) { return duration_t{left.timer_count - right.timer_count}; } bool calibrateTimer(const acpi::Madt& madt); duration_t seconds(uint64_t count); duration_t milliseconds(uint64_t count); duration_t microseconds(uint64_t count); duration_t nanoseconds(uint64_t count); timestamp_t now(); // TODO: when dynamic allocation and lists are available // struct Timer {}; // // Timer getCoreTimerInstance(); } // namespace apic