brintos

brintos / linux-shallow public Read only

0
0
Text · 2.5 KiB · 100d24b Raw
76 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * Generic implementation of 64-bit atomics using spinlocks,4 * useful on processors that don't have 64-bit atomic instructions.5 *6 * Copyright © 2009 Paul Mackerras, IBM Corp. <paulus@au1.ibm.com>7 */8#ifndef _ASM_GENERIC_ATOMIC64_H9#define _ASM_GENERIC_ATOMIC64_H10#include <linux/types.h>11 12typedef struct {13	s64 counter;14} atomic64_t;15 16#define ATOMIC64_INIT(i)	{ (i) }17 18extern s64 generic_atomic64_read(const atomic64_t *v);19extern void generic_atomic64_set(atomic64_t *v, s64 i);20 21#define ATOMIC64_OP(op)							\22extern void generic_atomic64_##op(s64 a, atomic64_t *v);23 24#define ATOMIC64_OP_RETURN(op)						\25extern s64 generic_atomic64_##op##_return(s64 a, atomic64_t *v);26 27#define ATOMIC64_FETCH_OP(op)						\28extern s64 generic_atomic64_fetch_##op(s64 a, atomic64_t *v);29 30#define ATOMIC64_OPS(op)	ATOMIC64_OP(op) ATOMIC64_OP_RETURN(op) ATOMIC64_FETCH_OP(op)31 32ATOMIC64_OPS(add)33ATOMIC64_OPS(sub)34 35#undef ATOMIC64_OPS36#define ATOMIC64_OPS(op)	ATOMIC64_OP(op) ATOMIC64_FETCH_OP(op)37 38ATOMIC64_OPS(and)39ATOMIC64_OPS(or)40ATOMIC64_OPS(xor)41 42#undef ATOMIC64_OPS43#undef ATOMIC64_FETCH_OP44#undef ATOMIC64_OP_RETURN45#undef ATOMIC64_OP46 47extern s64 generic_atomic64_dec_if_positive(atomic64_t *v);48extern s64 generic_atomic64_cmpxchg(atomic64_t *v, s64 o, s64 n);49extern s64 generic_atomic64_xchg(atomic64_t *v, s64 new);50extern s64 generic_atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u);51 52#define arch_atomic64_read		generic_atomic64_read53#define arch_atomic64_set		generic_atomic64_set54#define arch_atomic64_set_release	generic_atomic64_set55 56#define arch_atomic64_add		generic_atomic64_add57#define arch_atomic64_add_return	generic_atomic64_add_return58#define arch_atomic64_fetch_add		generic_atomic64_fetch_add59#define arch_atomic64_sub		generic_atomic64_sub60#define arch_atomic64_sub_return	generic_atomic64_sub_return61#define arch_atomic64_fetch_sub		generic_atomic64_fetch_sub62 63#define arch_atomic64_and		generic_atomic64_and64#define arch_atomic64_fetch_and		generic_atomic64_fetch_and65#define arch_atomic64_or		generic_atomic64_or66#define arch_atomic64_fetch_or		generic_atomic64_fetch_or67#define arch_atomic64_xor		generic_atomic64_xor68#define arch_atomic64_fetch_xor		generic_atomic64_fetch_xor69 70#define arch_atomic64_dec_if_positive	generic_atomic64_dec_if_positive71#define arch_atomic64_cmpxchg		generic_atomic64_cmpxchg72#define arch_atomic64_xchg		generic_atomic64_xchg73#define arch_atomic64_fetch_add_unless	generic_atomic64_fetch_add_unless74 75#endif  /*  _ASM_GENERIC_ATOMIC64_H  */76