Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/parisc/include/asm/irqflags.h
26298 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
#ifndef __PARISC_IRQFLAGS_H
3
#define __PARISC_IRQFLAGS_H
4
5
#include <linux/types.h>
6
#include <asm/psw.h>
7
8
static inline unsigned long arch_local_save_flags(void)
9
{
10
unsigned long flags;
11
asm volatile("ssm 0, %0" : "=r" (flags) : : "memory");
12
return flags;
13
}
14
15
static inline void arch_local_irq_disable(void)
16
{
17
asm volatile("rsm %0,%%r0\n" : : "i" (PSW_I) : "memory");
18
}
19
20
static inline void arch_local_irq_enable(void)
21
{
22
asm volatile("ssm %0,%%r0\n" : : "i" (PSW_I) : "memory");
23
}
24
25
static inline unsigned long arch_local_irq_save(void)
26
{
27
unsigned long flags;
28
asm volatile("rsm %1,%0" : "=r" (flags) : "i" (PSW_I) : "memory");
29
return flags;
30
}
31
32
static inline void arch_local_irq_restore(unsigned long flags)
33
{
34
/* warn if IRQs are on although they should be off */
35
if (IS_ENABLED(CONFIG_LIGHTWEIGHT_SPINLOCK_CHECK))
36
if (arch_local_save_flags() & PSW_I)
37
asm volatile("break 6,6\n"); /* SPINLOCK_BREAK_INSN */
38
39
asm volatile("mtsm %0" : : "r" (flags) : "memory");
40
}
41
42
static inline bool arch_irqs_disabled_flags(unsigned long flags)
43
{
44
return (flags & PSW_I) == 0;
45
}
46
47
static inline bool arch_irqs_disabled(void)
48
{
49
return arch_irqs_disabled_flags(arch_local_save_flags());
50
}
51
52
#endif /* __PARISC_IRQFLAGS_H */
53
54