1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
5 #ifndef _ASM_IRQFLAGS_H
6 #define _ASM_IRQFLAGS_H
10 #include <linux/compiler.h>
11 #include <linux/stringify.h>
12 #include <asm/compiler.h>
13 #include <asm/loongarch.h>
15 static inline void arch_local_irq_enable(void)
17 u32 flags = CSR_CRMD_IE;
19 "csrxchg %[val], %[mask], %[reg]\n\t"
21 : [mask] "r" (CSR_CRMD_IE), [reg] "i" (LOONGARCH_CSR_CRMD)
25 static inline void arch_local_irq_disable(void)
29 "csrxchg %[val], %[mask], %[reg]\n\t"
31 : [mask] "r" (CSR_CRMD_IE), [reg] "i" (LOONGARCH_CSR_CRMD)
35 static inline unsigned long arch_local_irq_save(void)
39 "csrxchg %[val], %[mask], %[reg]\n\t"
41 : [mask] "r" (CSR_CRMD_IE), [reg] "i" (LOONGARCH_CSR_CRMD)
46 static inline void arch_local_irq_restore(unsigned long flags)
49 "csrxchg %[val], %[mask], %[reg]\n\t"
51 : [mask] "r" (CSR_CRMD_IE), [reg] "i" (LOONGARCH_CSR_CRMD)
55 static inline unsigned long arch_local_save_flags(void)
59 "csrrd %[val], %[reg]\n\t"
61 : [reg] "i" (LOONGARCH_CSR_CRMD)
66 static inline int arch_irqs_disabled_flags(unsigned long flags)
68 return !(flags & CSR_CRMD_IE);
71 static inline int arch_irqs_disabled(void)
73 return arch_irqs_disabled_flags(arch_local_save_flags());
76 #endif /* #ifndef __ASSEMBLY__ */
78 #endif /* _ASM_IRQFLAGS_H */