QTechOS/kernel/drivers/opensbi/extensions/legacy.cpp
Quantum c24628ab2a
Formatting
It would be nice if I would stay consistent with namespace formatting

Maybe I should use a real linter or something...
2022-01-23 20:27:14 -05:00

106 lines
2.6 KiB
C++

#include "opensbi/extensions/legacy.h"
namespace drivers {
namespace opensbi::legacy {
namespace {
enum class ExtensionId {
SET_TIMER,
CONSOLE_PUTCHAR,
CONSOLE_GETCHAR,
CLEAR_IPI,
SEND_IPI,
REMOTE_FENCE_I,
REMOTE_SFENCE_VMA,
REMOTE_SFENCE_VMA_ASID,
SHUTDOWN
};
}
SbiRet set_timer(std::uint64_t stime_value) {
#if __riscv_xlen == 64
return ecall(
static_cast<sbiword_t>(ExtensionId::SET_TIMER),
0,
stime_value);
#else
return ecall(
static_cast<sbiword_t>(ExtensionId::SET_TIMER),
0,
static_cast<uint32_t>(stime_value),
static_cast<uint32_t>(stime_value >> 32));
#endif
}
SbiRet console_putchar(int ch) {
return ecall(
static_cast<sbiword_t>(ExtensionId::CONSOLE_PUTCHAR),
0,
ch);
}
SbiRet console_getchar() {
return ecall(
static_cast<sbiword_t>(ExtensionId::CONSOLE_GETCHAR),
0);
}
SbiRet clear_ipmi() {
return ecall(
static_cast<sbiword_t>(ExtensionId::CLEAR_IPI),
0);
}
SbiRet send_ipmi(hart_mask_t hart_mask) {
return ecall(
static_cast<sbiword_t>(ExtensionId::SEND_IPI),
0,
reinterpret_cast<sbiword_t>(hart_mask));
}
SbiRet remote_fence_i(hart_mask_t hart_mask) {
return ecall(
static_cast<sbiword_t>(ExtensionId::REMOTE_FENCE_I),
0,
reinterpret_cast<sbiword_t>(hart_mask));
}
SbiRet remote_sfence_vma(
hart_mask_t hart_mask,
sbiword_t start,
sbiword_t size) {
return ecall(
static_cast<sbiword_t>(ExtensionId::REMOTE_SFENCE_VMA),
0,
reinterpret_cast<sbiword_t>(hart_mask),
start,
size);
}
SbiRet remote_sfence_vma_asid(
hart_mask_t hart_mask,
sbiword_t start,
sbiword_t size,
sbiword_t asid) {
return ecall(
static_cast<sbiword_t>(ExtensionId::REMOTE_SFENCE_VMA_ASID),
0,
reinterpret_cast<sbiword_t>(hart_mask),
start,
size,
asid);
}
void shutdown() {
ecall(
static_cast<sbiword_t>(ExtensionId::SHUTDOWN),
0);
// This should never be reached, explode if it is
__builtin_trap();
while(1);
}
} // End namespace opensbi::legacy
} // End namespace drivers