X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/6f9c59a813a0bbfff8eba6554e502a47d2cfa44b..9fa649271dbc9c83417488203aeb1668a0238c54:/target/linux/ar7/files/drivers/mtd/ar7part.c?ds=sidebyside diff --git a/target/linux/ar7/files/drivers/mtd/ar7part.c b/target/linux/ar7/files/drivers/mtd/ar7part.c index 111157523..3d160d4cd 100644 --- a/target/linux/ar7/files/drivers/mtd/ar7part.c +++ b/target/linux/ar7/files/drivers/mtd/ar7part.c @@ -1,16 +1,16 @@ /* * Copyright (C) 2007 Eugene Konev - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -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,21 +40,19 @@ 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, +static int create_mtd_partitions(struct mtd_info *master, + struct mtd_partition **pparts, unsigned long origin) { 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; @@ -59,14 +63,15 @@ static int create_mtd_partitions(struct mtd_info *master, ar7_parts[1].size = master->erasesize; ar7_parts[1].mask_flags = 0; - do { + do { /* Try 10 blocks starting from master->erasesize */ offset = pre_size; - master->read(master, offset, sizeof(header), &len, (u_char *)&header); + master->read(master, offset, + 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--); @@ -79,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; @@ -101,7 +106,8 @@ static int create_mtd_partitions(struct mtd_info *master, break; } - master->read(master, root_offset, sizeof(header), &len, (u_char *)&header); + master->read(master, root_offset, + sizeof(header), &len, (u8 *)&header); if (header.checksum != SQUASHFS_MAGIC) { root_offset += master->erasesize - 1; root_offset &= ~(master->erasesize - 1); @@ -118,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 = { @@ -135,5 +141,6 @@ static int __init ar7_parser_init(void) module_init(ar7_parser_init); MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Felix Fietkau , Eugene Konev "); +MODULE_AUTHOR( "Felix Fietkau , " + "Eugene Konev "); MODULE_DESCRIPTION("MTD partitioning for TI AR7");