xref: /optee_os/lib/libutils/ext/include/atomic.h (revision fb7ef469dfeb735e60383ad0e7410fe62dd97eb1)
1*fb7ef469SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */
2e17dd72aSJens Wiklander /*
34395abf7SJens Wiklander  * Copyright (c) 2016-2017, Linaro Limited
4e17dd72aSJens Wiklander  */
5e17dd72aSJens Wiklander 
6e17dd72aSJens Wiklander #ifndef __ATOMIC_H
7e17dd72aSJens Wiklander #define __ATOMIC_H
8e17dd72aSJens Wiklander 
94395abf7SJens Wiklander #include <compiler.h>
10e17dd72aSJens Wiklander #include <types_ext.h>
11e17dd72aSJens Wiklander 
12e17dd72aSJens Wiklander uint32_t atomic_inc32(volatile uint32_t *v);
13e17dd72aSJens Wiklander uint32_t atomic_dec32(volatile uint32_t *v);
14e17dd72aSJens Wiklander 
154395abf7SJens Wiklander static inline bool atomic_cas_uint(unsigned int *p, unsigned int *oval,
164395abf7SJens Wiklander 				   unsigned int nval)
174395abf7SJens Wiklander {
184395abf7SJens Wiklander 	return __compiler_compare_and_swap(p, oval, nval);
194395abf7SJens Wiklander }
204395abf7SJens Wiklander 
214395abf7SJens Wiklander static inline bool atomic_cas_u32(uint32_t *p, uint32_t *oval, uint32_t nval)
224395abf7SJens Wiklander {
234395abf7SJens Wiklander 	return __compiler_compare_and_swap(p, oval, nval);
244395abf7SJens Wiklander }
254395abf7SJens Wiklander 
264395abf7SJens Wiklander static inline unsigned int atomic_load_uint(unsigned int *p)
274395abf7SJens Wiklander {
284395abf7SJens Wiklander 	return __compiler_atomic_load(p);
294395abf7SJens Wiklander }
304395abf7SJens Wiklander 
314395abf7SJens Wiklander static inline unsigned int atomic_load_u32(unsigned int *p)
324395abf7SJens Wiklander {
334395abf7SJens Wiklander 	return __compiler_atomic_load(p);
344395abf7SJens Wiklander }
354395abf7SJens Wiklander 
364395abf7SJens Wiklander static inline void atomic_store_uint(unsigned int *p, unsigned int val)
374395abf7SJens Wiklander {
384395abf7SJens Wiklander 	__compiler_atomic_store(p, val);
394395abf7SJens Wiklander }
404395abf7SJens Wiklander 
414395abf7SJens Wiklander static inline void atomic_store_u32(uint32_t *p, uint32_t val)
424395abf7SJens Wiklander {
434395abf7SJens Wiklander 	__compiler_atomic_store(p, val);
444395abf7SJens Wiklander }
454395abf7SJens Wiklander 
46e17dd72aSJens Wiklander #endif /*__ATOMIC_H*/
47