diff options
author | Aaron Durbin <adurbin@chromium.org> | 2015-09-17 16:09:30 -0500 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2015-10-07 10:46:11 +0000 |
commit | 37a5d15da92a9fb8a682a32ef1eaf37734fcc5ad (patch) | |
tree | 8f37c1712f44789501a830fdaaaf22012972738c /src/vendorcode/google | |
parent | 72bb66eb9cecf94b66a4aca3586165d5495fcfdb (diff) |
cbfs: add struct cbfsf
Now that cbfs is adding more metadata in the cbfs file
header one needs to access that metadata. Therefore,
add struct cbfsf which tracks the metadata and data
of the file separately. Note that stage and payload
metadata specific to itself is still contained within
the 'data' portion of a cbfs file. Update the cbfs
API to use struct cbfsf. Additionally, remove struct
cbfsd as there's nothing else associated with a cbfs
region aside from offset and size which tracked
by a region_device (thanks, CBFS_ALIGNMENT!).
BUG=None
BRANCH=None
TEST=Built and booted through end of ramstage on qemu armv7.
Built and booted glados using Chrome OS.
Change-Id: I05486c6cf6cfcafa5c64b36324833b2374f763c2
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/11679
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'src/vendorcode/google')
-rw-r--r-- | src/vendorcode/google/chromeos/vboot2/vboot_loader.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/vendorcode/google/chromeos/vboot2/vboot_loader.c b/src/vendorcode/google/chromeos/vboot2/vboot_loader.c index 40f3fa3468..8517a30999 100644 --- a/src/vendorcode/google/chromeos/vboot2/vboot_loader.c +++ b/src/vendorcode/google/chromeos/vboot2/vboot_loader.c @@ -73,6 +73,7 @@ static int vboot_active(struct asset *asset) if (run_verification) { verstage_main(); } else if (verstage_should_load()) { + struct cbfsf file; struct prog verstage = PROG_INIT(ASSET_VERSTAGE, CONFIG_CBFS_PREFIX "/verstage"); @@ -80,9 +81,12 @@ static int vboot_active(struct asset *asset) printk(BIOS_DEBUG, "VBOOT: Loading verstage.\n"); /* load verstage from RO */ - if (cbfs_boot_locate(prog_rdev(&verstage), - prog_name(&verstage), NULL) || - cbfs_prog_stage_load(&verstage)) + if (cbfs_boot_locate(&file, prog_name(&verstage), NULL)) + die("failed to load verstage"); + + cbfs_file_data(prog_rdev(&verstage), &file); + + if (cbfs_prog_stage_load(&verstage)) die("failed to load verstage"); /* verify and select a slot */ @@ -162,9 +166,14 @@ static int vboot_locate_by_components(const struct region_device *fw_main, static int vboot_locate_by_multi_cbfs(const struct region_device *fw_main, struct asset *asset) { - struct cbfsd cbfs; - cbfs.rdev = fw_main; - return cbfs_locate(asset_rdev(asset), &cbfs, asset_name(asset), NULL); + struct cbfsf file; + + if (cbfs_locate(&file, fw_main, asset_name(asset), NULL)) + return -1; + + cbfs_file_data(asset_rdev(asset), &file); + + return 0; } static int vboot_asset_locate(const struct region_device *fw_main, |