diff options
author | Stefan Roese <sr@denx.de> | 2009-03-19 15:35:05 +0100 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2009-03-20 22:39:15 +0100 |
commit | 9eefe2a2b37a838558e3d213a9f5519503d0c180 (patch) | |
tree | cd6ce359f020615d685d353fc3a20e7e07ac05fc /include | |
parent | b1b4e89a0f3b75854c39a62cae41bad56d210adf (diff) | |
download | u-boot-imx-9eefe2a2b37a838558e3d213a9f5519503d0c180.zip u-boot-imx-9eefe2a2b37a838558e3d213a9f5519503d0c180.tar.gz u-boot-imx-9eefe2a2b37a838558e3d213a9f5519503d0c180.tar.bz2 |
UBIFS: Implement read-only UBIFS support in U-Boot
The U-Boot UBIFS implementation is largely a direct copy from the current
Linux version (2.6.29-rc6). As already done in the UBI version we have an
"abstraction layer" to redefine or remove some OS calls (e.g. mutex_lock()
...). This makes it possible to use the original Linux code with very
little changes. And by this we can better update to later Linux versions.
I removed some of the Linux features that are not used in the U-Boot
version (e.g. garbage-collection, write support).
Signed-off-by: Stefan Roese <sr@denx.de>
CC: Artem Bityutskiy <dedekind@infradead.org>
CC: Adrian Hunter <ext-Adrian.Hunter@nokia.com>
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); |