xref: /openbmc/linux/include/asm-generic/bitops/le.h (revision b24413180f5600bcb3bb70fbed5cf186b60864bd)
1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2930ae745SAkinobu Mita #ifndef _ASM_GENERIC_BITOPS_LE_H_
3930ae745SAkinobu Mita #define _ASM_GENERIC_BITOPS_LE_H_
4930ae745SAkinobu Mita 
5930ae745SAkinobu Mita #include <asm/types.h>
6930ae745SAkinobu Mita #include <asm/byteorder.h>
7930ae745SAkinobu Mita 
8930ae745SAkinobu Mita #if defined(__LITTLE_ENDIAN)
9930ae745SAkinobu Mita 
1063ab595fSAkinobu Mita #define BITOP_LE_SWIZZLE	0
11930ae745SAkinobu Mita 
12a56560b3SAkinobu Mita static inline unsigned long find_next_zero_bit_le(const void *addr,
13a56560b3SAkinobu Mita 		unsigned long size, unsigned long offset)
14a56560b3SAkinobu Mita {
15a56560b3SAkinobu Mita 	return find_next_zero_bit(addr, size, offset);
16a56560b3SAkinobu Mita }
17a56560b3SAkinobu Mita 
18a56560b3SAkinobu Mita static inline unsigned long find_next_bit_le(const void *addr,
19a56560b3SAkinobu Mita 		unsigned long size, unsigned long offset)
20a56560b3SAkinobu Mita {
21a56560b3SAkinobu Mita 	return find_next_bit(addr, size, offset);
22a56560b3SAkinobu Mita }
23a56560b3SAkinobu Mita 
24a56560b3SAkinobu Mita static inline unsigned long find_first_zero_bit_le(const void *addr,
25a56560b3SAkinobu Mita 		unsigned long size)
26a56560b3SAkinobu Mita {
27a56560b3SAkinobu Mita 	return find_first_zero_bit(addr, size);
28a56560b3SAkinobu Mita }
29930ae745SAkinobu Mita 
30930ae745SAkinobu Mita #elif defined(__BIG_ENDIAN)
31930ae745SAkinobu Mita 
3263ab595fSAkinobu Mita #define BITOP_LE_SWIZZLE	((BITS_PER_LONG-1) & ~0x7)
3363ab595fSAkinobu Mita 
3419de85efSAkinobu Mita #ifndef find_next_zero_bit_le
35a56560b3SAkinobu Mita extern unsigned long find_next_zero_bit_le(const void *addr,
3663ab595fSAkinobu Mita 		unsigned long size, unsigned long offset);
3719de85efSAkinobu Mita #endif
3819de85efSAkinobu Mita 
3919de85efSAkinobu Mita #ifndef find_next_bit_le
40a56560b3SAkinobu Mita extern unsigned long find_next_bit_le(const void *addr,
4163ab595fSAkinobu Mita 		unsigned long size, unsigned long offset);
4219de85efSAkinobu Mita #endif
4363ab595fSAkinobu Mita 
4419de85efSAkinobu Mita #ifndef find_first_zero_bit_le
45c4945b9eSAkinobu Mita #define find_first_zero_bit_le(addr, size) \
46c4945b9eSAkinobu Mita 	find_next_zero_bit_le((addr), (size), 0)
4719de85efSAkinobu Mita #endif
4863ab595fSAkinobu Mita 
4963ab595fSAkinobu Mita #else
5063ab595fSAkinobu Mita #error "Please fix <asm/byteorder.h>"
5163ab595fSAkinobu Mita #endif
5263ab595fSAkinobu Mita 
53a56560b3SAkinobu Mita static inline int test_bit_le(int nr, const void *addr)
54a56560b3SAkinobu Mita {
55a56560b3SAkinobu Mita 	return test_bit(nr ^ BITOP_LE_SWIZZLE, addr);
56a56560b3SAkinobu Mita }
57930ae745SAkinobu Mita 
58b9034bf1STakuya Yoshikawa static inline void set_bit_le(int nr, void *addr)
59b9034bf1STakuya Yoshikawa {
60b9034bf1STakuya Yoshikawa 	set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
61b9034bf1STakuya Yoshikawa }
62b9034bf1STakuya Yoshikawa 
63b9034bf1STakuya Yoshikawa static inline void clear_bit_le(int nr, void *addr)
64b9034bf1STakuya Yoshikawa {
65b9034bf1STakuya Yoshikawa 	clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
66b9034bf1STakuya Yoshikawa }
67b9034bf1STakuya Yoshikawa 
68a56560b3SAkinobu Mita static inline void __set_bit_le(int nr, void *addr)
69a56560b3SAkinobu Mita {
70a56560b3SAkinobu Mita 	__set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
71a56560b3SAkinobu Mita }
72930ae745SAkinobu Mita 
73a56560b3SAkinobu Mita static inline void __clear_bit_le(int nr, void *addr)
74a56560b3SAkinobu Mita {
75a56560b3SAkinobu Mita 	__clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
76a56560b3SAkinobu Mita }
77a56560b3SAkinobu Mita 
78a56560b3SAkinobu Mita static inline int test_and_set_bit_le(int nr, void *addr)
79a56560b3SAkinobu Mita {
80a56560b3SAkinobu Mita 	return test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
81a56560b3SAkinobu Mita }
82a56560b3SAkinobu Mita 
83a56560b3SAkinobu Mita static inline int test_and_clear_bit_le(int nr, void *addr)
84a56560b3SAkinobu Mita {
85a56560b3SAkinobu Mita 	return test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
86a56560b3SAkinobu Mita }
87a56560b3SAkinobu Mita 
88a56560b3SAkinobu Mita static inline int __test_and_set_bit_le(int nr, void *addr)
89a56560b3SAkinobu Mita {
90a56560b3SAkinobu Mita 	return __test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
91a56560b3SAkinobu Mita }
92a56560b3SAkinobu Mita 
93a56560b3SAkinobu Mita static inline int __test_and_clear_bit_le(int nr, void *addr)
94a56560b3SAkinobu Mita {
95a56560b3SAkinobu Mita 	return __test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
96a56560b3SAkinobu Mita }
97930ae745SAkinobu Mita 
98930ae745SAkinobu Mita #endif /* _ASM_GENERIC_BITOPS_LE_H_ */
99