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