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
atomic_cas_uint(unsigned int * p,unsigned int * oval,unsigned int nval)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
atomic_cas_u32(uint32_t * p,uint32_t * oval,uint32_t nval)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
atomic_load_int(int * p)2691334787SJens Wiklander static inline int atomic_load_int(int *p)
2791334787SJens Wiklander {
2891334787SJens Wiklander return __compiler_atomic_load(p);
2991334787SJens Wiklander }
3091334787SJens Wiklander
atomic_load_short(short int * p)31*64fd5a92SJerome Forissier static inline short int atomic_load_short(short int *p)
32*64fd5a92SJerome Forissier {
33*64fd5a92SJerome Forissier return __compiler_atomic_load(p);
34*64fd5a92SJerome Forissier }
35*64fd5a92SJerome Forissier
atomic_load_uint(unsigned int * p)364395abf7SJens Wiklander static inline unsigned int atomic_load_uint(unsigned int *p)
374395abf7SJens Wiklander {
384395abf7SJens Wiklander return __compiler_atomic_load(p);
394395abf7SJens Wiklander }
404395abf7SJens Wiklander
atomic_load_u32(const uint32_t * p)41769d857bSJens Wiklander static inline uint32_t atomic_load_u32(const uint32_t *p)
424395abf7SJens Wiklander {
434395abf7SJens Wiklander return __compiler_atomic_load(p);
444395abf7SJens Wiklander }
454395abf7SJens Wiklander
atomic_store_int(int * p,int val)4691334787SJens Wiklander static inline void atomic_store_int(int *p, int val)
4791334787SJens Wiklander {
4891334787SJens Wiklander __compiler_atomic_store(p, val);
4991334787SJens Wiklander }
5091334787SJens Wiklander
atomic_store_short(short int * p,short int val)51*64fd5a92SJerome Forissier static inline void atomic_store_short(short int *p, short int val)
52*64fd5a92SJerome Forissier {
53*64fd5a92SJerome Forissier __compiler_atomic_store(p, val);
54*64fd5a92SJerome Forissier }
55*64fd5a92SJerome Forissier
atomic_store_uint(unsigned int * p,unsigned int val)564395abf7SJens Wiklander static inline void atomic_store_uint(unsigned int *p, unsigned int val)
574395abf7SJens Wiklander {
584395abf7SJens Wiklander __compiler_atomic_store(p, val);
594395abf7SJens Wiklander }
604395abf7SJens Wiklander
atomic_store_u32(uint32_t * p,uint32_t val)614395abf7SJens Wiklander static inline void atomic_store_u32(uint32_t *p, uint32_t val)
624395abf7SJens Wiklander {
634395abf7SJens Wiklander __compiler_atomic_store(p, val);
644395abf7SJens Wiklander }
654395abf7SJens Wiklander
66e17dd72aSJens Wiklander #endif /*__ATOMIC_H*/
67