Commit | Line | Data |
---|---|---|
96f1050d | 1 | /* |
ae41f32e | 2 | * Copyright 2004-2011 Analog Devices Inc. |
96956450 MF |
3 | * |
4 | * Licensed under the GPL-2 or later. | |
5 | */ | |
96f1050d | 6 | |
1394f032 BW |
7 | #ifndef __ARCH_BLACKFIN_ATOMIC__ |
8 | #define __ARCH_BLACKFIN_ATOMIC__ | |
9 | ||
3bed8d67 DH |
10 | #include <asm/cmpxchg.h> |
11 | ||
ae41f32e | 12 | #ifdef CONFIG_SMP |
3d150630 | 13 | |
5b083091 | 14 | #include <asm/barrier.h> |
ae41f32e | 15 | #include <linux/linkage.h> |
5b083091 | 16 | #include <linux/types.h> |
6b3087c6 GY |
17 | |
18 | asmlinkage int __raw_uncached_fetch_asm(const volatile int *ptr); | |
d835b6c4 PZ |
19 | asmlinkage int __raw_atomic_add_asm(volatile int *ptr, int value); |
20 | ||
21 | asmlinkage int __raw_atomic_and_asm(volatile int *ptr, int value); | |
22 | asmlinkage int __raw_atomic_or_asm(volatile int *ptr, int value); | |
6b3087c6 | 23 | asmlinkage int __raw_atomic_xor_asm(volatile int *ptr, int value); |
6b3087c6 GY |
24 | asmlinkage int __raw_atomic_test_asm(const volatile int *ptr, int value); |
25 | ||
ae41f32e | 26 | #define atomic_read(v) __raw_uncached_fetch_asm(&(v)->counter) |
6b3087c6 | 27 | |
d835b6c4 PZ |
28 | #define atomic_add_return(i, v) __raw_atomic_add_asm(&(v)->counter, i) |
29 | #define atomic_sub_return(i, v) __raw_atomic_add_asm(&(v)->counter, -(i)) | |
30 | ||
d835b6c4 PZ |
31 | #define atomic_or(i, v) (void)__raw_atomic_or_asm(&(v)->counter, i) |
32 | #define atomic_and(i, v) (void)__raw_atomic_and_asm(&(v)->counter, i) | |
33 | #define atomic_xor(i, v) (void)__raw_atomic_xor_asm(&(v)->counter, i) | |
34 | ||
3d150630 MF |
35 | #endif |
36 | ||
ae41f32e MF |
37 | #include <asm-generic/atomic.h> |
38 | ||
3d150630 | 39 | #endif |