7 #include <arch/smp/atomic.h>
14 int hart_id = read_csr(mhartid);
28 write_csr(mstatus, status);
37 int hart_id = read_csr(mhartid);
41 switch (payload_mode) {
45 write_csr(utvec, doit);
52 write_csr(stvec, doit);
61 write_csr(mtvec, doit);
66 die(
"wrong privilege level for payload");
69 write_csr(mstatus, status);
70 write_csr(mepc, doit);
74 "mret" ::
"r"(hart_id),
void __noreturn die(const char *fmt,...)
void run_payload_opensbi(struct prog *prog, void *fdt, struct prog *opensbi, int payload_mode)
void run_payload(struct prog *prog, void *fdt, int payload_mode)
static void * prog_entry(const struct prog *prog)
#define RISCV_PAYLOAD_MODE_S
#define RISCV_PAYLOAD_MODE_M
void run_opensbi(const int hart_id, const void *opensbi, const void *fdt, const void *payload, const int payload_mode)
#define RISCV_PAYLOAD_MODE_U
#define INSERT_FIELD(val, which, fieldval)
typedef void(X86APIP X86EMU_intrFuncs)(int num)