123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #ifndef __CORE_V5_H__
- #define __CORE_V5_H__
- #define MSTATUS_UIE 0x00000001
- #define MSTATUS_SIE 0x00000002
- #define MSTATUS_HIE 0x00000004
- #define MSTATUS_MIE 0x00000008
- #define MSTATUS_UPIE 0x00000010
- #define MSTATUS_SPIE 0x00000020
- #define MSTATUS_HPIE 0x00000040
- #define MSTATUS_MPIE 0x00000080
- #define MSTATUS_SPP 0x00000100
- #define MSTATUS_HPP 0x00000600
- #define MSTATUS_MPP 0x00001800
- #define MSTATUS_FS 0x00006000
- #define MSTATUS_XS 0x00018000
- #define MSTATUS_MPRV 0x00020000
- #define MSTATUS_PUM 0x00040000
- #define MSTATUS_MXR 0x00080000
- #define MSTATUS_VM 0x1F000000
- #define MSTATUS32_SD 0x80000000
- #define MSTATUS64_SD 0x8000000000000000
- #if __riscv_xlen == 64
- #define MCAUSE_INT 0x8000000000000000UL
- #define MCAUSE_CAUSE 0x7FFFFFFFFFFFFFFFUL
- #else
- #define MCAUSE_INT 0x80000000UL
- #define MCAUSE_CAUSE 0x7FFFFFFFUL
- #endif
- #define IRQ_S_SOFT 1
- #define IRQ_H_SOFT 2
- #define IRQ_M_SOFT 3
- #define IRQ_S_TIMER 5
- #define IRQ_H_TIMER 6
- #define IRQ_M_TIMER 7
- #define IRQ_S_EXT 9
- #define IRQ_H_EXT 10
- #define IRQ_M_EXT 11
- #define IRQ_COP 12
- #define IRQ_HOST 13
- /* Machine mode MCAUSE */
- #define TRAP_M_I_ACC_FAULT 1 /* Instruction access fault */
- #define TRAP_M_L_ACC_FAULT 5 /* Data load access fault */
- #define TRAP_M_S_ACC_FAULT 7 /* Data store access fault */
- #define TRAP_U_ECALL 8
- #define TRAP_S_ECALL 9
- #define TRAP_H_ECALL 10
- #define TRAP_M_ECALL 11
- #define TRAP_M_I_PAGE_FAULT 12 /* Instruction page fault */
- #define TRAP_M_L_PAGE_FAULT 13 /* Data load page fault */
- #define TRAP_M_S_PAGE_FAULT 15 /* Data store page fault */
- #define TRAP_M_STACKOVF 32
- #define TRAP_M_STACKUDF 33
- /* Supervisor mode SCAUSE */
- #define TRAP_S_I_ACC_FAULT 1 /* Instruction access fault */
- #define TRAP_S_L_ACC_FAULT 5 /* Data load access fault */
- #define TRAP_S_S_ACC_FAULT 7 /* Data store access fault */
- #define TRAP_S_I_PAGE_FAULT 12 /* Instruction page fault */
- #define TRAP_S_L_PAGE_FAULT 13 /* Data load page fault */
- #define TRAP_S_S_PAGE_FAULT 15 /* Data store page fault */
- #define MIP_SSIP (1 << IRQ_S_SOFT)
- #define MIP_HSIP (1 << IRQ_H_SOFT)
- #define MIP_MSIP (1 << IRQ_M_SOFT)
- #define MIP_STIP (1 << IRQ_S_TIMER)
- #define MIP_HTIP (1 << IRQ_H_TIMER)
- #define MIP_MTIP (1 << IRQ_M_TIMER)
- #define MIP_SEIP (1 << IRQ_S_EXT)
- #define MIP_HEIP (1 << IRQ_H_EXT)
- #define MIP_MEIP (1 << IRQ_M_EXT)
- /* MILMB and MDLMB */
- #define MILMB_IEN (0x1UL)
- #define MDLMB_DEN (0x1UL)
- #if __riscv_xlen == 64
- # define SLL32 sllw
- # define STORE sd
- # define LOAD ld
- # define LWU lwu
- # define LOG_REGBYTES 3
- #else
- # define SLL32 sll
- # define STORE sw
- # define LOAD lw
- # define LWU lw
- # define LOG_REGBYTES 2
- #endif
- #define REGBYTES (1 << LOG_REGBYTES)
- #if __riscv_flen == 64
- # define FPSTORE fsd
- # define FPLOAD fld
- # define LOG_FPREGBYTES 3
- #else
- # define FPSTORE fsw
- # define FPLOAD flw
- # define LOG_FPREGBYTES 2
- #endif
- #define FPREGBYTES (1 << LOG_FPREGBYTES)
- #define STR(S) #S
- #define XSTR(S) STR(S)
- #define PUSH XSTR(STORE)
- #define POP XSTR(LOAD)
- #define REGSIZE XSTR(REGBYTES)
- #define FPPUSH XSTR(FPSTORE)
- #define FPPOP XSTR(FPLOAD)
- #define FPREGSIZE XSTR(FPREGBYTES)
- #ifndef __ASSEMBLER__
- #define read_csr(reg) __nds__csrr(reg)
- #define write_csr(reg, val) __nds__csrw(val, reg)
- #define swap_csr(reg, val) __nds__csrrw(val, reg)
- #define set_csr(reg, bit) __nds__csrrs(bit, reg)
- #define clear_csr(reg, bit) __nds__csrrc(bit, reg)
- #endif
- #endif // __CORE_V5_H__
|