Merge branch 'work.iov_iter' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[platform/kernel/linux-starfive.git] / include / asm-generic / irqflags.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __ASM_GENERIC_IRQFLAGS_H
3 #define __ASM_GENERIC_IRQFLAGS_H
4
5 /*
6  * All architectures should implement at least the first two functions,
7  * usually inline assembly will be the best way.
8  */
9 #ifndef ARCH_IRQ_DISABLED
10 #define ARCH_IRQ_DISABLED 0
11 #define ARCH_IRQ_ENABLED 1
12 #endif
13
14 /* read interrupt enabled status */
15 #ifndef arch_local_save_flags
16 unsigned long arch_local_save_flags(void);
17 #endif
18
19 /* set interrupt enabled status */
20 #ifndef arch_local_irq_restore
21 void arch_local_irq_restore(unsigned long flags);
22 #endif
23
24 /* get status and disable interrupts */
25 #ifndef arch_local_irq_save
26 static inline unsigned long arch_local_irq_save(void)
27 {
28         unsigned long flags;
29         flags = arch_local_save_flags();
30         arch_local_irq_restore(ARCH_IRQ_DISABLED);
31         return flags;
32 }
33 #endif
34
35 /* test flags */
36 #ifndef arch_irqs_disabled_flags
37 static inline int arch_irqs_disabled_flags(unsigned long flags)
38 {
39         return flags == ARCH_IRQ_DISABLED;
40 }
41 #endif
42
43 /* unconditionally enable interrupts */
44 #ifndef arch_local_irq_enable
45 static inline void arch_local_irq_enable(void)
46 {
47         arch_local_irq_restore(ARCH_IRQ_ENABLED);
48 }
49 #endif
50
51 /* unconditionally disable interrupts */
52 #ifndef arch_local_irq_disable
53 static inline void arch_local_irq_disable(void)
54 {
55         arch_local_irq_restore(ARCH_IRQ_DISABLED);
56 }
57 #endif
58
59 /* test hardware interrupt enable bit */
60 #ifndef arch_irqs_disabled
61 static inline int arch_irqs_disabled(void)
62 {
63         return arch_irqs_disabled_flags(arch_local_save_flags());
64 }
65 #endif
66
67 #endif /* __ASM_GENERIC_IRQFLAGS_H */