40 #include "../../rtt-config.h" 41 #ifndef __ORO_ARCH_I386__ 42 #define __ORO_ARCH_I386__ 44 #ifndef CONFIG_FORCE_UP 45 #define ORO_LOCK "lock ; " 52 #define ORO_ATOMIC_SETUP oro_atomic_set 53 #define ORO_ATOMIC_CLEANUP(v) 55 #define oro_atomic_read(v) ((v)->counter) 57 #define oro_atomic_set(v,i) (((v)->counter) = (i)) 106 __asm__ __volatile__(
113 #define smp_mb__before_oro_atomic_dec() barrier() 114 #define smp_mb__after_oro_atomic_dec() barrier() 115 #define smp_mb__before_oro_atomic_inc() barrier() 116 #define smp_mb__after_oro_atomic_inc() barrier() 118 #ifndef CONFIG_FORCE_UP 119 #define ORO_LOCK_PREFIX "lock ; " 121 #define ORO_LOCK_PREFIX "" 125 #define oro__xg(x) ((struct oro__xchg_dummy *)(x)) 127 static inline unsigned long __oro_cmpxchg(
volatile void *ptr,
unsigned long old,
128 unsigned long _new,
int size)
135 :
"q"(_new),
"m"(*
oro__xg(ptr)),
"0"(old)
141 :
"q"(_new),
"m"(*
oro__xg(ptr)),
"0"(old)
147 :
"q"(_new),
"m"(*
oro__xg(ptr)),
"0"(old)
154 #define oro_cmpxchg(ptr,o,n)\ 155 ((__typeof__(*(ptr)))__oro_cmpxchg((ptr),(unsigned long)(o),\ 156 (unsigned long)(n),sizeof(*(ptr)))) 159 #undef ORO_LOCK_PREFIX
int oro_atomic_inc_and_test(oro_atomic_t *a)
Increment a atomically and test for zero.
void oro_atomic_inc(oro_atomic_t *a)
Increment a atomically.
volatile long oro_atomic_t
void oro_atomic_sub(int n, oro_atomic_t *a, int n)
Substract n from a.
int oro_atomic_dec_and_test(oro_atomic_t *a)
Decrement a atomically and test for zero.
void oro_atomic_dec(oro_atomic_t *a)
Decrement a atomically.
Structure that contains an int for atomic operations.
void oro_atomic_add(oro_atomic_t *a, int n)
Add n to a.