summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--payloads/libpayload/include/cbfs_legacy.h1
-rw-r--r--payloads/libpayload/libcbfs/cbfs_core.c1
-rw-r--r--payloads/libpayload/libcbfs/cbfs_legacy.c88
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