diff options
Diffstat (limited to 'core/host/atomic.h')
-rw-r--r-- | core/host/atomic.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/core/host/atomic.h b/core/host/atomic.h new file mode 100644 index 0000000000..77e9cc6ba8 --- /dev/null +++ b/core/host/atomic.h @@ -0,0 +1,37 @@ +/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/* Atomic operations for emulator */ + +#ifndef __CROS_EC_ATOMIC_H +#define __CROS_EC_ATOMIC_H + +#include "common.h" + +static inline void atomic_clear(uint32_t *addr, uint32_t bits) +{ + __sync_and_and_fetch(addr, ~bits); +} + +static inline void atomic_or(uint32_t *addr, uint32_t bits) +{ + __sync_or_and_fetch(addr, bits); +} + +static inline void atomic_add(uint32_t *addr, uint32_t value) +{ + __sync_add_and_fetch(addr, value); +} + +static inline void atomic_sub(uint32_t *addr, uint32_t value) +{ + __sync_sub_and_fetch(addr, value); +} + +static inline uint32_t atomic_read_clear(uint32_t *addr) +{ + return __sync_fetch_and_and(addr, 0); +} +#endif /* __CROS_EC_ATOMIC_H */ |