Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
score
include
asm
irqflags.h
Go to the documentation of this file.
1
#ifndef _ASM_SCORE_IRQFLAGS_H
2
#define _ASM_SCORE_IRQFLAGS_H
3
4
#ifndef __ASSEMBLY__
5
6
#include <linux/types.h>
7
8
static
inline
unsigned
long
arch_local_save_flags
(
void
)
9
{
10
unsigned
long
flags
;
11
12
asm
volatile
(
13
" mfcr r8, cr0 \n"
14
" nop \n"
15
" nop \n"
16
" mv %0, r8 \n"
17
" nop \n"
18
" nop \n"
19
" nop \n"
20
" nop \n"
21
" nop \n"
22
" ldi r9, 0x1 \n"
23
" and %0, %0, r9 \n"
24
:
"=r"
(
flags
)
25
:
26
:
"r8"
,
"r9"
);
27
return
flags
;
28
}
29
30
static
inline
unsigned
long
arch_local_irq_save
(
void
)
31
{
32
unsigned
long
flags
;
33
34
asm
volatile
(
35
" mfcr r8, cr0 \n"
36
" li r9, 0xfffffffe \n"
37
" nop \n"
38
" mv %0, r8 \n"
39
" and r8, r8, r9 \n"
40
" mtcr r8, cr0 \n"
41
" nop \n"
42
" nop \n"
43
" nop \n"
44
" nop \n"
45
" nop \n"
46
:
"=r"
(
flags
)
47
:
48
:
"r8"
,
"r9"
,
"memory"
);
49
50
return
flags
;
51
}
52
53
static
inline
void
arch_local_irq_restore
(
unsigned
long
flags
)
54
{
55
asm
volatile
(
56
" mfcr r8, cr0 \n"
57
" ldi r9, 0x1 \n"
58
" and %0, %0, r9 \n"
59
" or r8, r8, %0 \n"
60
" mtcr r8, cr0 \n"
61
" nop \n"
62
" nop \n"
63
" nop \n"
64
" nop \n"
65
" nop \n"
66
:
67
:
"r"
(
flags
)
68
:
"r8"
,
"r9"
,
"memory"
);
69
}
70
71
static
inline
void
arch_local_irq_enable
(
void
)
72
{
73
asm
volatile
(
74
" mfcr r8,cr0 \n"
75
" nop \n"
76
" nop \n"
77
" ori r8,0x1 \n"
78
" mtcr r8,cr0 \n"
79
" nop \n"
80
" nop \n"
81
" nop \n"
82
" nop \n"
83
" nop \n"
84
:
85
:
86
:
"r8"
,
"memory"
);
87
}
88
89
static
inline
void
arch_local_irq_disable
(
void
)
90
{
91
asm
volatile
(
92
" mfcr r8,cr0 \n"
93
" nop \n"
94
" nop \n"
95
" srli r8,r8,1 \n"
96
" slli r8,r8,1 \n"
97
" mtcr r8,cr0 \n"
98
" nop \n"
99
" nop \n"
100
" nop \n"
101
" nop \n"
102
" nop \n"
103
:
104
:
105
:
"r8"
,
"memory"
);
106
}
107
108
static
inline
bool
arch_irqs_disabled_flags
(
unsigned
long
flags
)
109
{
110
return
!(flags & 1);
111
}
112
113
static
inline
bool
arch_irqs_disabled
(
void
)
114
{
115
return
arch_irqs_disabled_flags
(
arch_local_save_flags
());
116
}
117
118
#endif
/* __ASSEMBLY__ */
119
120
#endif
/* _ASM_SCORE_IRQFLAGS_H */
Generated on Thu Jan 10 2013 12:49:54 for Linux Kernel by
1.8.2