#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(ExtensionId::SET_TIMER), 0, stime_value); #else return ecall( static_cast(ExtensionId::SET_TIMER), 0, static_cast(stime_value), static_cast(stime_value >> 32)); #endif } SbiRet console_putchar(int ch) { return ecall( static_cast(ExtensionId::CONSOLE_PUTCHAR), 0, ch); } SbiRet console_getchar() { return ecall( static_cast(ExtensionId::CONSOLE_GETCHAR), 0); } SbiRet clear_ipmi() { return ecall( static_cast(ExtensionId::CLEAR_IPI), 0); } SbiRet send_ipmi(hart_mask_t hart_mask) { return ecall( static_cast(ExtensionId::SEND_IPI), 0, reinterpret_cast(hart_mask)); } SbiRet remote_fence_i(hart_mask_t hart_mask) { return ecall( static_cast(ExtensionId::REMOTE_FENCE_I), 0, reinterpret_cast(hart_mask)); } SbiRet remote_sfence_vma( hart_mask_t hart_mask, sbiword_t start, sbiword_t size) { return ecall( static_cast(ExtensionId::REMOTE_SFENCE_VMA), 0, reinterpret_cast(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(ExtensionId::REMOTE_SFENCE_VMA_ASID), 0, reinterpret_cast(hart_mask), start, size, asid); } void shutdown() { ecall( static_cast(ExtensionId::SHUTDOWN), 0); // This should never be reached, explode if it is __builtin_trap(); while(1); } } // End namespace opensbi::legacy } // End namespace drivers