xref: /openbmc/linux/include/asm-generic/bitops/le.h (revision 19de85ef574c3a2182e3ccad9581805052f14946)
1930ae745SAkinobu Mita #ifndef _ASM_GENERIC_BITOPS_LE_H_
2930ae745SAkinobu Mita #define _ASM_GENERIC_BITOPS_LE_H_
3930ae745SAkinobu Mita 
4930ae745SAkinobu Mita #include <asm/types.h>
5930ae745SAkinobu Mita #include <asm/byteorder.h>
6930ae745SAkinobu Mita 
7930ae745SAkinobu Mita #if defined(__LITTLE_ENDIAN)
8930ae745SAkinobu Mita 
963ab595fSAkinobu Mita #define BITOP_LE_SWIZZLE	0
10930ae745SAkinobu Mita 
11a56560b3SAkinobu Mita static inline unsigned long find_next_zero_bit_le(const void *addr,
12a56560b3SAkinobu Mita 		unsigned long size, unsigned long offset)
13a56560b3SAkinobu Mita {
14a56560b3SAkinobu Mita 	return find_next_zero_bit(addr, size, offset);
15a56560b3SAkinobu Mita }
16a56560b3SAkinobu Mita 
17a56560b3SAkinobu Mita static inline unsigned long find_next_bit_le(const void *addr,
18a56560b3SAkinobu Mita 		unsigned long size, unsigned long offset)
19a56560b3SAkinobu Mita {
20a56560b3SAkinobu Mita 	return find_next_bit(addr, size, offset);
21a56560b3SAkinobu Mita }
22a56560b3SAkinobu Mita 
23a56560b3SAkinobu Mita static inline unsigned long find_first_zero_bit_le(const void *addr,
24a56560b3SAkinobu Mita 		unsigned long size)
25a56560b3SAkinobu Mita {
26a56560b3SAkinobu Mita 	return find_first_zero_bit(addr, size);
27a56560b3SAkinobu Mita }
28930ae745SAkinobu Mita 
29930ae745SAkinobu Mita #elif defined(__BIG_ENDIAN)
30930ae745SAkinobu Mita 
3163ab595fSAkinobu Mita #define BITOP_LE_SWIZZLE	((BITS_PER_LONG-1) & ~0x7)
3263ab595fSAkinobu Mita 
33*19de85efSAkinobu Mita #ifndef find_next_zero_bit_le
34a56560b3SAkinobu Mita extern unsigned long find_next_zero_bit_le(const void *addr,
3563ab595fSAkinobu Mita 		unsigned long size, unsigned long offset);
36*19de85efSAkinobu Mita #endif
37*19de85efSAkinobu Mita 
38*19de85efSAkinobu Mita #ifndef find_next_bit_le
39a56560b3SAkinobu Mita extern unsigned long find_next_bit_le(const void *addr,
4063ab595fSAkinobu Mita 		unsigned long size, unsigned long offset);
41*19de85efSAkinobu Mita #endif
4263ab595fSAkinobu Mita 
43*19de85efSAkinobu Mita #ifndef find_first_zero_bit_le
44c4945b9eSAkinobu Mita #define find_first_zero_bit_le(addr, size) \
45c4945b9eSAkinobu Mita 	find_next_zero_bit_le((addr), (size), 0)
46*19de85efSAkinobu Mita #endif
4763ab595fSAkinobu Mita 
4863ab595fSAkinobu Mita #else
4963ab595fSAkinobu Mita #error "Please fix <asm/byteorder.h>"
5063ab595fSAkinobu Mita #endif
5163ab595fSAkinobu Mita 
52a56560b3SAkinobu Mita static inline int test_bit_le(int nr, const void *addr)
53a56560b3SAkinobu Mita {
54a56560b3SAkinobu Mita 	return test_bit(nr ^ BITOP_LE_SWIZZLE, addr);
55a56560b3SAkinobu Mita }
56930ae745SAkinobu Mita 
57a56560b3SAkinobu Mita static inline void __set_bit_le(int nr, void *addr)
58a56560b3SAkinobu Mita {
59a56560b3SAkinobu Mita 	__set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
60a56560b3SAkinobu Mita }
61930ae745SAkinobu Mita 
62a56560b3SAkinobu Mita static inline void __clear_bit_le(int nr, void *addr)
63a56560b3SAkinobu Mita {
64a56560b3SAkinobu Mita 	__clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
65a56560b3SAkinobu Mita }
66a56560b3SAkinobu Mita 
67a56560b3SAkinobu Mita static inline int test_and_set_bit_le(int nr, void *addr)
68a56560b3SAkinobu Mita {
69a56560b3SAkinobu Mita 	return test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
70a56560b3SAkinobu Mita }
71a56560b3SAkinobu Mita 
72a56560b3SAkinobu Mita static inline int test_and_clear_bit_le(int nr, void *addr)
73a56560b3SAkinobu Mita {
74a56560b3SAkinobu Mita 	return test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
75a56560b3SAkinobu Mita }
76a56560b3SAkinobu Mita 
77a56560b3SAkinobu Mita static inline int __test_and_set_bit_le(int nr, void *addr)
78a56560b3SAkinobu Mita {
79a56560b3SAkinobu Mita 	return __test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
80a56560b3SAkinobu Mita }
81a56560b3SAkinobu Mita 
82a56560b3SAkinobu Mita static inline int __test_and_clear_bit_le(int nr, void *addr)
83a56560b3SAkinobu Mita {
84a56560b3SAkinobu Mita 	return __test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
85a56560b3SAkinobu Mita }
86930ae745SAkinobu Mita 
87930ae745SAkinobu Mita #endif /* _ASM_GENERIC_BITOPS_LE_H_ */
88