2 * This confidential and proprietary software may be used only as
3 * authorised by a licensing agreement from ARM Limited
4 * (C) COPYRIGHT 2008-2011 ARM Limited
6 * The entire notice above must be reproduced on all authorised
7 * copies and copies may only be made to the extent permitted
8 * by a licensing agreement from ARM Limited.
13 * Implementation of the OS abstraction layer for the kernel device driver
16 #ifndef _OSK_ARCH_ATOMICS_H_
17 #define _OSK_ARCH_ATOMICS_H_
20 #error "Include mali_osk.h directly"
23 OSK_STATIC_INLINE u32 osk_atomic_sub(osk_atomic * atom, u32 value)
25 OSK_ASSERT(NULL != atom);
26 return atomic_sub_return(value, atom);
29 OSK_STATIC_INLINE u32 osk_atomic_add(osk_atomic * atom, u32 value)
31 OSK_ASSERT(NULL != atom);
32 return atomic_add_return(value, atom);
35 OSK_STATIC_INLINE u32 osk_atomic_dec(osk_atomic * atom)
37 OSK_ASSERT(NULL != atom);
38 return osk_atomic_sub(atom, 1);
41 OSK_STATIC_INLINE u32 osk_atomic_inc(osk_atomic * atom)
43 OSK_ASSERT(NULL != atom);
44 return osk_atomic_add(atom, 1);
47 OSK_STATIC_INLINE void osk_atomic_set(osk_atomic * atom, u32 value)
49 OSK_ASSERT(NULL != atom);
50 atomic_set(atom, value);
53 OSK_STATIC_INLINE u32 osk_atomic_get(osk_atomic * atom)
55 OSK_ASSERT(NULL != atom);
56 return atomic_read(atom);
59 OSK_STATIC_INLINE u32 osk_atomic_compare_and_swap(osk_atomic * atom, u32 old_value, u32 new_value)
61 OSK_ASSERT(NULL != atom);
62 return atomic_cmpxchg(atom, old_value, new_value);
65 #endif /* _OSK_ARCH_ATOMICS_H_ */