X-Git-Url: https://git.archive.openwrt.org/?p=openwrt.git;a=blobdiff_plain;f=target%2Flinux%2Fgeneric%2Ffiles%2Fdrivers%2Fmtd%2Fmtdsplit_uimage.c;h=7dad63c9bbbe8601ba503272e891cfa25325864e;hp=57370658795af934601a0c73089a03ffd8c95527;hb=83bbb454eb11afbc56728ac5a9d9bf93262ad5fc;hpb=dee0e153b682181c8237b857541bed7582ee2b89 diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit_uimage.c b/target/linux/generic/files/drivers/mtd/mtdsplit_uimage.c index 5737065879..7dad63c9bb 100644 --- a/target/linux/generic/files/drivers/mtd/mtdsplit_uimage.c +++ b/target/linux/generic/files/drivers/mtd/mtdsplit_uimage.c @@ -230,24 +230,31 @@ static struct mtd_part_parser uimage_generic_parser = { }; #define FW_MAGIC_WNR2000V3 0x32303033 +#define FW_MAGIC_WNR2000V4 0x32303034 +#define FW_MAGIC_WNR2200 0x32323030 #define FW_MAGIC_WNR612V2 0x32303631 #define FW_MAGIC_WNDR3700 0x33373030 #define FW_MAGIC_WNDR3700V2 0x33373031 static bool uimage_verify_wndr3700(struct uimage_header *header) { + uint8_t expected_type = IH_TYPE_FILESYSTEM; switch be32_to_cpu(header->ih_magic) { case FW_MAGIC_WNR612V2: case FW_MAGIC_WNR2000V3: + case FW_MAGIC_WNR2200: case FW_MAGIC_WNDR3700: case FW_MAGIC_WNDR3700V2: break; + case FW_MAGIC_WNR2000V4: + expected_type = IH_TYPE_KERNEL; + break; default: return false; } if (header->ih_os != IH_OS_LINUX || - header->ih_type != IH_TYPE_FILESYSTEM) + header->ih_type != expected_type) return false; return true; @@ -269,23 +276,12 @@ static struct mtd_part_parser uimage_netgear_parser = { .type = MTD_PARSER_TYPE_FIRMWARE, }; -static int mtdsplit_uimage_init(void) +static int __init mtdsplit_uimage_init(void) { - int ret; - - ret = register_mtd_parser(&uimage_generic_parser); - if (ret) - return ret; - - ret = register_mtd_parser(&uimage_netgear_parser); - if (ret) - goto err_unregister_generic; + register_mtd_parser(&uimage_generic_parser); + register_mtd_parser(&uimage_netgear_parser); return 0; - -err_unregister_generic: - deregister_mtd_parser(&uimage_generic_parser); - return ret; } -module_init(mtdsplit_uimage_init); \ No newline at end of file +module_init(mtdsplit_uimage_init);