summaryrefslogtreecommitdiff
path: root/src/kernel/timer.cc
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-01-04 14:12:24 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-01-04 14:12:24 +0800
commita64d25c07b31d57f8706073e11cd774d0880d6dd (patch)
treea4bbae6cff94fa69eea30db865267b211eb4c86b /src/kernel/timer.cc
parent210025560c80b48af4875af199f183ad709e3bf0 (diff)
parentd3cf3f08d1343d6b265516d5a79ce2d197b59d26 (diff)
downloadlume-a64d25c07b31d57f8706073e11cd774d0880d6dd.tar.gz
lume-a64d25c07b31d57f8706073e11cd774d0880d6dd.tar.xz
Merge pull request #5 from Richard-Qin-001/dev/file-system
feat(file-system): implement read and write FAT32 File System and basic shell
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