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
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:
|
|
|