commonlib: Add common cbfs parsing logic to coreboot and cbfstool.
To continue sharing more code between the tools and coreboot proper provide cbfs parsing logic in commonlib. A cbfs_for_each_file() function was added to allow one to act on each file found within a cbfs. cbfs_locate() was updated to use that logic. BUG=chrome-os-partner:48412 BUG=chromium:445938 BRANCH=None TEST=Utilized and booted on glados. Change-Id: I1f23841583e78dc3686f106de9eafe1adbef8c9f Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://review.coreboot.org/12783 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth <martinroth@google.com> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
		| @@ -16,19 +16,9 @@ | ||||
| #ifndef _CBFS_H_ | ||||
| #define _CBFS_H_ | ||||
|  | ||||
| #include <commonlib/cbfs_serialized.h> | ||||
| #include <commonlib/region.h> | ||||
| #include <commonlib/cbfs.h> | ||||
| #include <program_loading.h> | ||||
|  | ||||
| /* | ||||
|  * CBFS operations consist of the following concepts: | ||||
|  * - region_device for the boot media | ||||
|  * - cbfsd which is a descriptor for representing a cbfs instance | ||||
|  */ | ||||
|  | ||||
| /* Object representing cbfs files. */ | ||||
| struct cbfsf; | ||||
|  | ||||
| /*********************************************** | ||||
|  * Perform CBFS operations on the boot device. * | ||||
|  ***********************************************/ | ||||
| @@ -48,28 +38,12 @@ void *cbfs_boot_map_with_leak(const char *name, uint32_t type, size_t *size); | ||||
| /* Load stage into memory filling in prog. Return 0 on success. < 0 on error. */ | ||||
| int cbfs_prog_stage_load(struct prog *prog); | ||||
|  | ||||
| /* Locate file by name and optional type. Returns 0 on succcess else < 0 on | ||||
|  * error.*/ | ||||
| int cbfs_locate(struct cbfsf *fh, const struct region_device *cbfs, | ||||
| 		const char *name, uint32_t *type); | ||||
|  | ||||
| /***************************************************************** | ||||
|  * Support structures and functions. Direct field access should  * | ||||
|  * only be done by implementers of cbfs regions -- Not the above * | ||||
|  * API.                                                          * | ||||
|  *****************************************************************/ | ||||
|  | ||||
| struct cbfsf { | ||||
| 	struct region_device metadata; | ||||
| 	struct region_device data; | ||||
| }; | ||||
|  | ||||
| static inline void cbfs_file_data(struct region_device *data, | ||||
| 					const struct cbfsf *file) | ||||
| { | ||||
| 	rdev_chain(data, &file->data, 0, region_device_sz(&file->data)); | ||||
| } | ||||
|  | ||||
| /* The cbfs_props struct describes the properties associated with a CBFS. */ | ||||
| struct cbfs_props { | ||||
| 	/* CBFS starts at the following offset within the boot region. */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user