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
sparc
include
asm
irqflags_64.h
Go to the documentation of this file.
1
/*
2
* include/asm/irqflags.h
3
*
4
* IRQ flags handling
5
*
6
* This file gets included from lowlevel asm headers too, to provide
7
* wrapped versions of the local_irq_*() APIs, based on the
8
* arch_local_irq_*() functions from the lowlevel headers.
9
*/
10
#ifndef _ASM_IRQFLAGS_H
11
#define _ASM_IRQFLAGS_H
12
13
#include <
asm/pil.h
>
14
15
#ifndef __ASSEMBLY__
16
17
static
inline
notrace
unsigned
long
arch_local_save_flags
(
void
)
18
{
19
unsigned
long
flags
;
20
21
__asm__
__volatile__(
22
"rdpr %%pil, %0"
23
:
"=r"
(flags)
24
);
25
26
return
flags
;
27
}
28
29
static
inline
notrace
void
arch_local_irq_restore
(
unsigned
long
flags)
30
{
31
__asm__
__volatile__(
32
"wrpr %0, %%pil"
33
:
/* no output */
34
:
"r"
(flags)
35
:
"memory"
36
);
37
}
38
39
static
inline
notrace
void
arch_local_irq_disable
(
void
)
40
{
41
__asm__
__volatile__(
42
"wrpr %0, %%pil"
43
:
/* no outputs */
44
:
"i"
(
PIL_NORMAL_MAX
)
45
:
"memory"
46
);
47
}
48
49
static
inline
notrace
void
arch_local_irq_enable
(
void
)
50
{
51
__asm__
__volatile__(
52
"wrpr 0, %%pil"
53
:
/* no outputs */
54
:
/* no inputs */
55
:
"memory"
56
);
57
}
58
59
static
inline
notrace
int
arch_irqs_disabled_flags
(
unsigned
long
flags)
60
{
61
return
(flags > 0);
62
}
63
64
static
inline
notrace
int
arch_irqs_disabled
(
void
)
65
{
66
return
arch_irqs_disabled_flags
(
arch_local_save_flags
());
67
}
68
69
static
inline
notrace
unsigned
long
arch_local_irq_save
(
void
)
70
{
71
unsigned
long
flags
,
tmp
;
72
73
/* Disable interrupts to PIL_NORMAL_MAX unless we already
74
* are using PIL_NMI, in which case PIL_NMI is retained.
75
*
76
* The only values we ever program into the %pil are 0,
77
* PIL_NORMAL_MAX and PIL_NMI.
78
*
79
* Since PIL_NMI is the largest %pil value and all bits are
80
* set in it (0xf), it doesn't matter what PIL_NORMAL_MAX
81
* actually is.
82
*/
83
__asm__
__volatile__(
84
"rdpr %%pil, %0\n\t"
85
"or %0, %2, %1\n\t"
86
"wrpr %1, 0x0, %%pil"
87
:
"=r"
(flags),
"=r"
(tmp)
88
:
"i"
(
PIL_NORMAL_MAX
)
89
:
"memory"
90
);
91
92
return
flags
;
93
}
94
95
#endif
/* (__ASSEMBLY__) */
96
97
#endif
/* !(_ASM_IRQFLAGS_H) */
Generated on Thu Jan 10 2013 13:18:10 for Linux Kernel by
1.8.2