14 #include <asm/irqflags.h>
15 #include <asm/cmpxchg.h>
26 #define ATOMIC_INIT(i) { (i) }
37 #define atomic_read(v) (ACCESS_ONCE((v)->counter))
47 #define atomic_set(v, i) (((v)->counter) = (i))
64 "1: mov %4,(_AAR,%3) \n"
65 " mov (_ADR,%3),%1 \n"
67 " mov %1,(_ADR,%3) \n"
68 " mov (_ADR,%3),%0 \n"
69 " mov (_ASR,%3),%0 \n"
73 :
"a"(ATOMIC_OPS_BASE_ADDR),
"r"(&v->
counter),
"r"(i)
79 flags = arch_local_cli_save();
103 "1: mov %4,(_AAR,%3) \n"
104 " mov (_ADR,%3),%1 \n"
106 " mov %1,(_ADR,%3) \n"
107 " mov (_ADR,%3),%0 \n"
108 " mov (_ASR,%3),%0 \n"
112 :
"a"(ATOMIC_OPS_BASE_ADDR),
"r"(&v->
counter),
"r"(i)
117 flags = arch_local_cli_save();
151 #define atomic_dec_return(v) atomic_sub_return(1, (v))
152 #define atomic_inc_return(v) atomic_add_return(1, (v))
154 #define atomic_sub_and_test(i, v) (atomic_sub_return((i), (v)) == 0)
155 #define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0)
156 #define atomic_inc_and_test(v) (atomic_add_return(1, (v)) == 0)
158 #define __atomic_add_unless(v, a, u) \
161 c = atomic_read(v); \
162 while (c != (u) && (old = atomic_cmpxchg((v), c, c + (a))) != c) \
167 #define atomic_xchg(ptr, v) (xchg(&(ptr)->counter, (v)))
168 #define atomic_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), (old), (new)))
183 "1: mov %3,(_AAR,%2) \n"
184 " mov (_ADR,%2),%0 \n"
186 " mov %0,(_ADR,%2) \n"
187 " mov (_ADR,%2),%0 \n"
188 " mov (_ASR,%2),%0 \n"
191 :
"=&r"(
status),
"=m"(*addr)
192 :
"a"(ATOMIC_OPS_BASE_ADDR),
"r"(addr),
"r"(~mask)
198 flags = arch_local_cli_save();
211 static inline void atomic_set_mask(
unsigned long mask,
unsigned long *addr)
217 "1: mov %3,(_AAR,%2) \n"
218 " mov (_ADR,%2),%0 \n"
220 " mov %0,(_ADR,%2) \n"
221 " mov (_ADR,%2),%0 \n"
222 " mov (_ASR,%2),%0 \n"
225 :
"=&r"(
status),
"=m"(*addr)
226 :
"a"(ATOMIC_OPS_BASE_ADDR),
"r"(addr),
"r"(
mask)
231 flags = arch_local_cli_save();
238 #define smp_mb__before_atomic_dec() barrier()
239 #define smp_mb__after_atomic_dec() barrier()
240 #define smp_mb__before_atomic_inc() barrier()
241 #define smp_mb__after_atomic_inc() barrier()