diff --git a/kernel/drivers/opensbi/extensions/timer.cpp b/kernel/drivers/opensbi/extensions/timer.cpp new file mode 100644 index 0000000..8bdb3b9 --- /dev/null +++ b/kernel/drivers/opensbi/extensions/timer.cpp @@ -0,0 +1,25 @@ +#include "opensbi/extensions/timer.h" + +namespace drivers { +namespace opensbi::timer { + + namespace { + enum class ExtensionId { + TIMER = 0x54494D45 + }; + + enum class FunctionId { + SET_TIMER, + }; + } + + SbiRet set_timer(uint64_t stime_value) { + return ecall( + static_cast(ExtensionId::TIMER), + static_cast(FunctionId::SET_TIMER), + stime_value); + } + +} // End namespace opensbi::timer +} // End namespace drivers + diff --git a/kernel/drivers/opensbi/include/opensbi/extensions/timer.h b/kernel/drivers/opensbi/include/opensbi/extensions/timer.h new file mode 100644 index 0000000..6275e45 --- /dev/null +++ b/kernel/drivers/opensbi/include/opensbi/extensions/timer.h @@ -0,0 +1,11 @@ +#pragma once + +#include "opensbi/opensbi.h" + +namespace drivers { +namespace opensbi::timer { + + SbiRet set_timer(uint64_t stime_value); + +} // End namespace opensbi::timer +} // End namespace drivers diff --git a/kernel/drivers/opensbi/meson.build b/kernel/drivers/opensbi/meson.build index 33526ea..b05f485 100644 --- a/kernel/drivers/opensbi/meson.build +++ b/kernel/drivers/opensbi/meson.build @@ -1,7 +1,9 @@ kernel_sources += [ files( 'opensbi.cpp', - 'extensions/legacy.cpp' + 'extensions/legacy.cpp', + 'extensions/base.cpp', + 'extensions/timer.cpp' ), ]