diff options
author | Howard Mao <zhehao.mao@gmail.com> | 2017-05-23 15:44:27 -0700 |
---|---|---|
committer | Howard Mao <zhehao.mao@gmail.com> | 2017-10-04 13:29:16 -0700 |
commit | 4c64d29a8b1c5aecc8a08782b7ad39c6d2fb3387 (patch) | |
tree | 09af529e13af183d0449811a63b7865be42778cc /machine/mtrap.c | |
parent | fb4e31229fb072297dad9fcdf2c67b053c5d0322 (diff) | |
download | riscv-pk-new-sbi-disk.zip riscv-pk-new-sbi-disk.tar.gz riscv-pk-new-sbi-disk.tar.bz2 |
add sbi-disk mcall routinesnew-sbi-disk
Diffstat (limited to 'machine/mtrap.c')
-rw-r--r-- | machine/mtrap.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/machine/mtrap.c b/machine/mtrap.c index e5faae3..789f544 100644 --- a/machine/mtrap.c +++ b/machine/mtrap.c @@ -98,6 +98,23 @@ static uintptr_t mcall_set_timer(uint64_t when) return 0; } +static uintptr_t mcall_disk_read(uintptr_t addr, uintptr_t offset, size_t size) +{ + htif_disk_read(addr, offset, size); + return 0; +} + +static uintptr_t mcall_disk_write(uintptr_t addr, uintptr_t offset, size_t size) +{ + htif_disk_write(addr, offset, size); + return 0; +} + +static uintptr_t mcall_disk_size(void) +{ + return htif_disk_size(); +} + static void send_ipi_many(uintptr_t* pmask, int event) { _Static_assert(MAX_HARTS <= 8 * sizeof(*pmask), "# harts > uintptr_t bits"); @@ -132,7 +149,8 @@ void mcall_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) { write_csr(mepc, mepc + 4); - uintptr_t n = regs[17], arg0 = regs[10], arg1 = regs[11], retval, ipi_type; + uintptr_t n = regs[17], arg0 = regs[10], arg1 = regs[11], arg2 = regs[12]; + uintptr_t retval, ipi_type; switch (n) { @@ -168,6 +186,15 @@ send_ipi: retval = mcall_set_timer(arg0); #endif break; + case SBI_DISK_READ: + retval = mcall_disk_read(arg0, arg1, arg2); + break; + case SBI_DISK_WRITE: + retval = mcall_disk_write(arg0, arg1, arg2); + break; + case SBI_DISK_SIZE: + retval = mcall_disk_size(); + break; default: retval = -ENOSYS; break; |