RISC-V Proxy Kernel
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

111 lines
1.5 KiB

#include "encoding.h"
#include "mcall.h"
.section .sbi,"ax",@progbits
.option norvc
.align RISCV_PGSHIFT
.globl sbi_base
sbi_base:
# TODO: figure out something better to do with this space. It's not
# protected from the OS, so beware.
.skip RISCV_PGSIZE - 2048
# hart_id
.align 4
li a7, MCALL_HART_ID
ecall
ret
# num_harts
.align 4
lw a0, num_harts
ret
# query_memory
.align 4
tail __sbi_query_memory
# console_putchar
.align 4
li a7, MCALL_CONSOLE_PUTCHAR
ecall
ret
# console_getchar
.align 4
li a7, MCALL_CONSOLE_GETCHAR
ecall
ret
# empty
.align 4
unimp
# send ipi
.align 4
li a7, MCALL_SEND_IPI
ecall
ret
# clear ipi
.align 4
li a7, MCALL_CLEAR_IPI
ecall
ret
# timebase
.align 4
li a0, 10000000 # or, you know, we could provide the correct answer
ret
# shutdown
.align 4
li a7, MCALL_SHUTDOWN
ecall
# set_timer
.align 4
li a7, MCALL_SET_TIMER
ecall
ret
# mask_interrupt
.align 4
tail __sbi_mask_interrupt
# unmask_interrupt
.align 4
tail __sbi_unmask_interrupt
# remote_sfence_vm
.align 4
li a7, MCALL_REMOTE_SFENCE_VM
ecall
ret
# remote_sfence_vm_range
.align 4
li a7, MCALL_REMOTE_SFENCE_VM
ecall
ret
# remote_fence_i
.align 4
li a7, MCALL_REMOTE_FENCE_I
ecall
ret
# end of SBI trampolines
.globl do_mcall
do_mcall:
mv a7, a0
mv a0, a1
mv a1, a2
ecall
ret
.align RISCV_PGSHIFT
.globl _sbi_end
_sbi_end: