1 /* 2 * SPDX-License-Identifier: BSD-3-Clause 3 * SPDX-FileCopyrightText: Copyright TF-RMM Contributors. 4 */ 5 6 #ifndef MEMORY_H 7 #define MEMORY_H 8 9 #include <stddef.h> 10 #include <stdint.h> 11 12 /* Single-Copy Atomic 64-bit write */ __sca_write64(uint64_t * ptr,uint64_t val)13static inline void __sca_write64(uint64_t *ptr, uint64_t val) 14 { 15 *ptr = val; 16 } 17 #define SCA_WRITE64(_p, _v) __sca_write64((void *)(_p), ((uint64_t)(_v))) 18 19 /* Single-Copy Atomic 64-bit write with RELEASE memory ordering semantics*/ __sca_write64_release(uint64_t * ptr,uint64_t val)20static inline void __sca_write64_release(uint64_t *ptr, uint64_t val) 21 { 22 *ptr = val; 23 } 24 #define SCA_WRITE64_RELEASE(_p, _v) __sca_write64_release((void *)(_p), ((uint64_t)(_v))) 25 26 /* Single-Copy Atomic 64-bit read */ __sca_read64(uint64_t * ptr)27static inline uint64_t __sca_read64(uint64_t *ptr) 28 { 29 return *ptr; 30 } 31 #define SCA_READ64(_p) ((typeof(*(_p)))__sca_read64((void *)(_p))) 32 33 /* Single-Copy Atomic 64-bit read with ACQUIRE memory ordering semantics */ __sca_read64_acquire(uint64_t * ptr)34static inline uint64_t __sca_read64_acquire(uint64_t *ptr) 35 { 36 return *ptr; 37 } 38 #define SCA_READ64_ACQUIRE(_p) ((typeof(*(_p)))__sca_read64_acquire((void *)(_p))) 39 40 #endif /* MEMORY_H */ 41