diff options
author | Kimapr <kimapr@mail.ru> | 2023-12-20 14:51:37 +0500 |
---|---|---|
committer | Lizzy Fleckenstein <lizzy@vlhl.dev> | 2023-12-21 22:54:34 +0100 |
commit | 2834bff2cf6131202a788b59a5fd81994e1ed5aa (patch) | |
tree | 9a1ace6488e16d15af474cd027f2387c91ebbc12 /stage3/clock.c | |
parent | 43a856b5d40ceb570af7755d9f1222093a48aa64 (diff) | |
download | cuddles-2834bff2cf6131202a788b59a5fd81994e1ed5aa.tar.xz |
rtc clock driver
Diffstat (limited to 'stage3/clock.c')
-rw-r--r-- | stage3/clock.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/stage3/clock.c b/stage3/clock.c new file mode 100644 index 0000000..372d3da --- /dev/null +++ b/stage3/clock.c @@ -0,0 +1,34 @@ +#include "clock.h" +#include "pic.h" +#include "font.h" +#include "io.h" +#include "thread.h" +#include "heap.h" +#include "halt.h" + +u64 monoclock_rtc_time = 0; + +void clock_init() +{ + outb(0x70, 0x8B); + char prev = inb(0x71); + outb(0x70, 0x8B); + outb(0x71, prev | 0x40); + unmask_irq(8); +} + +u64 clock_monotonic_coarse() { + return monoclock_rtc_time; +} + +u64 clock_monotonic() +{ + return monoclock_rtc_time; // TODO: high resolution clock +} + +u64 clock_cycles() +{ + u64 lo,hi; + asm volatile("rdtsc\n\t": "=a" (lo), "=d" (hi)); + return lo | hi << 32; +} |