diff options
Diffstat (limited to 'src/kernel/timer.cc')
| -rw-r--r-- | src/kernel/timer.cc | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/src/kernel/timer.cc b/src/kernel/timer.cc index fb871d5..3cbf11e 100644 --- a/src/kernel/timer.cc +++ b/src/kernel/timer.cc @@ -1,15 +1,16 @@ #include "common/types.h" #include "kernel/config.h" - -namespace SBI -{ - void set_timer(uint64 stime_value); -} +#include "kernel/spinlock.h" +#include "kernel/proc.h" +#include "kernel/sbi.h" #define INTERVAL 1000000 namespace Timer { + uint64 ticks; + Spinlock tickslock; + uint64 get_time() { uint64 time; @@ -31,4 +32,31 @@ namespace Timer sie |= (1L << 5); asm volatile("csrw sie, %0" : : "r"(sie)); } + + void tick() + { + tickslock.acquire(); + ticks++; + ProcManager::wakeup(&ticks); + tickslock.release(); + set_next_trigger(); + } + + uint64 get_ticks() + { + tickslock.acquire(); + uint64 t = ticks; + tickslock.release(); + return t; + } + + Spinlock *get_lock() + { + return &tickslock; + } + + void *get_tick_chan() + { + return &ticks; + } }
\ No newline at end of file |
