]> Git Repo - linux.git/blob - arch/riscv/include/asm/irqflags.h
Merge patch series "riscv: Extension parsing fixes"
[linux.git] / arch / riscv / include / asm / irqflags.h
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 */
13 static inline unsigned long arch_local_save_flags(void)
14 {
15         return csr_read(CSR_STATUS);
16 }
17
18 /* unconditionally enable interrupts */
19 static inline void arch_local_irq_enable(void)
20 {
21         csr_set(CSR_STATUS, SR_IE);
22 }
23
24 /* unconditionally disable interrupts */
25 static inline void arch_local_irq_disable(void)
26 {
27         csr_clear(CSR_STATUS, SR_IE);
28 }
29
30 /* get status and disable interrupts */
31 static inline unsigned long arch_local_irq_save(void)
32 {
33         return csr_read_clear(CSR_STATUS, SR_IE);
34 }
35
36 /* test flags */
37 static inline int arch_irqs_disabled_flags(unsigned long flags)
38 {
39         return !(flags & SR_IE);
40 }
41
42 /* test hardware interrupt enable bit */
43 static inline int arch_irqs_disabled(void)
44 {
45         return arch_irqs_disabled_flags(arch_local_save_flags());
46 }
47
48 /* set interrupt enabled status */
49 static 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 */
This page took 0.035051 seconds and 4 git commands to generate.