summaryrefslogtreecommitdiff
path: root/src/kernel/timer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/timer.cc')
-rw-r--r--src/kernel/timer.cc38
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