aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/include/asm/bitops.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/include/asm/bitops.h')
-rw-r--r--arch/arm/include/asm/bitops.h86
1 files changed, 54 insertions, 32 deletions
diff --git a/arch/arm/include/asm/bitops.h b/arch/arm/include/asm/bitops.h
index af54ed102f5f..6b7403fd8f54 100644
--- a/arch/arm/include/asm/bitops.h
+++ b/arch/arm/include/asm/bitops.h
@@ -287,41 +287,63 @@ static inline int fls(int x)
287#include <asm-generic/bitops/hweight.h> 287#include <asm-generic/bitops/hweight.h>
288#include <asm-generic/bitops/lock.h> 288#include <asm-generic/bitops/lock.h>
289 289
290/* 290static inline void __set_bit_le(int nr, void *addr)
291 * Ext2 is defined to use little-endian byte ordering. 291{
292 * These do not need to be atomic. 292 __set_bit(WORD_BITOFF_TO_LE(nr), addr);
293 */ 293}
294#define ext2_set_bit(nr,p) \ 294
295 __test_and_set_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) 295static inline void __clear_bit_le(int nr, void *addr)
296#define ext2_set_bit_atomic(lock,nr,p) \ 296{
297 test_and_set_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) 297 __clear_bit(WORD_BITOFF_TO_LE(nr), addr);
298#define ext2_clear_bit(nr,p) \ 298}
299 __test_and_clear_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) 299
300#define ext2_clear_bit_atomic(lock,nr,p) \ 300static inline int __test_and_set_bit_le(int nr, void *addr)
301 test_and_clear_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) 301{
302#define ext2_test_bit(nr,p) \ 302 return __test_and_set_bit(WORD_BITOFF_TO_LE(nr), addr);
303 test_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) 303}
304#define ext2_find_first_zero_bit(p,sz) \ 304
305 _find_first_zero_bit_le(p,sz) 305static inline int test_and_set_bit_le(int nr, void *addr)
306#define ext2_find_next_zero_bit(p,sz,off) \ 306{
307 _find_next_zero_bit_le(p,sz,off) 307 return test_and_set_bit(WORD_BITOFF_TO_LE(nr), addr);
308#define ext2_find_next_bit(p, sz, off) \ 308}
309 _find_next_bit_le(p, sz, off) 309
310static inline int __test_and_clear_bit_le(int nr, void *addr)
311{
312 return __test_and_clear_bit(WORD_BITOFF_TO_LE(nr), addr);
313}
314
315static inline int test_and_clear_bit_le(int nr, void *addr)
316{
317 return test_and_clear_bit(WORD_BITOFF_TO_LE(nr), addr);
318}
319
320static inline int test_bit_le(int nr, const void *addr)
321{
322 return test_bit(WORD_BITOFF_TO_LE(nr), addr);
323}
324
325static inline int find_first_zero_bit_le(const void *p, unsigned size)
326{
327 return _find_first_zero_bit_le(p, size);
328}
329
330static inline int find_next_zero_bit_le(const void *p, int size, int offset)
331{
332 return _find_next_zero_bit_le(p, size, offset);
333}
334
335static inline int find_next_bit_le(const void *p, int size, int offset)
336{
337 return _find_next_bit_le(p, size, offset);
338}
310 339
311/* 340/*
312 * Minix is defined to use little-endian byte ordering. 341 * Ext2 is defined to use little-endian byte ordering.
313 * These do not need to be atomic.
314 */ 342 */
315#define minix_set_bit(nr,p) \ 343#define ext2_set_bit_atomic(lock, nr, p) \
316 __set_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) 344 test_and_set_bit_le(nr, p)
317#define minix_test_bit(nr,p) \ 345#define ext2_clear_bit_atomic(lock, nr, p) \
318 test_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p)) 346 test_and_clear_bit_le(nr, p)
319#define minix_test_and_set_bit(nr,p) \
320 __test_and_set_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p))
321#define minix_test_and_clear_bit(nr,p) \
322 __test_and_clear_bit(WORD_BITOFF_TO_LE(nr), (unsigned long *)(p))
323#define minix_find_first_zero_bit(p,sz) \
324 _find_first_zero_bit_le(p,sz)
325 347
326#endif /* __KERNEL__ */ 348#endif /* __KERNEL__ */
327 349