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