kernel/3.10: add more helpers to the mtdsplit code

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38111 3c298f89-4303-0410-b956-a3cf2f4a3e73
master
Gabor Juhos 2013-09-21 17:55:54 +00:00
parent 90b4f720be
commit 4f40e9f561
2 changed files with 72 additions and 1 deletions

View File

@ -64,3 +64,53 @@ int mtd_get_squashfs_len(struct mtd_info *master,
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(mtd_get_squashfs_len); EXPORT_SYMBOL_GPL(mtd_get_squashfs_len);
static ssize_t mtd_next_eb(struct mtd_info *mtd, size_t offset)
{
return mtd_rounddown_to_eb(offset, mtd) + mtd->erasesize;
}
int mtd_check_rootfs_magic(struct mtd_info *mtd, size_t offset)
{
u32 magic;
size_t retlen;
int ret;
ret = mtd_read(mtd, offset, sizeof(magic), &retlen,
(unsigned char *) &magic);
if (ret)
return ret;
if (retlen != sizeof(magic))
return -EIO;
if (le32_to_cpu(magic) != SQUASHFS_MAGIC &&
magic != 0x19852003)
return -EINVAL;
return 0;
}
EXPORT_SYMBOL_GPL(mtd_check_rootfs_magic);
int mtd_find_rootfs_from(struct mtd_info *mtd,
size_t from,
size_t limit,
size_t *ret_offset)
{
size_t offset;
int err;
for (offset = from; offset < limit;
offset = mtd_next_eb(mtd, offset)) {
err = mtd_check_rootfs_magic(mtd, offset);
if (err)
continue;
*ret_offset = offset;
return 0;
}
return -ENODEV;
}
EXPORT_SYMBOL_GPL(mtd_find_rootfs_from);

View File

@ -19,6 +19,14 @@
int mtd_get_squashfs_len(struct mtd_info *master, int mtd_get_squashfs_len(struct mtd_info *master,
size_t offset, size_t offset,
size_t *squashfs_len); size_t *squashfs_len);
int mtd_check_rootfs_magic(struct mtd_info *mtd, size_t offset);
int mtd_find_rootfs_from(struct mtd_info *mtd,
size_t from,
size_t limit,
size_t *ret_offset);
#else #else
static inline int mtd_get_squashfs_len(struct mtd_info *master, static inline int mtd_get_squashfs_len(struct mtd_info *master,
size_t offset, size_t offset,
@ -26,6 +34,19 @@ static inline int mtd_get_squashfs_len(struct mtd_info *master,
{ {
return -ENODEV; return -ENODEV;
} }
#endif
static inline int mtd_check_rootfs_magic(struct mtd_info *mtd, size_t offset)
{
return -EINVAL;
}
static inline int mtd_find_rootfs_from(struct mtd_info *mtd,
size_t from,
size_t limit,
size_t *ret_offset)
{
return -ENODEV;
}
#endif /* CONFIG_MTD_SPLIT */
#endif /* _MTDSPLIT_H */ #endif /* _MTDSPLIT_H */