diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-01-04 14:05:49 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-01-04 14:05:49 +0800 |
| commit | d3cf3f08d1343d6b265516d5a79ce2d197b59d26 (patch) | |
| tree | a4bbae6cff94fa69eea30db865267b211eb4c86b /src/kernel/timer.cc | |
| parent | 210025560c80b48af4875af199f183ad709e3bf0 (diff) | |
| download | lume-d3cf3f08d1343d6b265516d5a79ce2d197b59d26.tar.gz lume-d3cf3f08d1343d6b265516d5a79ce2d197b59d26.tar.xz | |
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.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 |
