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