diff --git a/include/sbi/sbi_emulate_csr.h b/include/sbi/sbi_emulate_csr.h index fe357e5..548056a 100644 --- a/include/sbi/sbi_emulate_csr.h +++ b/include/sbi/sbi_emulate_csr.h @@ -13,12 +13,11 @@ #include struct sbi_trap_regs; -struct sbi_scratch; -int sbi_emulate_csr_read(int csr_num, u32 hartid, struct sbi_trap_regs *regs, - struct sbi_scratch *scratch, ulong *csr_val); +int sbi_emulate_csr_read(int csr_num, struct sbi_trap_regs *regs, + ulong *csr_val); -int sbi_emulate_csr_write(int csr_num, u32 hartid, struct sbi_trap_regs *regs, - struct sbi_scratch *scratch, ulong csr_val); +int sbi_emulate_csr_write(int csr_num, struct sbi_trap_regs *regs, + ulong csr_val); #endif diff --git a/lib/sbi/sbi_emulate_csr.c b/lib/sbi/sbi_emulate_csr.c index dbb36cb..41c92df 100644 --- a/lib/sbi/sbi_emulate_csr.c +++ b/lib/sbi/sbi_emulate_csr.c @@ -13,14 +13,16 @@ #include #include #include +#include #include #include -int sbi_emulate_csr_read(int csr_num, u32 hartid, struct sbi_trap_regs *regs, - struct sbi_scratch *scratch, ulong *csr_val) +int sbi_emulate_csr_read(int csr_num, struct sbi_trap_regs *regs, + ulong *csr_val) { int ret = 0; ulong cen = -1UL; + struct sbi_scratch *scratch = sbi_scratch_thishart_ptr(); ulong prev_mode = (regs->mstatus & MSTATUS_MPP) >> MSTATUS_MPP_SHIFT; #if __riscv_xlen == 32 bool virt = (regs->mstatusH & MSTATUSH_MPV) ? TRUE : FALSE; @@ -111,15 +113,16 @@ int sbi_emulate_csr_read(int csr_num, u32 hartid, struct sbi_trap_regs *regs, if (ret) sbi_dprintf(scratch, "%s: hartid%d: invalid csr_num=0x%x\n", - __func__, hartid, csr_num); + __func__, current_hartid(), csr_num); return ret; } -int sbi_emulate_csr_write(int csr_num, u32 hartid, struct sbi_trap_regs *regs, - struct sbi_scratch *scratch, ulong csr_val) +int sbi_emulate_csr_write(int csr_num, struct sbi_trap_regs *regs, + ulong csr_val) { int ret = 0; + struct sbi_scratch *scratch = sbi_scratch_thishart_ptr(); ulong prev_mode = (regs->mstatus & MSTATUS_MPP) >> MSTATUS_MPP_SHIFT; #if __riscv_xlen == 32 bool virt = (regs->mstatusH & MSTATUSH_MPV) ? TRUE : FALSE; @@ -179,7 +182,7 @@ int sbi_emulate_csr_write(int csr_num, u32 hartid, struct sbi_trap_regs *regs, if (ret) sbi_dprintf(scratch, "%s: hartid%d: invalid csr_num=0x%x\n", - __func__, hartid, csr_num); + __func__, current_hartid(), csr_num); return ret; } diff --git a/lib/sbi/sbi_illegal_insn.c b/lib/sbi/sbi_illegal_insn.c index a374fa2..980b7dd 100644 --- a/lib/sbi/sbi_illegal_insn.c +++ b/lib/sbi/sbi_illegal_insn.c @@ -57,7 +57,7 @@ static int system_opcode_insn(ulong insn, u32 hartid, ulong mcause, return truly_illegal_insn(insn, hartid, mcause, regs, scratch); - if (sbi_emulate_csr_read(csr_num, hartid, regs, scratch, &csr_val)) + if (sbi_emulate_csr_read(csr_num, regs, &csr_val)) return truly_illegal_insn(insn, hartid, mcause, regs, scratch); @@ -87,8 +87,7 @@ static int system_opcode_insn(ulong insn, u32 hartid, ulong mcause, return truly_illegal_insn(insn, hartid, mcause, regs, scratch); }; - if (do_write && sbi_emulate_csr_write(csr_num, hartid, regs, - scratch, new_csr_val)) + if (do_write && sbi_emulate_csr_write(csr_num, regs, new_csr_val)) return truly_illegal_insn(insn, hartid, mcause, regs, scratch); SET_RD(insn, regs, csr_val);