diff options
Diffstat (limited to 'include/asm-xtensa/bitops.h')
-rw-r--r-- | include/asm-xtensa/bitops.h | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/include/asm-xtensa/bitops.h b/include/asm-xtensa/bitops.h deleted file mode 100644 index 6c3930397bd3..000000000000 --- a/include/asm-xtensa/bitops.h +++ /dev/null | |||
@@ -1,132 +0,0 @@ | |||
1 | /* | ||
2 | * include/asm-xtensa/bitops.h | ||
3 | * | ||
4 | * Atomic operations that C can't guarantee us.Useful for resource counting etc. | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file "COPYING" in the main directory of this archive | ||
8 | * for more details. | ||
9 | * | ||
10 | * Copyright (C) 2001 - 2007 Tensilica Inc. | ||
11 | */ | ||
12 | |||
13 | #ifndef _XTENSA_BITOPS_H | ||
14 | #define _XTENSA_BITOPS_H | ||
15 | |||
16 | #ifdef __KERNEL__ | ||
17 | |||
18 | #ifndef _LINUX_BITOPS_H | ||
19 | #error only <linux/bitops.h> can be included directly | ||
20 | #endif | ||
21 | |||
22 | #include <asm/processor.h> | ||
23 | #include <asm/byteorder.h> | ||
24 | #include <asm/system.h> | ||
25 | |||
26 | #ifdef CONFIG_SMP | ||
27 | # error SMP not supported on this architecture | ||
28 | #endif | ||
29 | |||
30 | #define smp_mb__before_clear_bit() barrier() | ||
31 | #define smp_mb__after_clear_bit() barrier() | ||
32 | |||
33 | #include <asm-generic/bitops/atomic.h> | ||
34 | #include <asm-generic/bitops/non-atomic.h> | ||
35 | |||
36 | #if XCHAL_HAVE_NSA | ||
37 | |||
38 | static inline unsigned long __cntlz (unsigned long x) | ||
39 | { | ||
40 | int lz; | ||
41 | asm ("nsau %0, %1" : "=r" (lz) : "r" (x)); | ||
42 | return lz; | ||
43 | } | ||
44 | |||
45 | /* | ||
46 | * ffz: Find first zero in word. Undefined if no zero exists. | ||
47 | * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1). | ||
48 | */ | ||
49 | |||
50 | static inline int ffz(unsigned long x) | ||
51 | { | ||
52 | return 31 - __cntlz(~x & -~x); | ||
53 | } | ||
54 | |||
55 | /* | ||
56 | * __ffs: Find first bit set in word. Return 0 for bit 0 | ||
57 | */ | ||
58 | |||
59 | static inline int __ffs(unsigned long x) | ||
60 | { | ||
61 | return 31 - __cntlz(x & -x); | ||
62 | } | ||
63 | |||
64 | /* | ||
65 | * ffs: Find first bit set in word. This is defined the same way as | ||
66 | * the libc and compiler builtin ffs routines, therefore | ||
67 | * differs in spirit from the above ffz (man ffs). | ||
68 | */ | ||
69 | |||
70 | static inline int ffs(unsigned long x) | ||
71 | { | ||
72 | return 32 - __cntlz(x & -x); | ||
73 | } | ||
74 | |||
75 | /* | ||
76 | * fls: Find last (most-significant) bit set in word. | ||
77 | * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32. | ||
78 | */ | ||
79 | |||
80 | static inline int fls (unsigned int x) | ||
81 | { | ||
82 | return 32 - __cntlz(x); | ||
83 | } | ||
84 | |||
85 | /** | ||
86 | * __fls - find last (most-significant) set bit in a long word | ||
87 | * @word: the word to search | ||
88 | * | ||
89 | * Undefined if no set bit exists, so code should check against 0 first. | ||
90 | */ | ||
91 | static inline unsigned long __fls(unsigned long word) | ||
92 | { | ||
93 | return 31 - __cntlz(word); | ||
94 | } | ||
95 | #else | ||
96 | |||
97 | /* Use the generic implementation if we don't have the nsa/nsau instructions. */ | ||
98 | |||
99 | # include <asm-generic/bitops/ffs.h> | ||
100 | # include <asm-generic/bitops/__ffs.h> | ||
101 | # include <asm-generic/bitops/ffz.h> | ||
102 | # include <asm-generic/bitops/fls.h> | ||
103 | # include <asm-generic/bitops/__fls.h> | ||
104 | |||
105 | #endif | ||
106 | |||
107 | #include <asm-generic/bitops/fls64.h> | ||
108 | #include <asm-generic/bitops/find.h> | ||
109 | #include <asm-generic/bitops/ext2-non-atomic.h> | ||
110 | |||
111 | #ifdef __XTENSA_EL__ | ||
112 | # define ext2_set_bit_atomic(lock,nr,addr) \ | ||
113 | test_and_set_bit((nr), (unsigned long*)(addr)) | ||
114 | # define ext2_clear_bit_atomic(lock,nr,addr) \ | ||
115 | test_and_clear_bit((nr), (unsigned long*)(addr)) | ||
116 | #elif defined(__XTENSA_EB__) | ||
117 | # define ext2_set_bit_atomic(lock,nr,addr) \ | ||
118 | test_and_set_bit((nr) ^ 0x18, (unsigned long*)(addr)) | ||
119 | # define ext2_clear_bit_atomic(lock,nr,addr) \ | ||
120 | test_and_clear_bit((nr) ^ 0x18, (unsigned long*)(addr)) | ||
121 | #else | ||
122 | # error processor byte order undefined! | ||
123 | #endif | ||
124 | |||
125 | #include <asm-generic/bitops/hweight.h> | ||
126 | #include <asm-generic/bitops/lock.h> | ||
127 | #include <asm-generic/bitops/sched.h> | ||
128 | #include <asm-generic/bitops/minix.h> | ||
129 | |||
130 | #endif /* __KERNEL__ */ | ||
131 | |||
132 | #endif /* _XTENSA_BITOPS_H */ | ||