[coreboot-gerrit] Patch set updated for coreboot: 52606b9 CBFS: Change the signature of cbfs_decompress.

Gabe Black (gabeblack@chromium.org) gerrit at coreboot.org
Mon Jul 15 08:32:54 CEST 2013


Gabe Black (gabeblack at chromium.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3578

-gerrit

commit 52606b9f63f731fd82bf98589e6f4fb5fb7456b8
Author: Gabe Black <gabeblack at chromium.org>
Date:   Mon Jul 1 04:57:37 2013 -0700

    CBFS: Change the signature of cbfs_decompress.
    
    Instead of returning 0 on success and -1 on error, return the decompressed
    size of the data on success and 0 on error. The decompressed size is useful
    information to have that was being thrown away in that function.
    
    Change-Id: If787201aa61456b1e47feaf3a0071c753fa299a3
    Signed-off-by: Gabe Black <gabeblack at chromium.org>
---
 payloads/libpayload/include/cbfs_core.h       |  2 +-
 payloads/libpayload/libcbfs/cbfs.c            |  4 ++--
 payloads/libpayload/libcbfs/cbfs_core.c       |  9 +++------
 src/include/cbfs_core.h                       |  2 +-
 src/lib/cbfs.c                                | 18 ++++++++++--------
 src/lib/cbfs_core.c                           |  9 +++------
 src/vendorcode/google/chromeos/vboot_loader.c |  8 ++++----
 7 files changed, 24 insertions(+), 28 deletions(-)

diff --git a/payloads/libpayload/include/cbfs_core.h b/payloads/libpayload/include/cbfs_core.h
index 2dc1992..8be7212 100644
--- a/payloads/libpayload/include/cbfs_core.h
+++ b/payloads/libpayload/include/cbfs_core.h
@@ -217,7 +217,7 @@ struct cbfs_file *cbfs_get_file(struct cbfs_media *media, const char *name);
 void *cbfs_get_file_content(struct cbfs_media *media, const char *name,
 			    int type);
 
-/* returns 0 on success, -1 on failure */
+/* returns decompressed size on success, 0 on failure */
 int cbfs_decompress(int algo, void *src, void *dst, int len);
 
 /* returns a pointer to CBFS master header, or CBFS_HEADER_INVALID_ADDRESS
diff --git a/payloads/libpayload/libcbfs/cbfs.c b/payloads/libpayload/libcbfs/cbfs.c
index 2fb91bf..6243473 100644
--- a/payloads/libpayload/libcbfs/cbfs.c
+++ b/payloads/libpayload/libcbfs/cbfs.c
@@ -120,7 +120,7 @@ void *cbfs_load_optionrom(struct cbfs_media *media, uint16_t vendor,
 	if (! dest)
 		return src;
 
-	if (cbfs_decompress(ntohl(orom->compression),
+	if (!cbfs_decompress(ntohl(orom->compression),
 			     src,
 			     dest,
 			     ntohl(orom->len)))
@@ -146,7 +146,7 @@ void * cbfs_load_stage(struct cbfs_media *media, const char *name)
 			stage->entry);
 	memset((void *) (uint32_t) stage->load, 0, stage->memlen);
 
-	if (cbfs_decompress(stage->compression,
+	if (!cbfs_decompress(stage->compression,
 			     ((unsigned char *) stage) +
 			     sizeof(struct cbfs_stage),
 			     (void *) (uint32_t) stage->load,
diff --git a/payloads/libpayload/libcbfs/cbfs_core.c b/payloads/libpayload/libcbfs/cbfs_core.c
index 48a4b3a..1945813 100644
--- a/payloads/libpayload/libcbfs/cbfs_core.c
+++ b/payloads/libpayload/libcbfs/cbfs_core.c
@@ -196,19 +196,16 @@ int cbfs_decompress(int algo, void *src, void *dst, int len)
 	switch (algo) {
 		case CBFS_COMPRESS_NONE:
 			memcpy(dst, src, len);
-			return 0;
+			return len;
 #ifdef CBFS_CORE_WITH_LZMA
 		case CBFS_COMPRESS_LZMA:
-			if (ulzma(src, dst) != 0) {
-				return 0;
-			}
-			return -1;
+			return ulzma(src, dst);
 #endif
 		default:
 			ERROR("tried to decompress %d bytes with algorithm #%x,"
 			      "but that algorithm id is unsupported.\n", len,
 			      algo);
-			return -1;
+			return 0;
 	}
 }
 
diff --git a/src/include/cbfs_core.h b/src/include/cbfs_core.h
index 54e2f60..08fe815 100644
--- a/src/include/cbfs_core.h
+++ b/src/include/cbfs_core.h
@@ -218,7 +218,7 @@ struct cbfs_file *cbfs_get_file(struct cbfs_media *media, const char *name);
 void *cbfs_get_file_content(struct cbfs_media *media, const char *name,
 			    int type);
 
-/* returns 0 on success, -1 on failure */
+/* returns decompressed size on success, 0 on failure */
 int cbfs_decompress(int algo, void *src, void *dst, int len);
 
 /* returns a pointer to CBFS master header, or CBFS_HEADER_INVALID_ADDRESS
diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c
index aba1bcc..400b8a5 100644
--- a/src/lib/cbfs.c
+++ b/src/lib/cbfs.c
@@ -112,7 +112,7 @@ void *cbfs_load_optionrom(struct cbfs_media *media, uint16_t vendor,
 	if (! dest)
 		return src;
 
-	if (cbfs_decompress(ntohl(orom->compression),
+	if (!cbfs_decompress(ntohl(orom->compression),
 			     src,
 			     dest,
 			     ntohl(orom->len)))
@@ -204,8 +204,8 @@ static void *load_stage_from_cbfs(struct cbfs_media *media, const char *name,
 	LOG("Decompressing stage %s @ 0x%p (%d bytes)\n",
 	    name, &ramstage_region[rmodule_offset], stage->memlen);
 
-	if (cbfs_decompress(stage->compression, &stage[1],
-	                    &ramstage_region[rmodule_offset], stage->len))
+	if (!cbfs_decompress(stage->compression, &stage[1],
+	                     &ramstage_region[rmodule_offset], stage->len))
 		return (void *) -1;
 
 	if (rmodule_parse(&ramstage_region[rmodule_offset], &ramstage))
@@ -259,6 +259,7 @@ void * cbfs_load_stage(struct cbfs_media *media, const char *name)
 	/* this is a mess. There is no ntohll. */
 	/* for now, assume compatible byte order until we solve this. */
 	uint32_t entry;
+	uint32_t final_size;
 
 	if (stage == NULL)
 		return (void *) -1;
@@ -270,11 +271,12 @@ void * cbfs_load_stage(struct cbfs_media *media, const char *name)
 	/* Stages rely the below clearing so that the bss is initialized. */
 	memset((void *) (uint32_t) stage->load, 0, stage->memlen);
 
-	if (cbfs_decompress(stage->compression,
-			     ((unsigned char *) stage) +
-			     sizeof(struct cbfs_stage),
-			     (void *) (uint32_t) stage->load,
-			     stage->len))
+	final_size = cbfs_decompress(stage->compression,
+				     ((unsigned char *) stage) +
+				     sizeof(struct cbfs_stage),
+				     (void *) (uint32_t) stage->load,
+				     stage->len);
+	if (!final_size)
 		return (void *) -1;
 
 	DEBUG("stage loaded.\n");
diff --git a/src/lib/cbfs_core.c b/src/lib/cbfs_core.c
index 39c1ff6..612fef2 100644
--- a/src/lib/cbfs_core.c
+++ b/src/lib/cbfs_core.c
@@ -196,19 +196,16 @@ int cbfs_decompress(int algo, void *src, void *dst, int len)
 	switch (algo) {
 		case CBFS_COMPRESS_NONE:
 			memmove(dst, src, len);
-			return 0;
+			return len;
 #ifdef CBFS_CORE_WITH_LZMA
 		case CBFS_COMPRESS_LZMA:
-			if (ulzma(src, dst) != 0) {
-				return 0;
-			}
-			return -1;
+			return ulzma(src, dst);
 #endif
 		default:
 			ERROR("tried to decompress %d bytes with algorithm #%x,"
 			      "but that algorithm id is unsupported.\n", len,
 			      algo);
-			return -1;
+			return 0;
 	}
 }
 
