xref: /openbmc/linux/include/asm-generic/bitops/le.h (revision b9034bf1e96fb8b1bf1b22ca2d3ea2aa7467e5a8)
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 
3319de85efSAkinobu 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);
3619de85efSAkinobu Mita #endif
3719de85efSAkinobu Mita 
3819de85efSAkinobu 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);
4119de85efSAkinobu Mita #endif
4263ab595fSAkinobu Mita 
4319de85efSAkinobu 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)
4619de85efSAkinobu 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 
57*b9034bf1STakuya Yoshikawa static inline void set_bit_le(int nr, void *addr)
58*b9034bf1STakuya Yoshikawa {
59*b9034bf1STakuya Yoshikawa 	set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
60*b9034bf1STakuya Yoshikawa }
61*b9034bf1STakuya Yoshikawa 
62*b9034bf1STakuya Yoshikawa static inline void clear_bit_le(int nr, void *addr)
63*b9034bf1STakuya Yoshikawa {
64*b9034bf1STakuya Yoshikawa 	clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
65*b9034bf1STakuya Yoshikawa }
66*b9034bf1STakuya Yoshikawa 
67a56560b3SAkinobu Mita static inline void __set_bit_le(int nr, void *addr)
68a56560b3SAkinobu Mita {
69a56560b3SAkinobu Mita 	__set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
70a56560b3SAkinobu Mita }
71930ae745SAkinobu Mita 
72a56560b3SAkinobu Mita static inline void __clear_bit_le(int nr, void *addr)
73a56560b3SAkinobu Mita {
74a56560b3SAkinobu Mita 	__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 }
86a56560b3SAkinobu Mita 
87a56560b3SAkinobu Mita static inline int __test_and_set_bit_le(int nr, void *addr)
88a56560b3SAkinobu Mita {
89a56560b3SAkinobu Mita 	return __test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
90a56560b3SAkinobu Mita }
91a56560b3SAkinobu Mita 
92a56560b3SAkinobu Mita static inline int __test_and_clear_bit_le(int nr, void *addr)
93a56560b3SAkinobu Mita {
94a56560b3SAkinobu Mita 	return __test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
95a56560b3SAkinobu Mita }
96930ae745SAkinobu Mita 
97930ae745SAkinobu Mita #endif /* _ASM_GENERIC_BITOPS_LE_H_ */
98