Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/microblaze/include/asm/irqflags.h
15126 views
1
/*
2
* Copyright (C) 2006 Atmark Techno, Inc.
3
*
4
* This file is subject to the terms and conditions of the GNU General Public
5
* License. See the file "COPYING" in the main directory of this archive
6
* for more details.
7
*/
8
9
#ifndef _ASM_MICROBLAZE_IRQFLAGS_H
10
#define _ASM_MICROBLAZE_IRQFLAGS_H
11
12
#include <linux/types.h>
13
#include <asm/registers.h>
14
15
#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR
16
17
static inline unsigned long arch_local_irq_save(void)
18
{
19
unsigned long flags;
20
asm volatile(" msrclr %0, %1 \n"
21
" nop \n"
22
: "=r"(flags)
23
: "i"(MSR_IE)
24
: "memory");
25
return flags;
26
}
27
28
static inline void arch_local_irq_disable(void)
29
{
30
/* this uses r0 without declaring it - is that correct? */
31
asm volatile(" msrclr r0, %0 \n"
32
" nop \n"
33
:
34
: "i"(MSR_IE)
35
: "memory");
36
}
37
38
static inline void arch_local_irq_enable(void)
39
{
40
/* this uses r0 without declaring it - is that correct? */
41
asm volatile(" msrset r0, %0 \n"
42
" nop \n"
43
:
44
: "i"(MSR_IE)
45
: "memory");
46
}
47
48
#else /* !CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
49
50
static inline unsigned long arch_local_irq_save(void)
51
{
52
unsigned long flags, tmp;
53
asm volatile (" mfs %0, rmsr \n"
54
" nop \n"
55
" andi %1, %0, %2 \n"
56
" mts rmsr, %1 \n"
57
" nop \n"
58
: "=r"(flags), "=r"(tmp)
59
: "i"(~MSR_IE)
60
: "memory");
61
return flags;
62
}
63
64
static inline void arch_local_irq_disable(void)
65
{
66
unsigned long tmp;
67
asm volatile(" mfs %0, rmsr \n"
68
" nop \n"
69
" andi %0, %0, %1 \n"
70
" mts rmsr, %0 \n"
71
" nop \n"
72
: "=r"(tmp)
73
: "i"(~MSR_IE)
74
: "memory");
75
}
76
77
static inline void arch_local_irq_enable(void)
78
{
79
unsigned long tmp;
80
asm volatile(" mfs %0, rmsr \n"
81
" nop \n"
82
" ori %0, %0, %1 \n"
83
" mts rmsr, %0 \n"
84
" nop \n"
85
: "=r"(tmp)
86
: "i"(MSR_IE)
87
: "memory");
88
}
89
90
#endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */
91
92
static inline unsigned long arch_local_save_flags(void)
93
{
94
unsigned long flags;
95
asm volatile(" mfs %0, rmsr \n"
96
" nop \n"
97
: "=r"(flags)
98
:
99
: "memory");
100
return flags;
101
}
102
103
static inline void arch_local_irq_restore(unsigned long flags)
104
{
105
asm volatile(" mts rmsr, %0 \n"
106
" nop \n"
107
:
108
: "r"(flags)
109
: "memory");
110
}
111
112
static inline bool arch_irqs_disabled_flags(unsigned long flags)
113
{
114
return (flags & MSR_IE) == 0;
115
}
116
117
static inline bool arch_irqs_disabled(void)
118
{
119
return arch_irqs_disabled_flags(arch_local_save_flags());
120
}
121
122
#endif /* _ASM_MICROBLAZE_IRQFLAGS_H */
123
124