84 lines
2.3 KiB
C
84 lines
2.3 KiB
C
// See LICENSE for license details.
|
|
|
|
#ifndef RISCV_CSR_ENCODING_H
|
|
#define RISCV_CSR_ENCODING_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_SUM 0x00040000
|
|
#define MSTATUS_MXR 0x00080000
|
|
#define MSTATUS_TVM 0x00100000
|
|
#define MSTATUS_TW 0x00200000
|
|
#define MSTATUS_TSR 0x00400000
|
|
#define MSTATUS32_SD 0x80000000
|
|
#define MSTATUS64_SD 0x8000000000000000
|
|
|
|
#define MIP_SSIE (1 << IRQ_S_SOFT)
|
|
#define MIP_HSIE (1 << IRQ_H_SOFT)
|
|
#define MIP_MSIE (1 << IRQ_M_SOFT)
|
|
#define MIP_STIE (1 << IRQ_S_TIMER)
|
|
#define MIP_HTIE (1 << IRQ_H_TIMER)
|
|
#define MIP_MTIE (1 << IRQ_M_TIMER)
|
|
#define MIP_SEIE (1 << IRQ_S_EXT)
|
|
#define MIP_HEIE (1 << IRQ_H_EXT)
|
|
#define MIP_MEIE (1 << IRQ_M_EXT)
|
|
|
|
#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
|
|
|
|
# define MAX_HARTS 1
|
|
|
|
#ifndef __ASSEMBLER__
|
|
|
|
#ifdef __GNUC__
|
|
#define read_csr(reg) ({ unsigned long __tmp; \
|
|
asm volatile ("csrr %0, " #reg : "=r"(__tmp)); \
|
|
__tmp; })
|
|
|
|
#define write_csr(reg, val) ({ \
|
|
asm volatile ("csrw " #reg ", %0" :: "rK"(val)); })
|
|
|
|
#define swap_csr(reg, val) ({ unsigned long __tmp; \
|
|
asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "rK"(val)); \
|
|
__tmp; })
|
|
|
|
#define set_csr(reg, bit) ({ unsigned long __tmp; \
|
|
asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \
|
|
__tmp; })
|
|
|
|
#define clear_csr(reg, bit) ({ unsigned long __tmp; \
|
|
asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \
|
|
__tmp; })
|
|
|
|
#define rdtime() read_csr(time)
|
|
#define rdcycle() read_csr(cycle)
|
|
#define rdinstret() read_csr(instret)
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|