| 1 | // SPDX-License-Identifier: GPL-2.0 |
| 2 | #ifndef ARCH_PERF_RISCV_TRAP_TYPES_H |
| 3 | #define ARCH_PERF_RISCV_TRAP_TYPES_H |
| 4 | |
| 5 | /* Exception cause high bit - is an interrupt if set */ |
| 6 | #define CAUSE_IRQ_FLAG (_AC(1, UL) << (__riscv_xlen - 1)) |
| 7 | |
| 8 | /* Interrupt causes (minus the high bit) */ |
| 9 | #define IRQ_S_SOFT 1 |
| 10 | #define IRQ_VS_SOFT 2 |
| 11 | #define IRQ_M_SOFT 3 |
| 12 | #define IRQ_S_TIMER 5 |
| 13 | #define IRQ_VS_TIMER 6 |
| 14 | #define IRQ_M_TIMER 7 |
| 15 | #define IRQ_S_EXT 9 |
| 16 | #define IRQ_VS_EXT 10 |
| 17 | #define IRQ_M_EXT 11 |
| 18 | #define IRQ_S_GEXT 12 |
| 19 | #define IRQ_PMU_OVF 13 |
| 20 | |
| 21 | /* Exception causes */ |
| 22 | #define EXC_INST_MISALIGNED 0 |
| 23 | #define EXC_INST_ACCESS 1 |
| 24 | #define EXC_INST_ILLEGAL 2 |
| 25 | #define EXC_BREAKPOINT 3 |
| 26 | #define EXC_LOAD_MISALIGNED 4 |
| 27 | #define EXC_LOAD_ACCESS 5 |
| 28 | #define EXC_STORE_MISALIGNED 6 |
| 29 | #define EXC_STORE_ACCESS 7 |
| 30 | #define EXC_SYSCALL 8 |
| 31 | #define EXC_HYPERVISOR_SYSCALL 9 |
| 32 | #define EXC_SUPERVISOR_SYSCALL 10 |
| 33 | #define EXC_INST_PAGE_FAULT 12 |
| 34 | #define EXC_LOAD_PAGE_FAULT 13 |
| 35 | #define EXC_STORE_PAGE_FAULT 15 |
| 36 | #define EXC_INST_GUEST_PAGE_FAULT 20 |
| 37 | #define EXC_LOAD_GUEST_PAGE_FAULT 21 |
| 38 | #define EXC_VIRTUAL_INST_FAULT 22 |
| 39 | #define EXC_STORE_GUEST_PAGE_FAULT 23 |
| 40 | |
| 41 | #define TRAP(x) { x, #x } |
| 42 | |
| 43 | #define kvm_riscv_trap_class \ |
| 44 | TRAP(IRQ_S_SOFT), TRAP(IRQ_VS_SOFT), TRAP(IRQ_M_SOFT), \ |
| 45 | TRAP(IRQ_S_TIMER), TRAP(IRQ_VS_TIMER), TRAP(IRQ_M_TIMER), \ |
| 46 | TRAP(IRQ_S_EXT), TRAP(IRQ_VS_EXT), TRAP(IRQ_M_EXT), \ |
| 47 | TRAP(IRQ_S_GEXT), TRAP(IRQ_PMU_OVF), \ |
| 48 | TRAP(EXC_INST_MISALIGNED), TRAP(EXC_INST_ACCESS), TRAP(EXC_INST_ILLEGAL), \ |
| 49 | TRAP(EXC_BREAKPOINT), TRAP(EXC_LOAD_MISALIGNED), TRAP(EXC_LOAD_ACCESS), \ |
| 50 | TRAP(EXC_STORE_MISALIGNED), TRAP(EXC_STORE_ACCESS), TRAP(EXC_SYSCALL), \ |
| 51 | TRAP(EXC_HYPERVISOR_SYSCALL), TRAP(EXC_SUPERVISOR_SYSCALL), \ |
| 52 | TRAP(EXC_INST_PAGE_FAULT), TRAP(EXC_LOAD_PAGE_FAULT), \ |
| 53 | TRAP(EXC_STORE_PAGE_FAULT), TRAP(EXC_INST_GUEST_PAGE_FAULT), \ |
| 54 | TRAP(EXC_LOAD_GUEST_PAGE_FAULT), TRAP(EXC_VIRTUAL_INST_FAULT), \ |
| 55 | TRAP(EXC_STORE_GUEST_PAGE_FAULT) |
| 56 | |
| 57 | #endif /* ARCH_PERF_RISCV_TRAP_TYPES_H */ |
| 58 | |