Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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 {
116 }
117 
118 #endif /* __ASSEMBLY__ */
119 
120 #endif /* _ASM_SCORE_IRQFLAGS_H */