Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (C) 2012 Regents of the University of California
4 */
5
6
7#ifndef _ASM_RISCV_IRQFLAGS_H
8#define _ASM_RISCV_IRQFLAGS_H
9
10#include <asm/csr.h>
11
12/* read interrupt enabled status */
13static inline unsigned long arch_local_save_flags(void)
14{
15 return csr_read(CSR_STATUS);
16}
17
18/* unconditionally enable interrupts */
19static inline void arch_local_irq_enable(void)
20{
21 csr_set(CSR_STATUS, SR_IE);
22}
23
24/* unconditionally disable interrupts */
25static inline void arch_local_irq_disable(void)
26{
27 csr_clear(CSR_STATUS, SR_IE);
28}
29
30/* get status and disable interrupts */
31static inline unsigned long arch_local_irq_save(void)
32{
33 return csr_read_clear(CSR_STATUS, SR_IE);
34}
35
36/* test flags */
37static inline int arch_irqs_disabled_flags(unsigned long flags)
38{
39 return !(flags & SR_IE);
40}
41
42/* test hardware interrupt enable bit */
43static inline int arch_irqs_disabled(void)
44{
45 return arch_irqs_disabled_flags(arch_local_save_flags());
46}
47
48/* set interrupt enabled status */
49static inline void arch_local_irq_restore(unsigned long flags)
50{
51 csr_set(CSR_STATUS, flags & SR_IE);
52}
53
54#endif /* _ASM_RISCV_IRQFLAGS_H */