diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-sparc/irqflags.h | 39 | ||||
-rw-r--r-- | include/asm-sparc/system.h | 22 |
2 files changed, 41 insertions, 20 deletions
diff --git a/include/asm-sparc/irqflags.h b/include/asm-sparc/irqflags.h new file mode 100644 index 000000000000..db398fb32826 --- /dev/null +++ b/include/asm-sparc/irqflags.h | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * include/asm-sparc/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 | * raw_local_irq_*() functions from the lowlevel headers. | ||
9 | */ | ||
10 | #ifndef _ASM_IRQFLAGS_H | ||
11 | #define _ASM_IRQFLAGS_H | ||
12 | |||
13 | #ifndef __ASSEMBLY__ | ||
14 | |||
15 | extern void raw_local_irq_restore(unsigned long); | ||
16 | extern unsigned long __raw_local_irq_save(void); | ||
17 | extern void raw_local_irq_enable(void); | ||
18 | |||
19 | static inline unsigned long getipl(void) | ||
20 | { | ||
21 | unsigned long retval; | ||
22 | |||
23 | __asm__ __volatile__("rd %%psr, %0" : "=r" (retval)); | ||
24 | return retval; | ||
25 | } | ||
26 | |||
27 | #define raw_local_save_flags(flags) ((flags) = getipl()) | ||
28 | #define raw_local_irq_save(flags) ((flags) = __raw_local_irq_save()) | ||
29 | #define raw_local_irq_disable() ((void) __raw_local_irq_save()) | ||
30 | #define raw_irqs_disabled() ((getipl() & PSR_PIL) != 0) | ||
31 | |||
32 | static inline int raw_irqs_disabled_flags(unsigned long flags) | ||
33 | { | ||
34 | return ((flags & PSR_PIL) != 0); | ||
35 | } | ||
36 | |||
37 | #endif /* (__ASSEMBLY__) */ | ||
38 | |||
39 | #endif /* !(_ASM_IRQFLAGS_H) */ | ||
diff --git a/include/asm-sparc/system.h b/include/asm-sparc/system.h index d1a2572e3f55..8c259de02614 100644 --- a/include/asm-sparc/system.h +++ b/include/asm-sparc/system.h | |||
@@ -15,6 +15,8 @@ | |||
15 | 15 | ||
16 | #ifndef __ASSEMBLY__ | 16 | #ifndef __ASSEMBLY__ |
17 | 17 | ||
18 | #include <linux/irqflags.h> | ||
19 | |||
18 | /* | 20 | /* |
19 | * Sparc (general) CPU types | 21 | * Sparc (general) CPU types |
20 | */ | 22 | */ |
@@ -164,26 +166,6 @@ extern void fpsave(unsigned long *fpregs, unsigned long *fsr, | |||
164 | "o0", "o1", "o2", "o3", "o7"); \ | 166 | "o0", "o1", "o2", "o3", "o7"); \ |
165 | } while(0) | 167 | } while(0) |
166 | 168 | ||
167 | /* | ||
168 | * Changing the IRQ level on the Sparc. | ||
169 | */ | ||
170 | extern void local_irq_restore(unsigned long); | ||
171 | extern unsigned long __local_irq_save(void); | ||
172 | extern void local_irq_enable(void); | ||
173 | |||
174 | static inline unsigned long getipl(void) | ||
175 | { | ||
176 | unsigned long retval; | ||
177 | |||
178 | __asm__ __volatile__("rd %%psr, %0" : "=r" (retval)); | ||
179 | return retval; | ||
180 | } | ||
181 | |||
182 | #define local_save_flags(flags) ((flags) = getipl()) | ||
183 | #define local_irq_save(flags) ((flags) = __local_irq_save()) | ||
184 | #define local_irq_disable() ((void) __local_irq_save()) | ||
185 | #define irqs_disabled() ((getipl() & PSR_PIL) != 0) | ||
186 | |||
187 | /* XXX Change this if we ever use a PSO mode kernel. */ | 169 | /* XXX Change this if we ever use a PSO mode kernel. */ |
188 | #define mb() __asm__ __volatile__ ("" : : : "memory") | 170 | #define mb() __asm__ __volatile__ ("" : : : "memory") |
189 | #define rmb() mb() | 171 | #define rmb() mb() |