source: GPL/trunk/include/asm/atomic.h@ 424

Last change on this file since 424 was 118, checked in by Brendan Oakley, 18 years ago

Muted some compile warnings, moved atomic_dec_and_test from compat_22.h to atomic.h

File size: 1.2 KB
Line 
1#ifndef __ARCH_I386_ATOMIC__
2#define __ARCH_I386_ATOMIC__
3
4#define LOCK
5
6typedef struct { int counter; } atomic_t;
7
8#define ATOMIC_INIT(i) { (i) }
9
10#define atomic_read(v) ((v)->counter)
11#define atomic_set(v,i) (((v)->counter) = (i))
12
13void atomic_add(int i, volatile atomic_t *v);
14void atomic_sub(int i, volatile atomic_t *v);
15
16void atomic_inc(volatile atomic_t *v);
17#pragma aux atomic_inc = \
18 "lock inc dword ptr [eax]" \
19 parm [eax];
20
21void atomic_dec(volatile atomic_t *v);
22#pragma aux atomic_dec = \
23 "lock dec dword ptr [eax]" \
24 parm [eax];
25
26/**
27 * atomic_dec_and_test - decrement and test
28 * @v: pointer of type atomic_t
29 *
30 * Atomically decrements @v by 1 and
31 * returns true if the result is 0, or false for all other
32 * cases. Note that the guaranteed
33 * useful range of an atomic_t is only 24 bits.
34 */
35static inline int atomic_dec_and_test(volatile atomic_t *v)
36{
37 atomic_dec(v);
38 if (v->counter == 0)
39 return 1;
40 return 0;
41}
42
43extern int atomic_add_negative(int i, volatile atomic_t *v);
44
45/* These are x86-specific, used by some header files */
46#define atomic_clear_mask(mask, addr)
47
48#define atomic_set_mask(mask, addr)
49
50#endif
Note: See TracBrowser for help on using the repository browser.