le.h 2.2 KB

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