diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/math64.h | 85 | ||||
-rw-r--r-- | include/ubi_uboot.h | 9 |
2 files changed, 93 insertions, 1 deletions
diff --git a/include/linux/math64.h b/include/linux/math64.h new file mode 100644 index 0000000..6d760d7 --- /dev/null +++ b/include/linux/math64.h @@ -0,0 +1,85 @@ +#ifndef _LINUX_MATH64_H +#define _LINUX_MATH64_H + +#include <linux/types.h> + +#if BITS_PER_LONG == 64 + +/** + * div_u64_rem - unsigned 64bit divide with 32bit divisor with remainder + * + * This is commonly provided by 32bit archs to provide an optimized 64bit + * divide. + */ +static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder) +{ + *remainder = dividend % divisor; + return dividend / divisor; +} + +/** + * div_s64_rem - signed 64bit divide with 32bit divisor with remainder + */ +static inline s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder) +{ + *remainder = dividend % divisor; + return dividend / divisor; +} + +/** + * div64_u64 - unsigned 64bit divide with 64bit divisor + */ +static inline u64 div64_u64(u64 dividend, u64 divisor) +{ + return dividend / divisor; +} + +#elif BITS_PER_LONG == 32 + +#ifndef div_u64_rem +static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder) +{ + *remainder = do_div(dividend, divisor); + return dividend; +} +#endif + +#ifndef div_s64_rem +extern s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder); +#endif + +#ifndef div64_u64 +extern u64 div64_u64(u64 dividend, u64 divisor); +#endif + +#endif /* BITS_PER_LONG */ + +/** + * div_u64 - unsigned 64bit divide with 32bit divisor + * + * This is the most common 64bit divide and should be used if possible, + * as many 32bit archs can optimize this variant better than a full 64bit + * divide. + */ +#ifndef div_u64 +static inline u64 div_u64(u64 dividend, u32 divisor) +{ + u32 remainder; + return div_u64_rem(dividend, divisor, &remainder); +} +#endif + +/** + * div_s64 - signed 64bit divide with 32bit divisor + */ +#ifndef div_s64 +static inline s64 div_s64(s64 dividend, s32 divisor) +{ + s32 remainder; + return div_s64_rem(dividend, divisor, &remainder); +} +#endif + +u32 iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder); + +#endif /* _LINUX_MATH64_H */ diff --git a/include/ubi_uboot.h b/include/ubi_uboot.h index b415219..74312ab 100644 --- a/include/ubi_uboot.h +++ b/include/ubi_uboot.h @@ -18,7 +18,12 @@ #include <malloc.h> #include <div64.h> #include <linux/crc32.h> +#include <linux/types.h> +#include <linux/list.h> +#include <linux/rbtree.h> +#include <linux/string.h> #include <linux/mtd/mtd.h> +#include <linux/mtd/ubi.h> #ifdef CONFIG_CMD_ONENAND #include <onenand_uboot.h> @@ -193,7 +198,7 @@ static inline long IS_ERR(const void *ptr) /* module */ #define THIS_MODULE 0 -#define try_module_get(...) 0 +#define try_module_get(...) 1 #define module_put(...) do { } while (0) #define module_init(...) #define module_exit(...) @@ -206,7 +211,9 @@ static inline long IS_ERR(const void *ptr) #define MODULE_AUTHOR(...) #define MODULE_LICENSE(...) +#ifndef __UBIFS_H__ #include "../drivers/mtd/ubi/ubi.h" +#endif /* functions */ extern int ubi_mtd_param_parse(const char *val, struct kernel_param *kp); |