le.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #ifndef _ASM_GENERIC_BITOPS_LE_H_
  2. #define _ASM_GENERIC_BITOPS_LE_H_
  3. #include <asm/types.h>
  4. #include <asm/byteorder.h>
  5. #if defined(__LITTLE_ENDIAN)
  6. #define BITOP_LE_SWIZZLE 0
  7. static inline unsigned long find_next_zero_bit_le(const void *addr,
  8. unsigned long size, unsigned long offset)
  9. {
  10. return find_next_zero_bit(addr, size, offset);
  11. }
  12. static inline unsigned long find_next_bit_le(const void *addr,
  13. unsigned long size, unsigned long offset)
  14. {
  15. return find_next_bit(addr, size, offset);
  16. }
  17. static inline unsigned long find_first_zero_bit_le(const void *addr,
  18. unsigned long size)
  19. {
  20. return find_first_zero_bit(addr, size);
  21. }
  22. #elif defined(__BIG_ENDIAN)
  23. #define BITOP_LE_SWIZZLE ((BITS_PER_LONG-1) & ~0x7)
  24. extern unsigned long find_next_zero_bit_le(const void *addr,
  25. unsigned long size, unsigned long offset);
  26. extern unsigned long find_next_bit_le(const void *addr,
  27. unsigned long size, unsigned long offset);
  28. #define find_first_zero_bit_le(addr, size) \
  29. find_next_zero_bit_le((addr), (size), 0)
  30. #else
  31. #error "Please fix <asm/byteorder.h>"
  32. #endif
  33. static inline int test_bit_le(int nr, const void *addr)
  34. {
  35. return test_bit(nr ^ BITOP_LE_SWIZZLE, addr);
  36. }
  37. static inline void __set_bit_le(int nr, void *addr)
  38. {
  39. __set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
  40. }
  41. static inline void __clear_bit_le(int nr, void *addr)
  42. {
  43. __clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
  44. }
  45. static inline int test_and_set_bit_le(int nr, void *addr)
  46. {
  47. return test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
  48. }
  49. static inline int test_and_clear_bit_le(int nr, void *addr)
  50. {
  51. return test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
  52. }
  53. static inline int __test_and_set_bit_le(int nr, void *addr)
  54. {
  55. return __test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
  56. }
  57. static inline int __test_and_clear_bit_le(int nr, void *addr)
  58. {
  59. return __test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
  60. }
  61. #endif /* _ASM_GENERIC_BITOPS_LE_H_ */