diff options
author | Julius Werner <jwerner@chromium.org> | 2022-01-12 15:42:49 -0800 |
---|---|---|
committer | Julius Werner <jwerner@chromium.org> | 2022-01-14 00:41:13 +0000 |
commit | db29b3765b1d760c4fff4e21b27a4aabe218f4ab (patch) | |
tree | 07943b992a358058323c012d4d00faacf6029afa | |
parent | f04e83abbf98d1d55ec2c4fea3fb74bf2f459139 (diff) |
libpayload: Fix legacy CBFS code after recent refactoring
The goal when adding the new CBFS API in CB:59497 was that the old CBFS
code would be left completely untouched and just moved to the side a
bit, so that it could continue to work for the payloads that use it
until they all have time to transition to the new CBFS API.
Unfortunately, between the different iterations of the patch something
went wrong with that and the final committed version of cbfs_legacy.c
does differ in some parts from the original code, including a changed
macro definition that breaks decompression support. This patch restores
all the legacy CBFS files to exactly what they used to be (other than
the necessary changes in cbfs_core.h to avoid double definition
clashes).
Signed-off-by: Julius Werner <jwerner@chromium.org>
Change-Id: Ic7fd428acb03d3830f66f807cd1d7cdbd652f409
Reviewed-on: https://review.coreboot.org/c/coreboot/+/61061
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Jakub Czapiga <jacz@semihalf.com>
-rw-r--r-- | payloads/libpayload/include/cbfs_legacy.h | 1 | ||||
-rw-r--r-- | payloads/libpayload/libcbfs/cbfs_core.c | 1 | ||||
-rw-r--r-- | payloads/libpayload/libcbfs/cbfs_legacy.c | 88 |
3 files changed, 55 insertions, 35 deletions
diff --git a/payloads/libpayload/include/cbfs_legacy.h b/payloads/libpayload/include/cbfs_legacy.h index c1b896cea4..c98da0c112 100644 --- a/payloads/libpayload/include/cbfs_legacy.h +++ b/payloads/libpayload/include/cbfs_legacy.h @@ -46,7 +46,6 @@ #define _CBFS_LEGACY_H_ #include <cbfs_core.h> -#include <libpayload.h> /* legacy APIs */ const struct cbfs_header *get_cbfs_header(void); diff --git a/payloads/libpayload/libcbfs/cbfs_core.c b/payloads/libpayload/libcbfs/cbfs_core.c index bc513682c9..82c2846054 100644 --- a/payloads/libpayload/libcbfs/cbfs_core.c +++ b/payloads/libpayload/libcbfs/cbfs_core.c @@ -242,6 +242,7 @@ void *cbfs_get_contents(struct cbfs_handle *handle, size_t *size, size_t limit) cbfs_get_attr(handle, CBFS_FILE_ATTR_TAG_COMPRESSION); if (comp) { algo = ntohl(comp->compression); + DEBUG("File '%s' is compressed (alg=%d)\n", name, algo); *size = ntohl(comp->decompressed_size); /* TODO: Implement partial decompression with |limit| */ } diff --git a/payloads/libpayload/libcbfs/cbfs_legacy.c b/payloads/libpayload/libcbfs/cbfs_legacy.c index 8249196d9a..d24b528ded 100644 --- a/payloads/libpayload/libcbfs/cbfs_legacy.c +++ b/payloads/libpayload/libcbfs/cbfs_legacy.c @@ -26,34 +26,55 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ - -#include <libpayload-config.h> -#if CONFIG(LP_LZMA) -# include <lzma.h> -# define CB_CBFS_CORE_WITH_LZMA -#endif -#if CONFIG(LP_LZ4) -# include <lz4.h> -# define CB_CBFS_CORE_WITH_LZ4 +#define LIBPAYLOAD + +#ifdef LIBPAYLOAD +# include <libpayload-config.h> +# if CONFIG(LP_LZMA) +# include <lzma.h> +# define CBFS_CORE_WITH_LZMA +# endif +# if CONFIG(LP_LZ4) +# include <lz4.h> +# define CBFS_CORE_WITH_LZ4 +# endif +# define CBFS_MINI_BUILD +#elif defined(__SMM__) +# define CBFS_MINI_BUILD +#else +# define CBFS_CORE_WITH_LZMA +# define CBFS_CORE_WITH_LZ4 +# include <lib.h> #endif -#include <cbfs_legacy.h> -#include <stdio.h> - -#define DEBUG(x...) -#define LOG(x...) -#define ERROR(x...) printf(x) - -#ifndef __SMM__ +#include <cbfs.h> +#include <string.h> + +#ifdef LIBPAYLOAD +# include <stdio.h> +# define DEBUG(x...) +# define LOG(x...) +# define ERROR(x...) printf(x) +#else +# include <console/console.h> +# define ERROR(x...) printk(BIOS_ERR, "CBFS: " x) +# define LOG(x...) printk(BIOS_INFO, "CBFS: " x) +# if CONFIG_LP_DEBUG_CBFS +# define DEBUG(x...) printk(BIOS_SPEW, "CBFS: " x) +# else +# define DEBUG(x...) +# endif +#endif #include "cbfs_core.c" +#ifndef __SMM__ static inline int tohex4(unsigned int c) { return (c <= 9) ? (c + '0') : (c - 10 + 'a'); } -static void tohex16(unsigned int val, char *dest) +static void tohex16(unsigned int val, char* dest) { dest[0] = tohex4(val>>12); dest[1] = tohex4((val>>8) & 0xf); @@ -72,7 +93,7 @@ void *cbfs_load_optionrom(struct cbfs_media *media, uint16_t vendor, return cbfs_get_file_content(media, name, CBFS_TYPE_OPTIONROM, NULL); } -void *cbfs_load_stage(struct cbfs_media *media, const char *name) +void * cbfs_load_stage(struct cbfs_media *media, const char *name) { struct cbfs_stage *stage = (struct cbfs_stage *) cbfs_get_file_content(media, name, CBFS_TYPE_STAGE, NULL); @@ -84,8 +105,10 @@ void *cbfs_load_stage(struct cbfs_media *media, const char *name) if (stage == NULL) return (void *) -1; - LOG("loading stage %s @ %p (%d bytes), entry @ 0x%llx\n", name, - (void *)(uintptr_t)stage->load, stage->memlen, stage->entry); + LOG("loading stage %s @ %p (%d bytes), entry @ 0x%llx\n", + name, + (void*)(uintptr_t) stage->load, stage->memlen, + stage->entry); final_size = cbfs_decompress(stage->compression, ((unsigned char *) stage) + @@ -138,8 +161,7 @@ void *cbfs_load_payload(struct cbfs_media *media, const char *name) media, name, CBFS_TYPE_SELF, NULL); } -struct cbfs_file *cbfs_find(const char *name) -{ +struct cbfs_file *cbfs_find(const char *name) { struct cbfs_handle *handle = cbfs_get_handle(CBFS_DEFAULT_MEDIA, name); struct cbfs_media *m = &handle->media; void *ret; @@ -158,21 +180,19 @@ struct cbfs_file *cbfs_find(const char *name) return ret; } -void *cbfs_find_file(const char *name, int type) -{ +void *cbfs_find_file(const char *name, int type) { return cbfs_get_file_content(CBFS_DEFAULT_MEDIA, name, type, NULL); } -const struct cbfs_header *get_cbfs_header(void) -{ +const struct cbfs_header *get_cbfs_header(void) { return cbfs_get_header(CBFS_DEFAULT_MEDIA); } /* Simple buffer */ -void *cbfs_simple_buffer_map(struct cbfs_simple_buffer *buffer, struct cbfs_media *media, - size_t offset, size_t count) -{ +void *cbfs_simple_buffer_map(struct cbfs_simple_buffer *buffer, + struct cbfs_media *media, + size_t offset, size_t count) { void *address = buffer->buffer + buffer->allocated; DEBUG("simple_buffer_map(offset=%zu, count=%zu): " "allocated=%zu, size=%zu, last_allocate=%zu\n", @@ -190,8 +210,8 @@ void *cbfs_simple_buffer_map(struct cbfs_simple_buffer *buffer, struct cbfs_medi return address; } -void *cbfs_simple_buffer_unmap(struct cbfs_simple_buffer *buffer, const void *address) -{ +void *cbfs_simple_buffer_unmap(struct cbfs_simple_buffer *buffer, + const void *address) { // TODO Add simple buffer management so we can free more than last // allocated one. DEBUG("simple_buffer_unmap(address=%p): " @@ -215,9 +235,9 @@ void *cbfs_simple_buffer_unmap(struct cbfs_simple_buffer *buffer, const void *ad int run_address(void *f) { - int (*v)(void); + int (*v) (void); v = f; return v(); } -#endif /* __SMM__ */ +#endif |