xref: /openbmc/linux/include/asm-generic/bitops/le.h (revision aa02ad67d9b308290fde390682cd039b29f7ab85)
1930ae745SAkinobu Mita #ifndef _ASM_GENERIC_BITOPS_LE_H_
2930ae745SAkinobu Mita #define _ASM_GENERIC_BITOPS_LE_H_
3930ae745SAkinobu Mita 
4930ae745SAkinobu Mita #include <asm/types.h>
5930ae745SAkinobu Mita #include <asm/byteorder.h>
6930ae745SAkinobu Mita 
7930ae745SAkinobu Mita #define BITOP_WORD(nr)		((nr) / BITS_PER_LONG)
8930ae745SAkinobu Mita #define BITOP_LE_SWIZZLE	((BITS_PER_LONG-1) & ~0x7)
9930ae745SAkinobu Mita 
10930ae745SAkinobu Mita #if defined(__LITTLE_ENDIAN)
11930ae745SAkinobu Mita 
12930ae745SAkinobu Mita #define generic_test_le_bit(nr, addr) test_bit(nr, addr)
13930ae745SAkinobu Mita #define generic___set_le_bit(nr, addr) __set_bit(nr, addr)
14930ae745SAkinobu Mita #define generic___clear_le_bit(nr, addr) __clear_bit(nr, addr)
15930ae745SAkinobu Mita 
16930ae745SAkinobu Mita #define generic_test_and_set_le_bit(nr, addr) test_and_set_bit(nr, addr)
17930ae745SAkinobu Mita #define generic_test_and_clear_le_bit(nr, addr) test_and_clear_bit(nr, addr)
18930ae745SAkinobu Mita 
19930ae745SAkinobu Mita #define generic___test_and_set_le_bit(nr, addr) __test_and_set_bit(nr, addr)
20930ae745SAkinobu Mita #define generic___test_and_clear_le_bit(nr, addr) __test_and_clear_bit(nr, addr)
21930ae745SAkinobu Mita 
22930ae745SAkinobu Mita #define generic_find_next_zero_le_bit(addr, size, offset) find_next_zero_bit(addr, size, offset)
23*aa02ad67SAneesh Kumar K.V #define generic_find_next_le_bit(addr, size, offset) \
24*aa02ad67SAneesh Kumar K.V 			find_next_bit(addr, size, offset)
25930ae745SAkinobu Mita 
26930ae745SAkinobu Mita #elif defined(__BIG_ENDIAN)
27930ae745SAkinobu Mita 
28930ae745SAkinobu Mita #define generic_test_le_bit(nr, addr) \
29930ae745SAkinobu Mita 	test_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
30930ae745SAkinobu Mita #define generic___set_le_bit(nr, addr) \
31930ae745SAkinobu Mita 	__set_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
32930ae745SAkinobu Mita #define generic___clear_le_bit(nr, addr) \
33930ae745SAkinobu Mita 	__clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
34930ae745SAkinobu Mita 
35930ae745SAkinobu Mita #define generic_test_and_set_le_bit(nr, addr) \
36930ae745SAkinobu Mita 	test_and_set_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
37930ae745SAkinobu Mita #define generic_test_and_clear_le_bit(nr, addr) \
38930ae745SAkinobu Mita 	test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
39930ae745SAkinobu Mita 
40930ae745SAkinobu Mita #define generic___test_and_set_le_bit(nr, addr) \
41930ae745SAkinobu Mita 	__test_and_set_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
42930ae745SAkinobu Mita #define generic___test_and_clear_le_bit(nr, addr) \
43930ae745SAkinobu Mita 	__test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
44930ae745SAkinobu Mita 
45930ae745SAkinobu Mita extern unsigned long generic_find_next_zero_le_bit(const unsigned long *addr,
46930ae745SAkinobu Mita 		unsigned long size, unsigned long offset);
47*aa02ad67SAneesh Kumar K.V extern unsigned long generic_find_next_le_bit(const unsigned long *addr,
48*aa02ad67SAneesh Kumar K.V 		unsigned long size, unsigned long offset);
49930ae745SAkinobu Mita 
50930ae745SAkinobu Mita #else
51930ae745SAkinobu Mita #error "Please fix <asm/byteorder.h>"
52930ae745SAkinobu Mita #endif
53930ae745SAkinobu Mita 
54930ae745SAkinobu Mita #define generic_find_first_zero_le_bit(addr, size) \
55930ae745SAkinobu Mita         generic_find_next_zero_le_bit((addr), (size), 0)
56930ae745SAkinobu Mita 
57930ae745SAkinobu Mita #endif /* _ASM_GENERIC_BITOPS_LE_H_ */
58