};
#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;
.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);