From 4a179be45449a88ec80e19e2d89da05a5b86ba78 Mon Sep 17 00:00:00 2001 From: corigan01 Date: Sat, 11 Jan 2025 21:44:06 -0600 Subject: [PATCH] Kernel: Add kernel tick for counting time --- kernel/src/main.rs | 2 ++ kernel/src/timer.rs | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/kernel/src/main.rs b/kernel/src/main.rs index 6bea59fa..3a7580ff 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -41,6 +41,7 @@ use mem::{ pmm::Pmm, }; use serial::{Serial, baud::SerialBaud}; +use timer::kernel_ticks; use util::bytes::HumanBytes; #[global_allocator] @@ -80,5 +81,6 @@ fn main(kbh: &KernelBootHeader) { logln!("Init PhysMemoryManager"); let _pmm = Pmm::new(kbh.phys_mem_map).unwrap(); + logln!("Finished in {}ms", kernel_ticks()); loop {} } diff --git a/kernel/src/timer.rs b/kernel/src/timer.rs index 7e52f2ae..581ddec8 100644 --- a/kernel/src/timer.rs +++ b/kernel/src/timer.rs @@ -23,6 +23,8 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +use core::sync::atomic::{AtomicU64, Ordering}; + use arch::{ critcal_section, idt64::InterruptInfo, @@ -46,7 +48,7 @@ pub fn init_timer() { ); // Set the trigger time - logln!("({}Hz)", set_pit_hz(TIMER_HZ)); + log!("({}Hz)", set_pit_hz(TIMER_HZ)); // Attach our IRQ attach_irq_handler(pit_interrupt_handler, 0); @@ -54,4 +56,12 @@ pub fn init_timer() { logln!("OK"); } -fn pit_interrupt_handler(_args: &InterruptInfo) {} +static KERNEL_TICKS: AtomicU64 = AtomicU64::new(0); + +fn pit_interrupt_handler(_args: &InterruptInfo) { + KERNEL_TICKS.fetch_add(1, Ordering::AcqRel); +} + +pub fn kernel_ticks() -> u64 { + KERNEL_TICKS.load(Ordering::Relaxed) +}