Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/sh/kernel/irq_32.c
26424 views
1
// SPDX-License-Identifier: GPL-2.0
2
/*
3
* SHcompact irqflags support
4
*
5
* Copyright (C) 2006 - 2009 Paul Mundt
6
*/
7
#include <linux/irqflags.h>
8
#include <linux/module.h>
9
10
void notrace arch_local_irq_restore(unsigned long flags)
11
{
12
unsigned long __dummy0, __dummy1;
13
14
if (flags == ARCH_IRQ_DISABLED) {
15
__asm__ __volatile__ (
16
"stc sr, %0\n\t"
17
"or #0xf0, %0\n\t"
18
"ldc %0, sr\n\t"
19
: "=&z" (__dummy0)
20
: /* no inputs */
21
: "memory"
22
);
23
} else {
24
__asm__ __volatile__ (
25
"stc sr, %0\n\t"
26
"and %1, %0\n\t"
27
#ifdef CONFIG_CPU_HAS_SR_RB
28
"stc r6_bank, %1\n\t"
29
"or %1, %0\n\t"
30
#endif
31
"ldc %0, sr\n\t"
32
: "=&r" (__dummy0), "=r" (__dummy1)
33
: "1" (~ARCH_IRQ_DISABLED)
34
: "memory"
35
);
36
}
37
}
38
EXPORT_SYMBOL(arch_local_irq_restore);
39
40
unsigned long notrace arch_local_save_flags(void)
41
{
42
unsigned long flags;
43
44
__asm__ __volatile__ (
45
"stc sr, %0\n\t"
46
"and #0xf0, %0\n\t"
47
: "=&z" (flags)
48
: /* no inputs */
49
: "memory"
50
);
51
52
return flags;
53
}
54
EXPORT_SYMBOL(arch_local_save_flags);
55
56