85 lines
2.2 KiB
C++
85 lines
2.2 KiB
C++
#pragma once
|
|
|
|
#include "acpi/discovery.h"
|
|
|
|
namespace apic {
|
|
|
|
struct duration_t {
|
|
uint64_t timer_count;
|
|
};
|
|
|
|
struct timestamp_t {
|
|
uint64_t timer_count;
|
|
};
|
|
|
|
struct seconds_nanoseconds_t {
|
|
uint64_t seconds;
|
|
uint64_t nanoseconds;
|
|
};
|
|
|
|
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 bool operator==(duration_t left, duration_t right) {
|
|
return left.timer_count == right.timer_count;
|
|
}
|
|
|
|
constexpr bool operator<(duration_t left, duration_t right) {
|
|
return left.timer_count < right.timer_count;
|
|
}
|
|
|
|
constexpr bool operator<=(duration_t left, duration_t right) {
|
|
return left.timer_count <= right.timer_count;
|
|
}
|
|
|
|
constexpr bool operator>(duration_t left, duration_t right) {
|
|
return left.timer_count > right.timer_count;
|
|
}
|
|
|
|
constexpr bool operator>=(duration_t left, duration_t right) {
|
|
return left.timer_count >= right.timer_count;
|
|
}
|
|
|
|
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::discovery_result_t& discovery);
|
|
|
|
duration_t seconds(uint64_t count);
|
|
duration_t milliseconds(uint64_t count);
|
|
duration_t microseconds(uint64_t count);
|
|
duration_t nanoseconds(uint64_t count);
|
|
|
|
seconds_nanoseconds_t toSecondsAndNanoseconds(duration_t duration);
|
|
|
|
void busyWait(duration_t duration);
|
|
|
|
timestamp_t now();
|
|
|
|
} // namespace apic
|