xref: /openbmc/linux/include/asm-generic/bitops/le.h (revision 930ae745f50088279fdc06057a429f16495b53a2)
1*930ae745SAkinobu Mita #ifndef _ASM_GENERIC_BITOPS_LE_H_
2*930ae745SAkinobu Mita #define _ASM_GENERIC_BITOPS_LE_H_
3*930ae745SAkinobu Mita 
4*930ae745SAkinobu Mita #include <asm/types.h>
5*930ae745SAkinobu Mita #include <asm/byteorder.h>
6*930ae745SAkinobu Mita 
7*930ae745SAkinobu Mita #define BITOP_WORD(nr)		((nr) / BITS_PER_LONG)
8*930ae745SAkinobu Mita #define BITOP_LE_SWIZZLE	((BITS_PER_LONG-1) & ~0x7)
9*930ae745SAkinobu Mita 
10*930ae745SAkinobu Mita #if defined(__LITTLE_ENDIAN)
11*930ae745SAkinobu Mita 
12*930ae745SAkinobu Mita #define generic_test_le_bit(nr, addr) test_bit(nr, addr)
13*930ae745SAkinobu Mita #define generic___set_le_bit(nr, addr) __set_bit(nr, addr)
14*930ae745SAkinobu Mita #define generic___clear_le_bit(nr, addr) __clear_bit(nr, addr)
15*930ae745SAkinobu Mita 
16*930ae745SAkinobu Mita #define generic_test_and_set_le_bit(nr, addr) test_and_set_bit(nr, addr)
17*930ae745SAkinobu Mita #define generic_test_and_clear_le_bit(nr, addr) test_and_clear_bit(nr, addr)
18*930ae745SAkinobu Mita 
19*930ae745SAkinobu Mita #define generic___test_and_set_le_bit(nr, addr) __test_and_set_bit(nr, addr)
20*930ae745SAkinobu Mita #define generic___test_and_clear_le_bit(nr, addr) __test_and_clear_bit(nr, addr)
21*930ae745SAkinobu Mita 
22*930ae745SAkinobu Mita #define generic_find_next_zero_le_bit(addr, size, offset) find_next_zero_bit(addr, size, offset)
23*930ae745SAkinobu Mita 
24*930ae745SAkinobu Mita #elif defined(__BIG_ENDIAN)
25*930ae745SAkinobu Mita 
26*930ae745SAkinobu Mita #define generic_test_le_bit(nr, addr) \
27*930ae745SAkinobu Mita 	test_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
28*930ae745SAkinobu Mita #define generic___set_le_bit(nr, addr) \
29*930ae745SAkinobu Mita 	__set_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
30*930ae745SAkinobu Mita #define generic___clear_le_bit(nr, addr) \
31*930ae745SAkinobu Mita 	__clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
32*930ae745SAkinobu Mita 
33*930ae745SAkinobu Mita #define generic_test_and_set_le_bit(nr, addr) \
34*930ae745SAkinobu Mita 	test_and_set_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
35*930ae745SAkinobu Mita #define generic_test_and_clear_le_bit(nr, addr) \
36*930ae745SAkinobu Mita 	test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
37*930ae745SAkinobu Mita 
38*930ae745SAkinobu Mita #define generic___test_and_set_le_bit(nr, addr) \
39*930ae745SAkinobu Mita 	__test_and_set_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
40*930ae745SAkinobu Mita #define generic___test_and_clear_le_bit(nr, addr) \
41*930ae745SAkinobu Mita 	__test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
42*930ae745SAkinobu Mita 
43*930ae745SAkinobu Mita extern unsigned long generic_find_next_zero_le_bit(const unsigned long *addr,
44*930ae745SAkinobu Mita 		unsigned long size, unsigned long offset);
45*930ae745SAkinobu Mita 
46*930ae745SAkinobu Mita #else
47*930ae745SAkinobu Mita #error "Please fix <asm/byteorder.h>"
48*930ae745SAkinobu Mita #endif
49*930ae745SAkinobu Mita 
50*930ae745SAkinobu Mita #define generic_find_first_zero_le_bit(addr, size) \
51*930ae745SAkinobu Mita         generic_find_next_zero_le_bit((addr), (size), 0)
52*930ae745SAkinobu Mita 
53*930ae745SAkinobu Mita #endif /* _ASM_GENERIC_BITOPS_LE_H_ */
54