[coreboot-gerrit] New patch to review for coreboot: abbc654 cbfs: expost init_backing_media()

Aaron Durbin (adurbin@google.com) gerrit at coreboot.org
Tue Mar 24 21:53:25 CET 2015


Aaron Durbin (adurbin at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8973

-gerrit

commit abbc654d9b3981a666d613ad972412ac19d0cfb0
Author: Aaron Durbin <adurbin at chromium.org>
Date:   Tue Mar 24 15:50:45 2015 -0500

    cbfs: expost init_backing_media()
    
    I broke cbfs loading with 358901. As multiple
    functions are being reused on needs to ensure there is
    always a cbfs media object allocated on the stack and
    initialized.
    
    TEST=Ran qemu-armv7. CBFS loading works again.
    
    Change-Id: Ibd047af7dcd8575e6203651471079fc2042da282
    Signed-off-by: Aaron Durbin <adurbin at chromium.org>
---
 src/include/cbfs.h  | 1 +
 src/lib/cbfs.c      | 8 ++++++++
 src/lib/cbfs_core.c | 8 ++++----
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/include/cbfs.h b/src/include/cbfs.h
index 9aa2c96..2db3c94 100644
--- a/src/include/cbfs.h
+++ b/src/include/cbfs.h
@@ -52,6 +52,7 @@
 
 #include <cbfs_core.h>
 
+int init_backing_media(struct cbfs_media **media, struct cbfs_media *backing);
 void *cbfs_load_optionrom(struct cbfs_media *media, uint16_t vendor,
 			  uint16_t device, void * dest);
 void *cbfs_load_stage(struct cbfs_media *media, const char *name);
diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c
index 54d159f..9771412 100644
--- a/src/lib/cbfs.c
+++ b/src/lib/cbfs.c
@@ -76,6 +76,10 @@ void *cbfs_load_optionrom(struct cbfs_media *media, uint16_t vendor,
 void *cbfs_load_stage_by_offset(struct cbfs_media *media, ssize_t offset)
 {
 	struct cbfs_stage stage;
+	struct cbfs_media backing_store;
+
+	if (init_backing_media(&media, &backing_store))
+		return (void *)-1;
 
 	if (cbfs_read(media, &stage, offset, sizeof(stage)) != sizeof(stage)) {
 		ERROR("ERROR: failed to read stage header\n");
@@ -116,6 +120,10 @@ void *cbfs_load_stage(struct cbfs_media *media, const char *name)
 {
 	struct cbfs_file file;
 	ssize_t offset;
+	struct cbfs_media backing_store;
+
+	if (init_backing_media(&media, &backing_store))
+		return (void *)-1;
 
 	offset = cbfs_locate_file(media, &file, name);
 	if (offset < 0 || file.type != CBFS_TYPE_STAGE)
diff --git a/src/lib/cbfs_core.c b/src/lib/cbfs_core.c
index c28a865..acd434f 100644
--- a/src/lib/cbfs_core.c
+++ b/src/lib/cbfs_core.c
@@ -94,7 +94,7 @@ const struct cbfs_header *cbfs_get_header(struct cbfs_media *media)
 }
 
 
-static int init_media(struct cbfs_media **media, struct cbfs_media *backing)
+int init_backing_media(struct cbfs_media **media, struct cbfs_media *backing)
 {
 	if (*media == CBFS_DEFAULT_MEDIA) {
 		*media = backing;
@@ -115,7 +115,7 @@ ssize_t cbfs_locate_file(struct cbfs_media *media, struct cbfs_file *file,
 	const struct cbfs_header *header;
 	struct cbfs_media default_media;
 
-	if (init_media(&media, &default_media))
+	if (init_backing_media(&media, &default_media))
 		return -1;
 
 	if (CBFS_HEADER_INVALID_ADDRESS == (header = cbfs_get_header(media)))
@@ -200,7 +200,7 @@ size_t cbfs_read(struct cbfs_media *media, void *dest, size_t offset,
 	struct cbfs_media default_media;
 	size_t nread;
 
-	if (init_media(&media, &default_media))
+	if (init_backing_media(&media, &default_media))
 		return 0;
 
 	media->open(media);
@@ -216,7 +216,7 @@ struct cbfs_file *cbfs_get_file(struct cbfs_media *media, const char *name)
 	struct cbfs_file file, *file_ptr;
 	ssize_t offset;
 
-	if (init_media(&media, &default_media))
+	if (init_backing_media(&media, &default_media))
 		return NULL;
 
 	offset = cbfs_locate_file(media, &file, name);



More information about the coreboot-gerrit mailing list