0001
0002
0003
0004
0005
0006
0007
0008 #ifndef _ASM_GENERIC_ATOMIC64_H
0009 #define _ASM_GENERIC_ATOMIC64_H
0010 #include <linux/types.h>
0011
0012 typedef struct {
0013 s64 counter;
0014 } atomic64_t;
0015
0016 #define ATOMIC64_INIT(i) { (i) }
0017
0018 extern s64 generic_atomic64_read(const atomic64_t *v);
0019 extern void generic_atomic64_set(atomic64_t *v, s64 i);
0020
0021 #define ATOMIC64_OP(op) \
0022 extern void generic_atomic64_##op(s64 a, atomic64_t *v);
0023
0024 #define ATOMIC64_OP_RETURN(op) \
0025 extern s64 generic_atomic64_##op##_return(s64 a, atomic64_t *v);
0026
0027 #define ATOMIC64_FETCH_OP(op) \
0028 extern s64 generic_atomic64_fetch_##op(s64 a, atomic64_t *v);
0029
0030 #define ATOMIC64_OPS(op) ATOMIC64_OP(op) ATOMIC64_OP_RETURN(op) ATOMIC64_FETCH_OP(op)
0031
0032 ATOMIC64_OPS(add)
0033 ATOMIC64_OPS(sub)
0034
0035 #undef ATOMIC64_OPS
0036 #define ATOMIC64_OPS(op) ATOMIC64_OP(op) ATOMIC64_FETCH_OP(op)
0037
0038 ATOMIC64_OPS(and)
0039 ATOMIC64_OPS(or)
0040 ATOMIC64_OPS(xor)
0041
0042 #undef ATOMIC64_OPS
0043 #undef ATOMIC64_FETCH_OP
0044 #undef ATOMIC64_OP_RETURN
0045 #undef ATOMIC64_OP
0046
0047 extern s64 generic_atomic64_dec_if_positive(atomic64_t *v);
0048 extern s64 generic_atomic64_cmpxchg(atomic64_t *v, s64 o, s64 n);
0049 extern s64 generic_atomic64_xchg(atomic64_t *v, s64 new);
0050 extern s64 generic_atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u);
0051
0052 #define arch_atomic64_read generic_atomic64_read
0053 #define arch_atomic64_set generic_atomic64_set
0054 #define arch_atomic64_set_release generic_atomic64_set
0055
0056 #define arch_atomic64_add generic_atomic64_add
0057 #define arch_atomic64_add_return generic_atomic64_add_return
0058 #define arch_atomic64_fetch_add generic_atomic64_fetch_add
0059 #define arch_atomic64_sub generic_atomic64_sub
0060 #define arch_atomic64_sub_return generic_atomic64_sub_return
0061 #define arch_atomic64_fetch_sub generic_atomic64_fetch_sub
0062
0063 #define arch_atomic64_and generic_atomic64_and
0064 #define arch_atomic64_fetch_and generic_atomic64_fetch_and
0065 #define arch_atomic64_or generic_atomic64_or
0066 #define arch_atomic64_fetch_or generic_atomic64_fetch_or
0067 #define arch_atomic64_xor generic_atomic64_xor
0068 #define arch_atomic64_fetch_xor generic_atomic64_fetch_xor
0069
0070 #define arch_atomic64_dec_if_positive generic_atomic64_dec_if_positive
0071 #define arch_atomic64_cmpxchg generic_atomic64_cmpxchg
0072 #define arch_atomic64_xchg generic_atomic64_xchg
0073 #define arch_atomic64_fetch_add_unless generic_atomic64_fetch_add_unless
0074
0075 #endif