1#ifndef __LINUX_BITOPS_H__
2#define __LINUX_BITOPS_H__
57#define BITS_PER_LONG 32
63#define DECLARE_BITMAP(name, bits) \
64 unsigned long name[(bits + BITS_PER_LONG - 1) / BITS_PER_LONG]
82static inline int fls(
unsigned int x);
83static inline unsigned int fls_long(
unsigned long l);
85#include <linux/kernel.h>
91#define __ALIGN_MASK(x, mask) (((x) + (mask)) & ~(mask))
108#define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
112#define BIT(nr) (1UL << (nr))
116#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG))
120#define BITS_TO_LONGS(nr) (((nr) + BITS_PER_LONG - 1) / BITS_PER_LONG)
124#define test_bit(nr, addr) \
125 (((unsigned long*)(addr))[(nr) / BITS_PER_LONG] & \
126 (1UL << ((nr) % BITS_PER_LONG)))
130#define set_bit(nr, addr) \
131 (((unsigned long*)(addr))[(nr) / BITS_PER_LONG] |= \
132 (1UL << ((nr) % BITS_PER_LONG)))
136#define clear_bit(nr, addr) \
137 (((unsigned long*)(addr))[(nr) / BITS_PER_LONG] &= \
138 ~(1UL << ((nr) % BITS_PER_LONG)))
165#define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
168static inline unsigned long __ffs(
unsigned long word)
170 return (
unsigned long)__builtin_ctzl(word);
173static inline void __set_bit(
int nr,
volatile unsigned long* addr)
178static inline int __test_and_set_bit(
int nr,
volatile unsigned long* addr)
180 unsigned long* p = (
unsigned long*)addr +
BIT_WORD(nr);
181 unsigned long old = *p;
185 return (old & mask) != 0;
188static inline int __test_and_clear_bit(
int nr,
volatile unsigned long* addr)
190 unsigned long* p = (
unsigned long*)addr +
BIT_WORD(nr);
191 unsigned long old = *p;
195 return (old & mask) != 0;
217static inline void __clear_bit(
int nr,
volatile unsigned long* addr)
219 addr[
BIT_WORD(nr)] &= ~BIT_MASK(nr);
222static inline void clear_bit_unlock(
int nr,
volatile unsigned long* addr)
224 __clear_bit(nr, addr);
237#define assign_bit(nr, addr, val) \
240 set_bit((nr), (addr)); \
242 clear_bit((nr), (addr)); \
258#define BITS_PER_TYPE(type) (sizeof(type) * CHAR_BIT)
261static inline unsigned long find_next_bit(
const unsigned long *addr,
274static inline unsigned long find_next_zero_bit(
const unsigned long *addr,
287static inline unsigned long find_first_bit(
const unsigned long *addr,
290 return find_next_bit(addr,
size, 0);
293static inline unsigned long find_first_zero_bit(
const unsigned long *addr,
296 return find_next_zero_bit(addr,
size, 0);
324#define ffs(x) __builtin_ffs(x)
327static inline int fls(
unsigned int x)
329 return x ? 32 - __builtin_clz(
x) : 0;
332static inline unsigned int fls_long(
unsigned long l)
334#if BITS_PER_LONG == 64
337 return (
unsigned int)fls(l);
342#define hweight32(w) __builtin_popcount(w)
346#define hweight64(w) __builtin_popcountll(w)
350#define change_bit(nr, addr) __change_bit((nr), (addr))
353static inline void __change_bit(
int nr,
volatile unsigned long *addr)
356 unsigned long *p = (
unsigned long *)addr + (nr /
BITS_PER_LONG);
362static inline unsigned int bitmap_weight(
const unsigned long *src,
unsigned int nbits)
365 for (
unsigned int i = 0; i < nbits; i++)
371static inline bool bitmap_subset(
const unsigned long *src1,
372 const unsigned long *src2,
unsigned int nbits)
374 for (
unsigned int i = 0; i < nbits; i++)
381#ifndef for_each_set_bit_from
382#define for_each_set_bit_from(bit, addr, size) \
383 for (; (bit) = find_next_bit((addr), (size), (bit)), \
384 (bit) < (size); (bit)++)
387#ifndef for_each_set_bit
388#define for_each_set_bit(bit, addr, size) \
389 for ((bit) = find_first_bit((addr), (size)); \
391 (bit) = find_next_bit((addr), (size), (bit) + 1))
394#ifndef for_each_clear_bit
395#define for_each_clear_bit(bit, addr, size) \
396 for ((bit) = find_first_zero_bit((addr), (size)); \
398 (bit) = find_next_zero_bit((addr), (size), (bit) + 1))
436#define le32_to_cpup __le32_to_cpup
#define BITS_PER_LONG
Definition bitops.h:57
#define BIT_MASK(nr)
Definition bitops.h:116
#define BIT_WORD(nr)
Definition bitops.h:165
#define test_bit(nr, addr)
Definition bitops.h:124
size_t size
Definition drm_bridge.h:1299
size_t size_t offset
Definition drm_bridge.h:1299
int x
Definition layout.c:118
int w
Definition layout.c:118