1#ifndef _ASM_GENERIC_BITOPS_LE_H_ 2#define _ASM_GENERIC_BITOPS_LE_H_ 3 4#include <asm/types.h> 5#include <asm/byteorder.h> 6 7#if defined(__LITTLE_ENDIAN) 8 9#define BITOP_LE_SWIZZLE 0 10 11static inline unsigned long find_next_zero_bit_le(const void *addr, 12 unsigned long size, unsigned long offset) 13{ 14 return find_next_zero_bit(addr, size, offset); 15} 16 17static inline unsigned long find_next_bit_le(const void *addr, 18 unsigned long size, unsigned long offset) 19{ 20 return find_next_bit(addr, size, offset); 21} 22 23static inline unsigned long find_first_zero_bit_le(const void *addr, 24 unsigned long size) 25{ 26 return find_first_zero_bit(addr, size); 27} 28 29#elif defined(__BIG_ENDIAN) 30 31#define BITOP_LE_SWIZZLE ((BITS_PER_LONG-1) & ~0x7) 32 33#ifndef find_next_zero_bit_le 34extern unsigned long find_next_zero_bit_le(const void *addr, 35 unsigned long size, unsigned long offset); 36#endif 37 38#ifndef find_next_bit_le 39extern unsigned long find_next_bit_le(const void *addr, 40 unsigned long size, unsigned long offset); 41#endif 42 43#ifndef find_first_zero_bit_le 44#define find_first_zero_bit_le(addr, size) \ 45 find_next_zero_bit_le((addr), (size), 0) 46#endif 47 48#else 49#error "Please fix <asm/byteorder.h>" 50#endif 51 52static inline int test_bit_le(int nr, const void *addr) 53{ 54 return test_bit(nr ^ BITOP_LE_SWIZZLE, addr); 55} 56 57static inline void set_bit_le(int nr, void *addr) 58{ 59 set_bit(nr ^ BITOP_LE_SWIZZLE, addr); 60} 61 62static inline void clear_bit_le(int nr, void *addr) 63{ 64 clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); 65} 66 67static inline void __set_bit_le(int nr, void *addr) 68{ 69 __set_bit(nr ^ BITOP_LE_SWIZZLE, addr); 70} 71 72static inline void __clear_bit_le(int nr, void *addr) 73{ 74 __clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); 75} 76 77static inline int test_and_set_bit_le(int nr, void *addr) 78{ 79 return test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr); 80} 81 82static inline int test_and_clear_bit_le(int nr, void *addr) 83{ 84 return test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); 85} 86 87static inline int __test_and_set_bit_le(int nr, void *addr) 88{ 89 return __test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr); 90} 91 92static inline int __test_and_clear_bit_le(int nr, void *addr) 93{ 94 return __test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); 95} 96 97#endif /* _ASM_GENERIC_BITOPS_LE_H_ */ 98