From 462eaa9531b9e62916b02ab52759cd070de755d3 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Wed, 14 Apr 2021 14:34:38 +0200 Subject: Implemented some I/O interfaces --- kernel/drivers/timer.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) (limited to 'kernel/drivers/timer.c') diff --git a/kernel/drivers/timer.c b/kernel/drivers/timer.c index 2a7ca2a..294df84 100644 --- a/kernel/drivers/timer.c +++ b/kernel/drivers/timer.c @@ -3,7 +3,10 @@ #include #include #include +#include +#include #include +#include #include static u32 timer_ticks = 0; @@ -42,15 +45,6 @@ void timer_wait(u32 ticks) } } -// Install timer handler into IRQ0 -CLEAR void timer_install(void) -{ - /* hpet_install(10000); // TODO: Find optimal femtosecond period */ - /* if (!hpet) */ - timer_phase(1000); - irq_install_handler(0, timer_handler); -} - CLEAR void scheduler_enable(void) { call_scheduler = 1; @@ -62,3 +56,26 @@ CLEAR void scheduler_disable(void) call_scheduler = 0; irq_install_handler(0, timer_handler); } + +static res timer_read(void *buf, u32 offset, u32 count) +{ + UNUSED(offset); + + u32 stamp = rtc_stamp(); + memcpy_user(buf, &stamp, MIN(count, sizeof(stamp))); + + return MIN(count, sizeof(stamp)); +} + +// Install timer handler into IRQ0 +CLEAR void timer_install(void) +{ + /* hpet_install(10000); // TODO: Find optimal femtosecond period */ + /* if (!hpet) */ + timer_phase(1000); + irq_install_handler(0, timer_handler); + + struct io_dev *dev = zalloc(sizeof(*dev)); + dev->read = timer_read; + io_add(IO_TIMER, dev); +} -- cgit v1.2.3