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 11 static 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 17 static 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 23 static 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 34 extern 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 39 extern 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 52 static inline int test_bit_le(int nr, const void *addr) 53 { 54 return test_bit(nr ^ BITOP_LE_SWIZZLE, addr); 55 } 56 57 static inline void set_bit_le(int nr, void *addr) 58 { 59 set_bit(nr ^ BITOP_LE_SWIZZLE, addr); 60 } 61 62 static inline void clear_bit_le(int nr, void *addr) 63 { 64 clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); 65 } 66 67 static inline void __set_bit_le(int nr, void *addr) 68 { 69 __set_bit(nr ^ BITOP_LE_SWIZZLE, addr); 70 } 71 72 static inline void __clear_bit_le(int nr, void *addr) 73 { 74 __clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); 75 } 76 77 static 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 82 static 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 87 static 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 92 static 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