#ifndef _SBI_SYSCALLS_H_
#define _SBI_SYSCALLS_H_
#include <stdint.h>
enum {
SBI_SUCCESS = 0,
SBI_ERR_FAILED = -1,
SBI_ERR_NOT_SUPPORTED = -2,
SBI_ERR_INVALID_PARAM = -3,
SBI_ERR_DENIED = -4,
SBI_ERR_INVALID_ADDRESS = -5,
SBI_ERR_ALREADY_AVAILABLE = -6,
};
struct sbiret {
long error;
long value;
};
enum {
SBI_HART_STATE_STARTED = 0,
SBI_HART_STATE_STOPPED = 1,
SBI_HART_STATE_START_PENDING = 2,
SBI_HART_STATE_STOP_PENDING = 3,
SBI_HART_STATE_SUSPENDED = 4,
SBI_HART_STATE_SUSPEND_PENDING = 5,
SBI_HART_STATE_RESUME_PENDING = 6,
};
enum {
SBI_RESET_TYPE_SHUTDOWN = 0,
SBI_RESET_TYPE_COLD_REBOOT = 1,
SBI_RESET_TYPE_WARM_REBOOT = 2,
};
enum {
SBI_RESET_REASON_NONE = 0,
SBI_RESET_REASON_SYSTEM_FAILURE = 1,
};
extern "C" {
struct sbiret sbi_get_spec_version(void);
struct sbiret sbi_get_impl_id(void);
struct sbiret sbi_get_impl_version(void);
struct sbiret sbi_probe_extension(long extension_id);
struct sbiret sbi_get_mvendorid(void);
struct sbiret sbi_get_marchid(void);
struct sbiret sbi_get_mimpid(void);
void sbi_set_timer_legacy(uint64_t stime_value);
void sbi_console_putchar_legacy(int ch);
int sbi_console_getchar_legacy(void);
void sbi_clear_ipi_legacy(void);
void sbi_send_ipi_legacy(const unsigned long *hart_mask);
void sbi_remote_fence_i_legacy(const unsigned long *hart_mask);
void sbi_remote_sfence_vma_legacy(
const unsigned long *hart_mask,
unsigned long start,
unsigned long size);
void sbi_remote_sfence_vma_asid_legacy(
const unsigned long *hart_mask,
unsigned long start,
unsigned long size,
unsigned long asid);
void sbi_shutdown_legacy(void);
struct sbiret sbi_set_timer(uint64_t stime_value);
struct sbiret sbi_send_ipi(
unsigned long hart_mask,
unsigned long hart_mask_base);
struct sbiret sbi_remote_fence_i(
unsigned long hart_mask,
unsigned long hart_mask_base);
struct sbiret sbi_remote_sfence_vma(
unsigned long hart_mask,
unsigned long hart_mask_base,
unsigned long start_addr,
unsigned long size);
struct sbiret sbi_remote_sfence_vma_asid(
unsigned long hart_mask,
unsigned long hart_mask_base,
unsigned long start_addr,
unsigned long size,
unsigned long asid);
struct sbiret sbi_remote_hfence_gvma_vmid(
unsigned long hart_mask,
unsigned long hart_mask_base,
unsigned long start_addr,
unsigned long size,
unsigned long vmid);
struct sbiret sbi_remote_hfence_gvma(
unsigned long hart_mask,
unsigned long hart_mask_base,
unsigned long start_addr,
unsigned long size);
struct sbiret sbi_remote_hfence_vvma_asid(
unsigned long hart_mask,
unsigned long hart_mask_base,
unsigned long start_addr,
unsigned long size,
unsigned long asid);
struct sbiret sbi_remote_hfence_vvma(
unsigned long hart_mask,
unsigned long hart_mask_base,
unsigned long start_addr,
unsigned long size);
struct sbiret sbi_hart_start(
unsigned long hartid,
unsigned long start_addr,
unsigned long opaque);
struct sbiret sbi_hart_stop(void);
struct sbiret sbi_hart_get_status(unsigned long hartid);
struct sbiret sbi_hart_suspend(
uint32_t suspend_type,
unsigned long resume_addr,
unsigned long opaque);
struct sbiret sbi_system_reset(uint32_t reset_type, uint32_t reset_reason);
}
#endif