mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-30 18:05:48 +01:00 
			
		
		
		
	[new uImage] Add fit_parse_conf() and fit_parse_subimage() routines
Introducing routines for parsing new uImage format bootm arguments: [<addr>]#<conf> - configuration specification [<addr>]:<subimg> - subimage specification New format images can contain multiple subimages of the same type. For example a single new format image file can contain three kernels, two ramdisks and a couple of FDT blobs. Subimage and configuration specifications are extensions to bootm (and other image-related commands) arguments' syntax that allow to specify which particular subimage should be operated on. Subimage specification is used to denote a particular subimage. Configurations are a bit more complex -- they are used to define a particualr booting setup, for example a (kernel, fdt blob) pair, or a (kernel, ramdisk, fdt blob) tuple, etc. Signed-off-by: Marian Balakowicz <m8@semihalf.com>
This commit is contained in:
		| @@ -774,4 +774,82 @@ ulong get_boot_kbd (ulong alloc_current, bd_t **kbd) | |||||||
| } | } | ||||||
| #endif /* CONFIG_PPC || CONFIG_M68K */ | #endif /* CONFIG_PPC || CONFIG_M68K */ | ||||||
|  |  | ||||||
|  | #if defined(CONFIG_FIT) | ||||||
|  | /*****************************************************************************/ | ||||||
|  | /* New uImage format routines */ | ||||||
|  | /*****************************************************************************/ | ||||||
|  | static int fit_parse_spec (const char *spec, char sepc, ulong addr_curr, | ||||||
|  | 		ulong *addr, const char **name) | ||||||
|  | { | ||||||
|  | 	const char *sep; | ||||||
|  |  | ||||||
|  | 	*addr = addr_curr; | ||||||
|  | 	*name = NULL; | ||||||
|  |  | ||||||
|  | 	sep = strchr (spec, sepc); | ||||||
|  | 	if (sep) { | ||||||
|  | 		if (sep - spec > 0) | ||||||
|  | 			*addr = simple_strtoul (spec, NULL, 16); | ||||||
|  |  | ||||||
|  | 		*name = sep + 1; | ||||||
|  | 		return 1; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * fit_parse_conf - parse FIT configuration spec | ||||||
|  |  * @spec: input string, containing configuration spec | ||||||
|  |  * @add_curr: current image address (to be used as a possible default) | ||||||
|  |  * @addr: pointer to a ulong variable, will hold FIT image address of a given | ||||||
|  |  * configuration | ||||||
|  |  * @conf_name double pointer to a char, will hold pointer to a configuration | ||||||
|  |  * unit name | ||||||
|  |  * | ||||||
|  |  * fit_parse_conf() expects configuration spec in the for of [<addr>]#<conf>, | ||||||
|  |  * where <addr> is a FIT image address that contains configuration | ||||||
|  |  * with a <conf> unit name. | ||||||
|  |  * | ||||||
|  |  * Address part is optional, and if omitted default add_curr will | ||||||
|  |  * be used instead. | ||||||
|  |  * | ||||||
|  |  * returns: | ||||||
|  |  *     1 if spec is a valid configuration string, | ||||||
|  |  *     addr and conf_name are set accordingly | ||||||
|  |  *     0 otherwise | ||||||
|  |  */ | ||||||
|  | inline int fit_parse_conf (const char *spec, ulong addr_curr, | ||||||
|  | 		ulong *addr, const char **conf_name) | ||||||
|  | { | ||||||
|  | 	return fit_parse_spec (spec, '#', addr_curr, addr, conf_name); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * fit_parse_subimage - parse FIT subimage spec | ||||||
|  |  * @spec: input string, containing subimage spec | ||||||
|  |  * @add_curr: current image address (to be used as a possible default) | ||||||
|  |  * @addr: pointer to a ulong variable, will hold FIT image address of a given | ||||||
|  |  * subimage | ||||||
|  |  * @image_name: double pointer to a char, will hold pointer to a subimage name | ||||||
|  |  * | ||||||
|  |  * fit_parse_subimage() expects subimage spec in the for of | ||||||
|  |  * [<addr>]:<subimage>, where <addr> is a FIT image address that contains | ||||||
|  |  * subimage with a <subimg> unit name. | ||||||
|  |  * | ||||||
|  |  * Address part is optional, and if omitted default add_curr will | ||||||
|  |  * be used instead. | ||||||
|  |  * | ||||||
|  |  * returns: | ||||||
|  |  *     1 if spec is a valid subimage string, | ||||||
|  |  *     addr and image_name are set accordingly | ||||||
|  |  *     0 otherwise | ||||||
|  |  */ | ||||||
|  | inline int fit_parse_subimage (const char *spec, ulong addr_curr, | ||||||
|  | 		ulong *addr, const char **image_name) | ||||||
|  | { | ||||||
|  | 	return fit_parse_spec (spec, ':', addr_curr, addr, image_name); | ||||||
|  | } | ||||||
|  | #endif /* CONFIG_FIT */ | ||||||
|  |  | ||||||
| #endif /* USE_HOSTCC */ | #endif /* USE_HOSTCC */ | ||||||
|   | |||||||
| @@ -367,6 +367,16 @@ ulong get_boot_cmdline (ulong alloc_current, ulong *cmd_start, ulong *cmd_end); | |||||||
| ulong get_boot_kbd (ulong alloc_current, bd_t **kbd); | ulong get_boot_kbd (ulong alloc_current, bd_t **kbd); | ||||||
| #endif /* CONFIG_PPC || CONFIG_M68K */ | #endif /* CONFIG_PPC || CONFIG_M68K */ | ||||||
|  |  | ||||||
|  | #if defined(CONFIG_FIT) | ||||||
|  | /* | ||||||
|  |  * New uImage format | ||||||
|  |  */ | ||||||
|  | inline int fit_parse_conf (const char *spec, ulong addr_curr, | ||||||
|  | 		ulong *addr, const char **conf_name); | ||||||
|  | inline int fit_parse_subimage (const char *spec, ulong addr_curr, | ||||||
|  | 		ulong *addr, const char **image_name); | ||||||
|  | #endif /* CONFIG_FIT */ | ||||||
|  |  | ||||||
| #endif /* USE_HOSTCC */ | #endif /* USE_HOSTCC */ | ||||||
|  |  | ||||||
| #endif	/* __IMAGE_H__ */ | #endif	/* __IMAGE_H__ */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user