X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/82b6ff28f087a5603d5c1c30fad0a8495434b9dc..1920dadf14e1d116bc33a5fabe83ee166e259755:/target/linux/ar7/files/drivers/mtd/ar7part.c diff --git a/target/linux/ar7/files/drivers/mtd/ar7part.c b/target/linux/ar7/files/drivers/mtd/ar7part.c index 775041d7d..3d160d4cd 100644 --- a/target/linux/ar7/files/drivers/mtd/ar7part.c +++ b/target/linux/ar7/files/drivers/mtd/ar7part.c @@ -26,7 +26,13 @@ #include #include #include -#include +#include + +#define AR7_PARTS 4 +#define ROOT_OFFSET 0xe0000 + +#define LOADER_MAGIC1 le32_to_cpu(0xfeedfa42) +#define LOADER_MAGIC2 le32_to_cpu(0xfeed1281) struct ar7_bin_rec { unsigned int checksum; @@ -34,7 +40,7 @@ struct ar7_bin_rec { unsigned int address; }; -static struct mtd_partition ar7_parts[5]; +static struct mtd_partition ar7_parts[AR7_PARTS]; static int create_mtd_partitions(struct mtd_info *master, struct mtd_partition **pparts, @@ -43,12 +49,10 @@ static int create_mtd_partitions(struct mtd_info *master, struct ar7_bin_rec header; unsigned int offset, len; unsigned int pre_size = master->erasesize, post_size = 0; - unsigned int root_offset = 0xe0000; + unsigned int root_offset = ROOT_OFFSET; int retries = 10; - printk(KERN_INFO "Parsing AR7 partition map...\n"); - ar7_parts[0].name = "loader"; ar7_parts[0].offset = 0; ar7_parts[0].size = master->erasesize; @@ -62,12 +66,12 @@ static int create_mtd_partitions(struct mtd_info *master, do { /* Try 10 blocks starting from master->erasesize */ offset = pre_size; master->read(master, offset, - sizeof(header), &len, (u_char *)&header); + sizeof(header), &len, (u8 *)&header); if (!strncmp((char *)&header, "TIENV0.8", 8)) ar7_parts[1].offset = pre_size; - if (header.checksum == 0xfeedfa42) + if (header.checksum == LOADER_MAGIC1) break; - if (header.checksum == 0xfeed1281) + if (header.checksum == LOADER_MAGIC2) break; pre_size += master->erasesize; } while (retries--); @@ -80,19 +84,19 @@ static int create_mtd_partitions(struct mtd_info *master, } switch (header.checksum) { - case 0xfeedfa42: + case LOADER_MAGIC1: while (header.length) { offset += sizeof(header) + header.length; master->read(master, offset, sizeof(header), - &len, (u_char *)&header); + &len, (u8 *)&header); } root_offset = offset + sizeof(header) + 4; break; - case 0xfeed1281: + case LOADER_MAGIC2: while (header.length) { offset += sizeof(header) + header.length; master->read(master, offset, sizeof(header), - &len, (u_char *)&header); + &len, (u8 *)&header); } root_offset = offset + sizeof(header) + 4 + 0xff; root_offset &= ~(u32)0xff; @@ -103,7 +107,7 @@ static int create_mtd_partitions(struct mtd_info *master, } master->read(master, root_offset, - sizeof(header), &len, (u_char *)&header); + sizeof(header), &len, (u8 *)&header); if (header.checksum != SQUASHFS_MAGIC) { root_offset += master->erasesize - 1; root_offset &= ~(master->erasesize - 1); @@ -120,7 +124,7 @@ static int create_mtd_partitions(struct mtd_info *master, ar7_parts[3].mask_flags = 0; *pparts = ar7_parts; - return 4; + return AR7_PARTS; } static struct mtd_part_parser ar7_parser = {