kernel: add support for ALLNET devices in mtdsplit
Add support for uimage headers from ALLNET and provide support for the SG8208M and SG8310PM devices' magic bytes. Signed-off-by: Birger Koblitz <git@birger-koblitz.de>
This commit is contained in:
		 Birger Koblitz
					Birger Koblitz
				
			
				
					committed by
					
						 John Crispin
						John Crispin
					
				
			
			
				
	
			
			
			 John Crispin
						John Crispin
					
				
			
						parent
						
							a9790dff53
						
					
				
				
					commit
					7bb1bd469e
				
			| @@ -319,8 +319,57 @@ static struct mtd_part_parser uimage_netgear_parser = { | |||||||
| 	.of_match_table = mtdsplit_uimage_netgear_of_match_table, | 	.of_match_table = mtdsplit_uimage_netgear_of_match_table, | ||||||
| 	.parse_fn = mtdsplit_uimage_parse_netgear, | 	.parse_fn = mtdsplit_uimage_parse_netgear, | ||||||
| 	.type = MTD_PARSER_TYPE_FIRMWARE, | 	.type = MTD_PARSER_TYPE_FIRMWARE, | ||||||
|  |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /************************************************** | ||||||
|  |  * ALLNET | ||||||
|  |  **************************************************/ | ||||||
|  |  | ||||||
|  | #define FW_MAGIC_SG8208M	0x00000006 | ||||||
|  | #define FW_MAGIC_SG8310PM	0x83000006 | ||||||
|  |  | ||||||
|  | static ssize_t uimage_verify_allnet(u_char *buf, size_t len, int *extralen) | ||||||
|  | { | ||||||
|  | 	struct uimage_header *header = (struct uimage_header *)buf; | ||||||
|  |  | ||||||
|  | 	switch (be32_to_cpu(header->ih_magic)) { | ||||||
|  | 	case FW_MAGIC_SG8208M: | ||||||
|  | 	case FW_MAGIC_SG8310PM: | ||||||
|  | 		break; | ||||||
|  | 	default: | ||||||
|  | 		return -EINVAL; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if (header->ih_os != IH_OS_LINUX) | ||||||
|  | 		return -EINVAL; | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int | ||||||
|  | mtdsplit_uimage_parse_allnet(struct mtd_info *master, | ||||||
|  | 			      const struct mtd_partition **pparts, | ||||||
|  | 			      struct mtd_part_parser_data *data) | ||||||
|  | { | ||||||
|  | 	return __mtdsplit_parse_uimage(master, pparts, data, | ||||||
|  | 				      uimage_verify_allnet); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static const struct of_device_id mtdsplit_uimage_allnet_of_match_table[] = { | ||||||
|  | 	{ .compatible = "allnet,uimage" }, | ||||||
|  | 	{}, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | static struct mtd_part_parser uimage_allnet_parser = { | ||||||
|  | 	.owner = THIS_MODULE, | ||||||
|  | 	.name = "allnet-fw", | ||||||
|  | 	.of_match_table = mtdsplit_uimage_allnet_of_match_table, | ||||||
|  | 	.parse_fn = mtdsplit_uimage_parse_allnet, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
| /************************************************** | /************************************************** | ||||||
|  * Edimax |  * Edimax | ||||||
|  **************************************************/ |  **************************************************/ | ||||||
| @@ -505,6 +554,7 @@ static int __init mtdsplit_uimage_init(void) | |||||||
| { | { | ||||||
| 	register_mtd_parser(&uimage_generic_parser); | 	register_mtd_parser(&uimage_generic_parser); | ||||||
| 	register_mtd_parser(&uimage_netgear_parser); | 	register_mtd_parser(&uimage_netgear_parser); | ||||||
|  | 	register_mtd_parser(&uimage_allnet_parser); | ||||||
| 	register_mtd_parser(&uimage_edimax_parser); | 	register_mtd_parser(&uimage_edimax_parser); | ||||||
| 	register_mtd_parser(&uimage_fonfxc_parser); | 	register_mtd_parser(&uimage_fonfxc_parser); | ||||||
| 	register_mtd_parser(&uimage_sge_parser); | 	register_mtd_parser(&uimage_sge_parser); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user