Lines Matching +full:- +full:bit
1 /*-
5 * Copyright (c) 2013-2017 Mellanox Technologies, Ltd.
38 #define BIT(nr) (1UL << (nr)) macro
44 #define BITMAP_LAST_WORD_MASK(n) (~0UL >> (BITS_PER_LONG - (n)))
46 #define BIT_MASK(nr) (1UL << ((nr) & (BITS_PER_LONG - 1)))
48 #define GENMASK(h, l) (((~0UL) >> (BITS_PER_LONG - (h) - 1)) & ((~0UL) << (l)))
49 #define GENMASK_ULL(h, l) (((~0ULL) >> (BITS_PER_LONG_LONG - (h) - 1)) & ((~0ULL) << (l)))
68 return (ffs(mask) - 1); in __ffs()
74 return (fls(mask) - 1); in __fls()
80 return (ffsl(mask) - 1); in __ffsl()
86 return (ffsll(mask) - 1); in __ffs64()
92 return (flsl(mask) - 1); in __flsl()
104 return ((word >> shift) | (word << (32 - shift))); in ror32()
113 order = fls(count) - 1; in get_count_order()
114 if (count & (count - 1)) in get_count_order()
123 int bit; in find_first_bit() local
125 for (bit = 0; size >= BITS_PER_LONG; in find_first_bit()
126 size -= BITS_PER_LONG, bit += BITS_PER_LONG, addr++) { in find_first_bit()
129 return (bit + __ffsl(*addr)); in find_first_bit()
134 bit += __ffsl(mask); in find_first_bit()
136 bit += size; in find_first_bit()
138 return (bit); in find_first_bit()
145 int bit; in find_first_zero_bit() local
147 for (bit = 0; size >= BITS_PER_LONG; in find_first_zero_bit()
148 size -= BITS_PER_LONG, bit += BITS_PER_LONG, addr++) { in find_first_zero_bit()
151 return (bit + __ffsl(~(*addr))); in find_first_zero_bit()
156 bit += __ffsl(mask); in find_first_zero_bit()
158 bit += size; in find_first_zero_bit()
160 return (bit); in find_first_zero_bit()
168 int bit; in find_last_bit() local
173 bit = BITS_PER_LONG * pos; in find_last_bit()
178 return (bit + __flsl(mask)); in find_last_bit()
180 while (pos--) { in find_last_bit()
181 addr--; in find_last_bit()
182 bit -= BITS_PER_LONG; in find_last_bit()
184 return (bit + __flsl(*addr)); in find_last_bit()
194 int bit; in find_next_bit() local
201 bit = BITS_PER_LONG * pos; in find_next_bit()
206 return (bit + __ffsl(mask)); in find_next_bit()
207 if (size - bit <= BITS_PER_LONG) in find_next_bit()
209 bit += BITS_PER_LONG; in find_next_bit()
212 for (size -= bit; size >= BITS_PER_LONG; in find_next_bit()
213 size -= BITS_PER_LONG, bit += BITS_PER_LONG, addr++) { in find_next_bit()
216 return (bit + __ffsl(*addr)); in find_next_bit()
221 bit += __ffsl(mask); in find_next_bit()
223 bit += size; in find_next_bit()
225 return (bit); in find_next_bit()
234 int bit; in find_next_zero_bit() local
241 bit = BITS_PER_LONG * pos; in find_next_zero_bit()
246 return (bit + __ffsl(mask)); in find_next_zero_bit()
247 if (size - bit <= BITS_PER_LONG) in find_next_zero_bit()
249 bit += BITS_PER_LONG; in find_next_zero_bit()
252 for (size -= bit; size >= BITS_PER_LONG; in find_next_zero_bit()
253 size -= BITS_PER_LONG, bit += BITS_PER_LONG, addr++) { in find_next_zero_bit()
256 return (bit + __ffsl(~(*addr))); in find_next_zero_bit()
261 bit += __ffsl(mask); in find_next_zero_bit()
263 bit += size; in find_next_zero_bit()
265 return (bit); in find_next_zero_bit()
287 __assign_bit(long bit, volatile unsigned long *addr, bool value) in __assign_bit() argument
290 __set_bit(bit, addr); in __assign_bit()
292 __clear_bit(bit, addr); in __assign_bit()
296 test_and_clear_bit(long bit, volatile unsigned long *var) in test_and_clear_bit() argument
300 var += BIT_WORD(bit); in test_and_clear_bit()
301 bit %= BITS_PER_LONG; in test_and_clear_bit()
302 bit = (1UL << bit); in test_and_clear_bit()
305 while (!atomic_fcmpset_long(var, &val, val & ~bit)) in test_and_clear_bit()
307 return !!(val & bit); in test_and_clear_bit()
311 __test_and_clear_bit(long bit, volatile unsigned long *var) in __test_and_clear_bit() argument
315 var += BIT_WORD(bit); in __test_and_clear_bit()
316 bit %= BITS_PER_LONG; in __test_and_clear_bit()
317 bit = (1UL << bit); in __test_and_clear_bit()
320 *var &= ~bit; in __test_and_clear_bit()
322 return !!(val & bit); in __test_and_clear_bit()
326 test_and_set_bit(long bit, volatile unsigned long *var) in test_and_set_bit() argument
330 var += BIT_WORD(bit); in test_and_set_bit()
331 bit %= BITS_PER_LONG; in test_and_set_bit()
332 bit = (1UL << bit); in test_and_set_bit()
335 while (!atomic_fcmpset_long(var, &val, val | bit)) in test_and_set_bit()
337 return !!(val & bit); in test_and_set_bit()
341 __test_and_set_bit(long bit, volatile unsigned long *var) in __test_and_set_bit() argument
345 var += BIT_WORD(bit); in __test_and_set_bit()
346 bit %= BITS_PER_LONG; in __test_and_set_bit()
347 bit = (1UL << bit); in __test_and_set_bit()
350 *var |= bit; in __test_and_set_bit()
352 return !!(val & bit); in __test_and_set_bit()
375 offset = pos - (index * BITS_PER_LONG); in linux_reg_op()
379 mask = (1UL << (nbitsinlong - 1)); in linux_reg_op()
380 mask += mask - 1; in linux_reg_op()
406 #define for_each_set_bit(bit, addr, size) \ argument
407 for ((bit) = find_first_bit((addr), (size)); \
408 (bit) < (size); \
409 (bit) = find_next_bit((addr), (size), (bit) + 1))
411 #define for_each_clear_bit(bit, addr, size) \ argument
412 for ((bit) = find_first_zero_bit((addr), (size)); \
413 (bit) < (size); \
414 (bit) = find_next_zero_bit((addr), (size), (bit) + 1))
419 uint8_t shift = 63 - index; in sign_extend64()
427 uint8_t shift = 31 - index; in sign_extend32()