xref: /optee_os/lib/libutils/ext/include/atomic.h (revision 1bb929836182ecb96d2d9d268daa807c67596396)
1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*
3  * Copyright (c) 2016-2017, Linaro Limited
4  */
5 
6 #ifndef __ATOMIC_H
7 #define __ATOMIC_H
8 
9 #include <compiler.h>
10 #include <types_ext.h>
11 
12 uint32_t atomic_inc32(volatile uint32_t *v);
13 uint32_t atomic_dec32(volatile uint32_t *v);
14 
15 static inline bool atomic_cas_uint(unsigned int *p, unsigned int *oval,
16 				   unsigned int nval)
17 {
18 	return __compiler_compare_and_swap(p, oval, nval);
19 }
20 
21 static inline bool atomic_cas_u32(uint32_t *p, uint32_t *oval, uint32_t nval)
22 {
23 	return __compiler_compare_and_swap(p, oval, nval);
24 }
25 
26 static inline unsigned int atomic_load_uint(unsigned int *p)
27 {
28 	return __compiler_atomic_load(p);
29 }
30 
31 static inline unsigned int atomic_load_u32(unsigned int *p)
32 {
33 	return __compiler_atomic_load(p);
34 }
35 
36 static inline void atomic_store_uint(unsigned int *p, unsigned int val)
37 {
38 	__compiler_atomic_store(p, val);
39 }
40 
41 static inline void atomic_store_u32(uint32_t *p, uint32_t val)
42 {
43 	__compiler_atomic_store(p, val);
44 }
45 
46 #endif /*__ATOMIC_H*/
47