1fb7ef469SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */ 2e17dd72aSJens Wiklander /* 3*91334787SJens 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 26*91334787SJens Wiklander static inline int atomic_load_int(int *p) 27*91334787SJens Wiklander { 28*91334787SJens Wiklander return __compiler_atomic_load(p); 29*91334787SJens Wiklander } 30*91334787SJens 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 364395abf7SJens Wiklander static inline unsigned int atomic_load_u32(unsigned int *p) 374395abf7SJens Wiklander { 384395abf7SJens Wiklander return __compiler_atomic_load(p); 394395abf7SJens Wiklander } 404395abf7SJens Wiklander 41*91334787SJens Wiklander static inline void atomic_store_int(int *p, int val) 42*91334787SJens Wiklander { 43*91334787SJens Wiklander __compiler_atomic_store(p, val); 44*91334787SJens Wiklander } 45*91334787SJens 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