diff options
author | Matteo Croce <rootkit85@yahoo.it> | 2007-09-20 19:25:38 +0000 |
---|---|---|
committer | Matteo Croce <rootkit85@yahoo.it> | 2007-09-20 19:25:38 +0000 |
commit | 8d162264af02231b9c452c0d6d38e3a8b08e4a4a (patch) | |
tree | 0e124827fc90b04915f94f48ac725c6d326cd32f /target/linux/ar7/files | |
parent | fbc7e5e4fcddb59aa004aea579d08365dfd645a4 (diff) | |
download | upstream-8d162264af02231b9c452c0d6d38e3a8b08e4a4a.tar.gz upstream-8d162264af02231b9c452c0d6d38e3a8b08e4a4a.tar.bz2 upstream-8d162264af02231b9c452c0d6d38e3a8b08e4a4a.zip |
Make ar7_part more readable and endianness safe
SVN-Revision: 8886
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 = { |