*/
#include <linux/kernel.h>
+#include <linux/module.h>
#include <linux/slab.h>
#include <linux/vmalloc.h>
#include <linux/magic.h>
goto err;
header_len = sizeof(struct tplink_fw_header);
- ret = mtd->read(mtd, offset, header_len, &retlen,
- (unsigned char *) header);
+ ret = mtd_read(mtd, offset, header_len, &retlen,
+ (unsigned char *) header);
if (ret)
goto err_free_header;
return NULL;
}
-static int tplink_check_squashfs_magic(struct mtd_info *mtd, size_t offset)
+static int tplink_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);
+ 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)
+ if (le32_to_cpu(magic) != SQUASHFS_MAGIC &&
+ magic != 0x19852003)
return -EINVAL;
return 0;
static int tplink_parse_partitions(struct mtd_info *master,
struct mtd_partition **pparts,
- unsigned long origin)
+ struct mtd_part_parser_data *data)
{
struct mtd_partition *parts;
struct tplink_fw_header *header;
squashfs_offset = offset + sizeof(struct tplink_fw_header) +
be32_to_cpu(header->kernel_len);
- ret = tplink_check_squashfs_magic(master, squashfs_offset);
+ ret = tplink_check_rootfs_magic(master, squashfs_offset);
if (ret == 0)
rootfs_offset = squashfs_offset;
else