1 #ifndef __ASM_METAG_ATOMIC_H 2 #define __ASM_METAG_ATOMIC_H 3 4 #include <linux/compiler.h> 5 #include <linux/types.h> 6 #include <asm/cmpxchg.h> 7 #include <asm/barrier.h> 8 9 #if defined(CONFIG_METAG_ATOMICITY_IRQSOFF) 10 /* The simple UP case. */ 11 #include <asm-generic/atomic.h> 12 #else 13 14 #if defined(CONFIG_METAG_ATOMICITY_LOCK1) 15 #include <asm/atomic_lock1.h> 16 #else 17 #include <asm/atomic_lnkget.h> 18 #endif 19 20 #define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) 21 22 #define atomic_dec_return(v) atomic_sub_return(1, (v)) 23 #define atomic_inc_return(v) atomic_add_return(1, (v)) 24 25 /* 26 * atomic_inc_and_test - increment and test 27 * @v: pointer of type atomic_t 28 * 29 * Atomically increments @v by 1 30 * and returns true if the result is zero, or false for all 31 * other cases. 32 */ 33 #define atomic_inc_and_test(v) (atomic_inc_return(v) == 0) 34 35 #define atomic_sub_and_test(i, v) (atomic_sub_return((i), (v)) == 0) 36 #define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0) 37 38 #define atomic_inc(v) atomic_add(1, (v)) 39 #define atomic_dec(v) atomic_sub(1, (v)) 40 41 #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) 42 #define atomic_dec_if_positive(v) atomic_sub_if_positive(1, v) 43 44 #endif 45 46 #include <asm-generic/atomic64.h> 47 48 #endif /* __ASM_METAG_ATOMIC_H */ 49