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 /*
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 notrace 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 notrace 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 notrace 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 notrace 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 notrace 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 notrace 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 notrace 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 notrace 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 notrace bool arch_irqs_disabled_flags(unsigned long flags)
113 {
114  return (flags & MSR_IE) == 0;
115 }
116 
117 static inline notrace bool arch_irqs_disabled(void)
118 {
120 }
121 
122 #endif /* _ASM_MICROBLAZE_IRQFLAGS_H */