PrOSess/kernel/include/apic/timer.h

61 lines
1.6 KiB
C++

#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