diff --git a/src/vendorcode/google/chromeos/vboot_loader.c b/src/vendorcode/google/chromeos/vboot_loader.c
index 10fa52d..b627af6 100644
--- a/src/vendorcode/google/chromeos/vboot_loader.c
+++ b/src/vendorcode/google/chromeos/vboot_loader.c
@@ -66,8 +66,8 @@ static void vboot_run_stub(struct vboot_context *context)
 
 	vboot_region = cbmem_entry_start(vboot_entry);
 
-	if (cbfs_decompress(stage->compression, &stage[1],
-	                    &vboot_region[rmodule_offset], stage->len)) {
+	if (!cbfs_decompress(stage->compression, &stage[1],
+	                     &vboot_region[rmodule_offset], stage->len)) {
 		printk(BIOS_DEBUG, "Couldn't decompress vboot stub.\n");
 		goto out;
 	}
@@ -221,8 +221,8 @@ static void vboot_load_ramstage(struct vboot_handoff *vboot_handoff,
 	printk(BIOS_DEBUG, "Decompressing ramstage @ 0x%p (%d bytes)\n",
 	       &ramstage_region[rmodule_offset], stage->memlen);
 
-	if (cbfs_decompress(stage->compression, &stage[1],
-	                    &ramstage_region[rmodule_offset], stage->len))
+	if (!cbfs_decompress(stage->compression, &stage[1],
+	                     &ramstage_region[rmodule_offset], stage->len))
 		return;
 
 	if (rmodule_parse(&ramstage_region[rmodule_offset], &ramstage))



More information about the coreboot-gerrit mailing list