aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-generic/bitops/le.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-generic/bitops/le.h')
-rw-r--r--include/asm-generic/bitops/le.h96
1 files changed, 63 insertions, 33 deletions
diff --git a/include/asm-generic/bitops/le.h b/include/asm-generic/bitops/le.h
index 80e3bf13b2b9..f95c663a6a41 100644
--- a/include/asm-generic/bitops/le.h
+++ b/include/asm-generic/bitops/le.h
@@ -4,54 +4,84 @@
4#include <asm/types.h> 4#include <asm/types.h>
5#include <asm/byteorder.h> 5#include <asm/byteorder.h>
6 6
7#define BITOP_WORD(nr) ((nr) / BITS_PER_LONG)
8#define BITOP_LE_SWIZZLE ((BITS_PER_LONG-1) & ~0x7)
9
10#if defined(__LITTLE_ENDIAN) 7#if defined(__LITTLE_ENDIAN)
11 8
12#define generic_test_le_bit(nr, addr) test_bit(nr, addr) 9#define BITOP_LE_SWIZZLE 0
13#define generic___set_le_bit(nr, addr) __set_bit(nr, addr)
14#define generic___clear_le_bit(nr, addr) __clear_bit(nr, addr)
15 10
16#define generic_test_and_set_le_bit(nr, addr) test_and_set_bit(nr, addr) 11static inline unsigned long find_next_zero_bit_le(const void *addr,
17#define generic_test_and_clear_le_bit(nr, addr) test_and_clear_bit(nr, addr) 12 unsigned long size, unsigned long offset)
13{
14 return find_next_zero_bit(addr, size, offset);
15}
18 16
19#define generic___test_and_set_le_bit(nr, addr) __test_and_set_bit(nr, addr) 17static inline unsigned long find_next_bit_le(const void *addr,
20#define generic___test_and_clear_le_bit(nr, addr) __test_and_clear_bit(nr, addr) 18 unsigned long size, unsigned long offset)
19{
20 return find_next_bit(addr, size, offset);
21}
21 22
22#define generic_find_next_zero_le_bit(addr, size, offset) find_next_zero_bit(addr, size, offset) 23static inline unsigned long find_first_zero_bit_le(const void *addr,
23#define generic_find_next_le_bit(addr, size, offset) \ 24 unsigned long size)
24 find_next_bit(addr, size, offset) 25{
26 return find_first_zero_bit(addr, size);
27}
25 28
26#elif defined(__BIG_ENDIAN) 29#elif defined(__BIG_ENDIAN)
27 30
28#define generic_test_le_bit(nr, addr) \ 31#define BITOP_LE_SWIZZLE ((BITS_PER_LONG-1) & ~0x7)
29 test_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
30#define generic___set_le_bit(nr, addr) \
31 __set_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
32#define generic___clear_le_bit(nr, addr) \
33 __clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
34
35#define generic_test_and_set_le_bit(nr, addr) \
36 test_and_set_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
37#define generic_test_and_clear_le_bit(nr, addr) \
38 test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
39
40#define generic___test_and_set_le_bit(nr, addr) \
41 __test_and_set_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
42#define generic___test_and_clear_le_bit(nr, addr) \
43 __test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
44 32
45extern unsigned long generic_find_next_zero_le_bit(const unsigned long *addr, 33#ifndef find_next_zero_bit_le
34extern unsigned long find_next_zero_bit_le(const void *addr,
46 unsigned long size, unsigned long offset); 35 unsigned long size, unsigned long offset);
47extern unsigned long generic_find_next_le_bit(const unsigned long *addr, 36#endif
37
38#ifndef find_next_bit_le
39extern unsigned long find_next_bit_le(const void *addr,
48 unsigned long size, unsigned long offset); 40 unsigned long size, unsigned long offset);
41#endif
42
43#ifndef find_first_zero_bit_le
44#define find_first_zero_bit_le(addr, size) \
45 find_next_zero_bit_le((addr), (size), 0)
46#endif
49 47
50#else 48#else
51#error "Please fix <asm/byteorder.h>" 49#error "Please fix <asm/byteorder.h>"
52#endif 50#endif
53 51
54#define generic_find_first_zero_le_bit(addr, size) \ 52static inline int test_bit_le(int nr, const void *addr)
55 generic_find_next_zero_le_bit((addr), (size), 0) 53{
54 return test_bit(nr ^ BITOP_LE_SWIZZLE, addr);
55}
56
57static inline void __set_bit_le(int nr, void *addr)
58{
59 __set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
60}
61
62static inline void __clear_bit_le(int nr, void *addr)
63{
64 __clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
65}
66
67static inline int test_and_set_bit_le(int nr, void *addr)
68{
69 return test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
70}
71
72static inline int test_and_clear_bit_le(int nr, void *addr)
73{
74 return test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
75}
76
77static inline int __test_and_set_bit_le(int nr, void *addr)
78{
79 return __test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
80}
81
82static inline int __test_and_clear_bit_le(int nr, void *addr)
83{
84 return __test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
85}
56 86
57#endif /* _ASM_GENERIC_BITOPS_LE_H_ */ 87#endif /* _ASM_GENERIC_BITOPS_LE_H_ */