xref: /optee_os/lib/libutils/ext/include/atomic.h (revision 769d857b9cbf2cbfef1c4d3f64a2b8658ee73d9e)
1fb7ef469SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */
2e17dd72aSJens Wiklander /*
391334787SJens Wiklander  * Copyright (c) 2016-2019, 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 
2691334787SJens Wiklander static inline int atomic_load_int(int *p)
2791334787SJens Wiklander {
2891334787SJens Wiklander 	return __compiler_atomic_load(p);
2991334787SJens Wiklander }
3091334787SJens Wiklander 
314395abf7SJens Wiklander static inline unsigned int atomic_load_uint(unsigned int *p)
324395abf7SJens Wiklander {
334395abf7SJens Wiklander 	return __compiler_atomic_load(p);
344395abf7SJens Wiklander }
354395abf7SJens Wiklander 
36*769d857bSJens Wiklander static inline uint32_t atomic_load_u32(const uint32_t *p)
374395abf7SJens Wiklander {
384395abf7SJens Wiklander 	return __compiler_atomic_load(p);
394395abf7SJens Wiklander }
404395abf7SJens Wiklander 
4191334787SJens Wiklander static inline void atomic_store_int(int *p, int val)
4291334787SJens Wiklander {
4391334787SJens Wiklander 	__compiler_atomic_store(p, val);
4491334787SJens Wiklander }
4591334787SJens Wiklander 
464395abf7SJens Wiklander static inline void atomic_store_uint(unsigned int *p, unsigned int val)
474395abf7SJens Wiklander {
484395abf7SJens Wiklander 	__compiler_atomic_store(p, val);
494395abf7SJens Wiklander }
504395abf7SJens Wiklander 
514395abf7SJens Wiklander static inline void atomic_store_u32(uint32_t *p, uint32_t val)
524395abf7SJens Wiklander {
534395abf7SJens Wiklander 	__compiler_atomic_store(p, val);
544395abf7SJens Wiklander }
554395abf7SJens Wiklander 
56e17dd72aSJens Wiklander #endif /*__ATOMIC_H*/
57