mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 22:51:37 +00:00
bitops: Add fls_long and __ffs64
Add fls_long and __ffs64 support to align with the kernel bitops implementation. Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
This commit is contained in:
parent
61a177767c
commit
de4d2e9e7c
1 changed files with 27 additions and 0 deletions
|
@ -2,6 +2,7 @@
|
||||||
#define _LINUX_BITOPS_H
|
#define _LINUX_BITOPS_H
|
||||||
|
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
#define BIT(nr) (1UL << (nr))
|
#define BIT(nr) (1UL << (nr))
|
||||||
#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG))
|
#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG))
|
||||||
|
@ -139,6 +140,32 @@ static inline unsigned int generic_hweight8(unsigned int w)
|
||||||
# define fls generic_fls
|
# define fls generic_fls
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline unsigned fls_long(unsigned long l)
|
||||||
|
{
|
||||||
|
if (sizeof(l) == 4)
|
||||||
|
return fls(l);
|
||||||
|
return fls64(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* __ffs64 - find first set bit in a 64 bit word
|
||||||
|
* @word: The 64 bit word
|
||||||
|
*
|
||||||
|
* On 64 bit arches this is a synomyn for __ffs
|
||||||
|
* The result is not defined if no bits are set, so check that @word
|
||||||
|
* is non-zero before calling this.
|
||||||
|
*/
|
||||||
|
static inline unsigned long __ffs64(u64 word)
|
||||||
|
{
|
||||||
|
#if BITS_PER_LONG == 32
|
||||||
|
if (((u32)word) == 0UL)
|
||||||
|
return __ffs((u32)(word >> 32)) + 32;
|
||||||
|
#elif BITS_PER_LONG != 64
|
||||||
|
#error BITS_PER_LONG not 32 or 64
|
||||||
|
#endif
|
||||||
|
return __ffs((unsigned long)word);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __set_bit - Set a bit in memory
|
* __set_bit - Set a bit in memory
|
||||||
* @nr: the bit to set
|
* @nr: the bit to set
|
||||||
|
|
Loading…
Add table
Reference in a new issue