1/* 2 * Copyright 2005-2019, Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Axel D��rfler <axeld@pinc-software.de> 7 * Ingo Weinhold <bonefish@cs.tu-berlin.de> 8 */ 9#ifndef _KERNEL_ARCH_RISCV64_INT_H 10#define _KERNEL_ARCH_RISCV64_INT_H 11 12#include <SupportDefs.h> 13#include <arch_cpu_defs.h> 14 15#define NUM_IO_VECTORS 4096 16 17 18#ifdef __cplusplus 19 20static inline void 21arch_int_enable_interrupts_inline(void) 22{ 23 SetBitsSstatus(SstatusReg{.ie = 1 << modeS}.val); 24} 25 26 27static inline int 28arch_int_disable_interrupts_inline(void) 29{ 30 SstatusReg oldStatus{.val = GetAndClearBitsSstatus(SstatusReg{.ie = 1 << modeS}.val)}; 31 return ((1 << modeS) & oldStatus.ie) != 0; 32} 33 34 35static inline void 36arch_int_restore_interrupts_inline(int oldState) 37{ 38 if (oldState) 39 arch_int_enable_interrupts_inline(); 40} 41 42 43static inline bool 44arch_int_are_interrupts_enabled_inline(void) 45{ 46 SstatusReg status{.val = Sstatus()}; 47 return ((1 << modeS) & status.ie) != 0; 48} 49 50 51// map the functions to the inline versions 52#define arch_int_enable_interrupts() arch_int_enable_interrupts_inline() 53#define arch_int_disable_interrupts() arch_int_disable_interrupts_inline() 54#define arch_int_restore_interrupts(status) \ 55 arch_int_restore_interrupts_inline(status) 56#define arch_int_are_interrupts_enabled() \ 57 arch_int_are_interrupts_enabled_inline() 58 59 60enum { 61 kMSyscallSwitchToSmode = 0, 62 kMSyscallSetTimer = 1, 63}; 64 65extern "C" status_t MSyscall(uint64 op, ...); 66 67#endif 68 69 70#endif /* _KERNEL_ARCH_RISCV64_INT_H */ 71