xref: /openbmc/linux/include/asm-generic/bitops/le.h (revision a56560b3b233238e85205d4e8d7bded904ac2306)
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 
11*a56560b3SAkinobu Mita static inline unsigned long find_next_zero_bit_le(const void *addr,
12*a56560b3SAkinobu Mita 		unsigned long size, unsigned long offset)
13*a56560b3SAkinobu Mita {
14*a56560b3SAkinobu Mita 	return find_next_zero_bit(addr, size, offset);
15*a56560b3SAkinobu Mita }
16*a56560b3SAkinobu Mita 
17*a56560b3SAkinobu Mita static inline unsigned long find_next_bit_le(const void *addr,
18*a56560b3SAkinobu Mita 		unsigned long size, unsigned long offset)
19*a56560b3SAkinobu Mita {
20*a56560b3SAkinobu Mita 	return find_next_bit(addr, size, offset);
21*a56560b3SAkinobu Mita }
22*a56560b3SAkinobu Mita 
23*a56560b3SAkinobu Mita static inline unsigned long find_first_zero_bit_le(const void *addr,
24*a56560b3SAkinobu Mita 		unsigned long size)
25*a56560b3SAkinobu Mita {
26*a56560b3SAkinobu Mita 	return find_first_zero_bit(addr, size);
27*a56560b3SAkinobu 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*a56560b3SAkinobu Mita extern unsigned long find_next_zero_bit_le(const void *addr,
3463ab595fSAkinobu Mita 		unsigned long size, unsigned long offset);
35*a56560b3SAkinobu Mita extern unsigned long find_next_bit_le(const void *addr,
3663ab595fSAkinobu Mita 		unsigned long size, unsigned long offset);
3763ab595fSAkinobu Mita 
38c4945b9eSAkinobu Mita #define find_first_zero_bit_le(addr, size) \
39c4945b9eSAkinobu Mita 	find_next_zero_bit_le((addr), (size), 0)
4063ab595fSAkinobu Mita 
4163ab595fSAkinobu Mita #else
4263ab595fSAkinobu Mita #error "Please fix <asm/byteorder.h>"
4363ab595fSAkinobu Mita #endif
4463ab595fSAkinobu Mita 
45*a56560b3SAkinobu Mita static inline int test_bit_le(int nr, const void *addr)
46*a56560b3SAkinobu Mita {
47*a56560b3SAkinobu Mita 	return test_bit(nr ^ BITOP_LE_SWIZZLE, addr);
48*a56560b3SAkinobu Mita }
49930ae745SAkinobu Mita 
50*a56560b3SAkinobu Mita static inline void __set_bit_le(int nr, void *addr)
51*a56560b3SAkinobu Mita {
52*a56560b3SAkinobu Mita 	__set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
53*a56560b3SAkinobu Mita }
54930ae745SAkinobu Mita 
55*a56560b3SAkinobu Mita static inline void __clear_bit_le(int nr, void *addr)
56*a56560b3SAkinobu Mita {
57*a56560b3SAkinobu Mita 	__clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
58*a56560b3SAkinobu Mita }
59*a56560b3SAkinobu Mita 
60*a56560b3SAkinobu Mita static inline int test_and_set_bit_le(int nr, void *addr)
61*a56560b3SAkinobu Mita {
62*a56560b3SAkinobu Mita 	return test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
63*a56560b3SAkinobu Mita }
64*a56560b3SAkinobu Mita 
65*a56560b3SAkinobu Mita static inline int test_and_clear_bit_le(int nr, void *addr)
66*a56560b3SAkinobu Mita {
67*a56560b3SAkinobu Mita 	return test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
68*a56560b3SAkinobu Mita }
69*a56560b3SAkinobu Mita 
70*a56560b3SAkinobu Mita static inline int __test_and_set_bit_le(int nr, void *addr)
71*a56560b3SAkinobu Mita {
72*a56560b3SAkinobu Mita 	return __test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
73*a56560b3SAkinobu Mita }
74*a56560b3SAkinobu Mita 
75*a56560b3SAkinobu Mita static inline int __test_and_clear_bit_le(int nr, void *addr)
76*a56560b3SAkinobu Mita {
77*a56560b3SAkinobu Mita 	return __test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
78*a56560b3SAkinobu Mita }
79930ae745SAkinobu Mita 
80930ae745SAkinobu Mita #endif /* _ASM_GENERIC_BITOPS_LE_H_ */
81