summaryrefslogtreecommitdiff
path: root/payloads
diff options
context:
space:
mode:
authorDavid Hendricks <dhendrix@chromium.org>2012-11-16 14:48:22 -0800
committerStefan Reinauer <stefan.reinauer@coreboot.org>2012-11-30 00:42:31 +0100
commit90ca3b6bd7d7849898fe2363a9e6d0e002c95943 (patch)
treebe21c4f63d3f01afa0ec98018d83131c4f150f52 /payloads
parent11a20b614e708582ebd7607d39487938f35f2550 (diff)
downloadcoreboot-90ca3b6bd7d7849898fe2363a9e6d0e002c95943.tar.xz
Add multi-architecture support to cbfstool
This is an initial re-factoring of CBFS code to enable multiple architectures. To achieve a clean solution, an additional field describing the architecture has to be added to the master header. Hence we also increase the version number in the master header. Change-Id: Icda681673221f8c27efbc46f16c2c5682b16a265 Signed-off-by: Stefan Reinauer <reinauer@google.com> Signed-off-by: Hung-Te Lin <hungte@chromium.org> Signed-off-by: David Hendricks <dhendrix@chromium.org> Reviewed-on: http://review.coreboot.org/1944 Tested-by: build bot (Jenkins)
Diffstat (limited to 'payloads')
-rw-r--r--payloads/coreinfo/cbfs_module.c3
-rw-r--r--payloads/libpayload/include/cbfs_core.h24
2 files changed, 20 insertions, 7 deletions
diff --git a/payloads/coreinfo/cbfs_module.c b/payloads/coreinfo/cbfs_module.c
index ceb0e3cce2..063574731d 100644
--- a/payloads/coreinfo/cbfs_module.c
+++ b/payloads/coreinfo/cbfs_module.c
@@ -41,7 +41,8 @@ struct cbheader {
u32 bootblocksize;
u32 align;
u32 offset;
- u32 pad[2];
+ u32 architecture;
+ u32 pad[1];
} __attribute__ ((packed));
struct cbfile {
diff --git a/payloads/libpayload/include/cbfs_core.h b/payloads/libpayload/include/cbfs_core.h
index 70368f8a7d..32f2670b5b 100644
--- a/payloads/libpayload/include/cbfs_core.h
+++ b/payloads/libpayload/include/cbfs_core.h
@@ -2,6 +2,7 @@
* This file is part of the coreboot project.
*
* Copyright (C) 2008 Jordan Crouse <jordan@cosmicpenguin.net>
+ * Copyright (C) 2012 Google, Inc.
*
* This file is dual-licensed. You can choose between:
* - The GNU GPL, version 2, as published by the Free Software Foundation
@@ -76,13 +77,17 @@
/** this is the master cbfs header - it need to be
located somewhere in the bootblock. Where it
- actually lives is up to coreboot. A pointer to
- this header will live at 0xFFFFFFFc, so we can
- easily find it. */
+ actually lives is up to coreboot. On x86, a
+ pointer to this header will live at 0xFFFFFFFC,
+ so we can easily find it. */
#define CBFS_HEADER_MAGIC 0x4F524243
-#define CBFS_HEADPTR_ADDR 0xFFFFFFFc
+#if CONFIG_ARCH_X86
+#define CBFS_HEADPTR_ADDR 0xFFFFFFFC
+#endif
#define VERSION1 0x31313131
+#define VERSION2 0x31313132
+#define VERSION VERSION2
struct cbfs_header {
uint32_t magic;
@@ -91,9 +96,17 @@ struct cbfs_header {
uint32_t bootblocksize;
uint32_t align;
uint32_t offset;
- uint32_t pad[2];
+ uint32_t architecture;
+ uint32_t pad[1];
} __attribute__((packed));
+/* "Unknown" refers to CBFS headers version 1,
+ * before the architecture was defined (i.e., x86 only).
+ */
+#define CBFS_ARCHITECTURE_UNKNOWN 0xFFFFFFFF
+#define CBFS_ARCHITECTURE_X86 0x00000001
+#define CBFS_ARCHITECTURE_ARMV7 0x00000010
+
/** This is a component header - every entry in the CBFS
will have this header.
@@ -178,4 +191,3 @@ void *cbfs_find_file(const char *name, int type);
int cbfs_decompress(int algo, void *src, void *dst, int len);
struct cbfs_header *get_cbfs_header(void);
#endif
-