diff options
| author | Akinobu Mita <mita@miraclelinux.com> | 2006-03-26 04:39:15 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-26 11:57:11 -0500 |
| commit | 930ae745f50088279fdc06057a429f16495b53a2 (patch) | |
| tree | 13f8a66445f1f9730280ec3318127c50b4bc8e46 /include/asm-generic/bitops | |
| parent | a54baa1487c51c8306dd6f457c1b5d5fcd539fff (diff) | |
[PATCH] bitops: generic ext2_{set,clear,test,find_first_zero,find_next_zero}_bit()
This patch introduces the C-language equivalents of the functions below:
int ext2_set_bit(int nr, volatile unsigned long *addr);
int ext2_clear_bit(int nr, volatile unsigned long *addr);
int ext2_test_bit(int nr, const volatile unsigned long *addr);
unsigned long ext2_find_first_zero_bit(const unsigned long *addr,
unsigned long size);
unsinged long ext2_find_next_zero_bit(const unsigned long *addr,
unsigned long size);
In include/asm-generic/bitops/ext2-non-atomic.h
This code largely copied from:
include/asm-powerpc/bitops.h
include/asm-parisc/bitops.h
Signed-off-by: Akinobu Mita <mita@miraclelinux.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/asm-generic/bitops')
| -rw-r--r-- | include/asm-generic/bitops/ext2-non-atomic.h | 18 | ||||
| -rw-r--r-- | include/asm-generic/bitops/le.h | 53 |
2 files changed, 71 insertions, 0 deletions
diff --git a/include/asm-generic/bitops/ext2-non-atomic.h b/include/asm-generic/bitops/ext2-non-atomic.h new file mode 100644 index 0000000000..1697404afa --- /dev/null +++ b/include/asm-generic/bitops/ext2-non-atomic.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | #ifndef _ASM_GENERIC_BITOPS_EXT2_NON_ATOMIC_H_ | ||
| 2 | #define _ASM_GENERIC_BITOPS_EXT2_NON_ATOMIC_H_ | ||
| 3 | |||
| 4 | #include <asm-generic/bitops/le.h> | ||
| 5 | |||
| 6 | #define ext2_set_bit(nr,addr) \ | ||
| 7 | generic___test_and_set_le_bit((nr),(unsigned long *)(addr)) | ||
| 8 | #define ext2_clear_bit(nr,addr) \ | ||
| 9 | generic___test_and_clear_le_bit((nr),(unsigned long *)(addr)) | ||
| 10 | |||
| 11 | #define ext2_test_bit(nr,addr) \ | ||
| 12 | generic_test_le_bit((nr),(unsigned long *)(addr)) | ||
| 13 | #define ext2_find_first_zero_bit(addr, size) \ | ||
| 14 | generic_find_first_zero_le_bit((unsigned long *)(addr), (size)) | ||
| 15 | #define ext2_find_next_zero_bit(addr, size, off) \ | ||
| 16 | generic_find_next_zero_le_bit((unsigned long *)(addr), (size), (off)) | ||
| 17 | |||
| 18 | #endif /* _ASM_GENERIC_BITOPS_EXT2_NON_ATOMIC_H_ */ | ||
diff --git a/include/asm-generic/bitops/le.h b/include/asm-generic/bitops/le.h new file mode 100644 index 0000000000..b9c7e5d2d2 --- /dev/null +++ b/include/asm-generic/bitops/le.h | |||
| @@ -0,0 +1,53 @@ | |||
| 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 | #define BITOP_WORD(nr) ((nr) / BITS_PER_LONG) | ||
| 8 | #define BITOP_LE_SWIZZLE ((BITS_PER_LONG-1) & ~0x7) | ||
| 9 | |||
| 10 | #if defined(__LITTLE_ENDIAN) | ||
| 11 | |||
| 12 | #define generic_test_le_bit(nr, addr) test_bit(nr, addr) | ||
| 13 | #define generic___set_le_bit(nr, addr) __set_bit(nr, addr) | ||
| 14 | #define generic___clear_le_bit(nr, addr) __clear_bit(nr, addr) | ||
| 15 | |||
| 16 | #define generic_test_and_set_le_bit(nr, addr) test_and_set_bit(nr, addr) | ||
| 17 | #define generic_test_and_clear_le_bit(nr, addr) test_and_clear_bit(nr, addr) | ||
| 18 | |||
| 19 | #define generic___test_and_set_le_bit(nr, addr) __test_and_set_bit(nr, addr) | ||
| 20 | #define generic___test_and_clear_le_bit(nr, addr) __test_and_clear_bit(nr, addr) | ||
| 21 | |||
| 22 | #define generic_find_next_zero_le_bit(addr, size, offset) find_next_zero_bit(addr, size, offset) | ||
| 23 | |||
| 24 | #elif defined(__BIG_ENDIAN) | ||
| 25 | |||
| 26 | #define generic_test_le_bit(nr, addr) \ | ||
| 27 | test_bit((nr) ^ BITOP_LE_SWIZZLE, (addr)) | ||
| 28 | #define generic___set_le_bit(nr, addr) \ | ||
| 29 | __set_bit((nr) ^ BITOP_LE_SWIZZLE, (addr)) | ||
| 30 | #define generic___clear_le_bit(nr, addr) \ | ||
| 31 | __clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr)) | ||
| 32 | |||
| 33 | #define generic_test_and_set_le_bit(nr, addr) \ | ||
| 34 | test_and_set_bit((nr) ^ BITOP_LE_SWIZZLE, (addr)) | ||
| 35 | #define generic_test_and_clear_le_bit(nr, addr) \ | ||
| 36 | test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr)) | ||
| 37 | |||
| 38 | #define generic___test_and_set_le_bit(nr, addr) \ | ||
| 39 | __test_and_set_bit((nr) ^ BITOP_LE_SWIZZLE, (addr)) | ||
| 40 | #define generic___test_and_clear_le_bit(nr, addr) \ | ||
| 41 | __test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr)) | ||
| 42 | |||
| 43 | extern unsigned long generic_find_next_zero_le_bit(const unsigned long *addr, | ||
| 44 | unsigned long size, unsigned long offset); | ||
| 45 | |||
| 46 | #else | ||
| 47 | #error "Please fix <asm/byteorder.h>" | ||
| 48 | #endif | ||
| 49 | |||
| 50 | #define generic_find_first_zero_le_bit(addr, size) \ | ||
| 51 | generic_find_next_zero_le_bit((addr), (size), 0) | ||
| 52 | |||
| 53 | #endif /* _ASM_GENERIC_BITOPS_LE_H_ */ | ||
