locking/atomic: atomic64: support ARCH_ATOMIC
[linux-2.6-microblaze.git] / include / asm-generic / atomic64.h
index 370f01d..c8c7d9f 100644 (file)
@@ -15,19 +15,17 @@ typedef struct {
 
 #define ATOMIC64_INIT(i)       { (i) }
 
-extern s64 atomic64_read(const atomic64_t *v);
-extern void atomic64_set(atomic64_t *v, s64 i);
-
-#define atomic64_set_release(v, i)     atomic64_set((v), (i))
+extern s64 generic_atomic64_read(const atomic64_t *v);
+extern void generic_atomic64_set(atomic64_t *v, s64 i);
 
 #define ATOMIC64_OP(op)                                                        \
-extern void     atomic64_##op(s64 a, atomic64_t *v);
+extern void generic_atomic64_##op(s64 a, atomic64_t *v);
 
 #define ATOMIC64_OP_RETURN(op)                                         \
-extern s64 atomic64_##op##_return(s64 a, atomic64_t *v);
+extern s64 generic_atomic64_##op##_return(s64 a, atomic64_t *v);
 
 #define ATOMIC64_FETCH_OP(op)                                          \
-extern s64 atomic64_fetch_##op(s64 a, atomic64_t *v);
+extern s64 generic_atomic64_fetch_##op(s64 a, atomic64_t *v);
 
 #define ATOMIC64_OPS(op)       ATOMIC64_OP(op) ATOMIC64_OP_RETURN(op) ATOMIC64_FETCH_OP(op)
 
@@ -46,11 +44,61 @@ ATOMIC64_OPS(xor)
 #undef ATOMIC64_OP_RETURN
 #undef ATOMIC64_OP
 
-extern s64 atomic64_dec_if_positive(atomic64_t *v);
-#define atomic64_dec_if_positive atomic64_dec_if_positive
-extern s64 atomic64_cmpxchg(atomic64_t *v, s64 o, s64 n);
-extern s64 atomic64_xchg(atomic64_t *v, s64 new);
-extern s64 atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u);
-#define atomic64_fetch_add_unless atomic64_fetch_add_unless
+extern s64 generic_atomic64_dec_if_positive(atomic64_t *v);
+extern s64 generic_atomic64_cmpxchg(atomic64_t *v, s64 o, s64 n);
+extern s64 generic_atomic64_xchg(atomic64_t *v, s64 new);
+extern s64 generic_atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u);
+
+#ifdef CONFIG_ARCH_ATOMIC
+
+#define arch_atomic64_read             generic_atomic64_read
+#define arch_atomic64_set              generic_atomic64_set
+#define arch_atomic64_set_release      generic_atomic64_set
+
+#define arch_atomic64_add              generic_atomic64_add
+#define arch_atomic64_add_return       generic_atomic64_add_return
+#define arch_atomic64_fetch_add                generic_atomic64_fetch_add
+#define arch_atomic64_sub              generic_atomic64_sub
+#define arch_atomic64_sub_return       generic_atomic64_sub_return
+#define arch_atomic64_fetch_sub                generic_atomic64_fetch_sub
+
+#define arch_atomic64_and              generic_atomic64_and
+#define arch_atomic64_fetch_and                generic_atomic64_fetch_and
+#define arch_atomic64_or               generic_atomic64_or
+#define arch_atomic64_fetch_or         generic_atomic64_fetch_or
+#define arch_atomic64_xor              generic_atomic64_xor
+#define arch_atomic64_fetch_xor                generic_atomic64_fetch_xor
+
+#define arch_atomic64_dec_if_positive  generic_atomic64_dec_if_positive
+#define arch_atomic64_cmpxchg          generic_atomic64_cmpxchg
+#define arch_atomic64_xchg             generic_atomic64_xchg
+#define arch_atomic64_fetch_add_unless generic_atomic64_fetch_add_unless
+
+#else /* CONFIG_ARCH_ATOMIC */
+
+#define atomic64_read                  generic_atomic64_read
+#define atomic64_set                   generic_atomic64_set
+#define atomic64_set_release           generic_atomic64_set
+
+#define atomic64_add                   generic_atomic64_add
+#define atomic64_add_return            generic_atomic64_add_return
+#define atomic64_fetch_add             generic_atomic64_fetch_add
+#define atomic64_sub                   generic_atomic64_sub
+#define atomic64_sub_return            generic_atomic64_sub_return
+#define atomic64_fetch_sub             generic_atomic64_fetch_sub
+
+#define atomic64_and                   generic_atomic64_and
+#define atomic64_fetch_and             generic_atomic64_fetch_and
+#define atomic64_or                    generic_atomic64_or
+#define atomic64_fetch_or              generic_atomic64_fetch_or
+#define atomic64_xor                   generic_atomic64_xor
+#define atomic64_fetch_xor             generic_atomic64_fetch_xor
+
+#define atomic64_dec_if_positive       generic_atomic64_dec_if_positive
+#define atomic64_cmpxchg               generic_atomic64_cmpxchg
+#define atomic64_xchg                  generic_atomic64_xchg
+#define atomic64_fetch_add_unless      generic_atomic64_fetch_add_unless
+
+#endif /* CONFIG_ARCH_ATOMIC */
 
 #endif  /*  _ASM_GENERIC_ATOMIC64_H  */