diff options
author | matteo <matteo@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-09-20 19:25:38 +0000 |
---|---|---|
committer | matteo <matteo@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-09-20 19:25:38 +0000 |
commit | b377dac4406e27f0c626db9d5144f7479071a72d (patch) | |
tree | 77c71fafa98518f296f45bb82ffa70b138a694ed /target/linux/ar7/files | |
parent | a649bef0a750e980750f4624cf22a0e47cc75df0 (diff) |
Make ar7_part more readable and endianness safe
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@8886 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ar7/files')
-rw-r--r-- | target/linux/ar7/files/drivers/mtd/ar7part.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/target/linux/ar7/files/drivers/mtd/ar7part.c b/target/linux/ar7/files/drivers/mtd/ar7part.c index 775041d7d6..8bfd5711a2 100644 --- a/target/linux/ar7/files/drivers/mtd/ar7part.c +++ b/target/linux/ar7/files/drivers/mtd/ar7part.c @@ -26,7 +26,18 @@ #include <linux/mtd/mtd.h> #include <linux/mtd/partitions.h> #include <linux/bootmem.h> -#include <linux/squashfs_fs.h> +#include <linux/magic.h> + +#define AR7_PARTS 4 +#define ROOT_OFFSET 0xe0000 + +#ifdef CONFIG_CPU_LITTLE_ENDIAN +#define LOADER_MAGIC1 0xfeedfa42 +#define LOADER_MAGIC2 0xfeed1281 +#else +#define LOADER_MAGIC1 0x42faedfe +#define LOADER_MAGIC2 0x8112edfe +#endif struct ar7_bin_rec { unsigned int checksum; @@ -34,7 +45,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 +54,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; @@ -65,9 +74,9 @@ static int create_mtd_partitions(struct mtd_info *master, sizeof(header), &len, (u_char *)&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,7 +89,7 @@ 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), @@ -88,7 +97,7 @@ static int create_mtd_partitions(struct mtd_info *master, } 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), @@ -120,7 +129,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 = { |