summaryrefslogtreecommitdiffstats
path: root/src/commonlib/bsd/include/commonlib/bsd/cbfs_serialized.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/commonlib/bsd/include/commonlib/bsd/cbfs_serialized.h')
-rw-r--r--src/commonlib/bsd/include/commonlib/bsd/cbfs_serialized.h120
1 files changed, 66 insertions, 54 deletions
diff --git a/src/commonlib/bsd/include/commonlib/bsd/cbfs_serialized.h b/src/commonlib/bsd/include/commonlib/bsd/cbfs_serialized.h
index 7171634c8e17..ac4b38f7a20f 100644
--- a/src/commonlib/bsd/include/commonlib/bsd/cbfs_serialized.h
+++ b/src/commonlib/bsd/include/commonlib/bsd/cbfs_serialized.h
@@ -6,45 +6,40 @@
#include <stdint.h>
#include <vb2_sha.h>
-/** These are standard values for the known compression
- algorithms that coreboot knows about for stages and
- payloads. Of course, other CBFS users can use whatever
- values they want, as long as they understand them. */
-
-#define CBFS_COMPRESS_NONE 0
-#define CBFS_COMPRESS_LZMA 1
-#define CBFS_COMPRESS_LZ4 2
-
-/** These are standard component types for well known
- components (i.e - those that coreboot needs to consume.
- Users are welcome to use any other value for their
- components */
-
-#define CBFS_TYPE_DELETED 0x00000000
-#define CBFS_TYPE_DELETED2 0xffffffff
-#define CBFS_TYPE_BOOTBLOCK 0x01
-#define CBFS_TYPE_STAGE 0x10
-#define CBFS_TYPE_SELF 0x20
-#define CBFS_TYPE_FIT 0x21
-#define CBFS_TYPE_OPTIONROM 0x30
-#define CBFS_TYPE_BOOTSPLASH 0x40
-#define CBFS_TYPE_RAW 0x50
-#define CBFS_TYPE_VSA 0x51
-#define CBFS_TYPE_MBI 0x52
-#define CBFS_TYPE_MICROCODE 0x53
-#define CBFS_TYPE_FSP 0x60
-#define CBFS_TYPE_MRC 0x61
-#define CBFS_TYPE_MMA 0x62
-#define CBFS_TYPE_EFI 0x63
-#define CBFS_TYPE_STRUCT 0x70
-#define CBFS_COMPONENT_CMOS_DEFAULT 0xaa
-#define CBFS_TYPE_SPD 0xab
-#define CBFS_TYPE_MRC_CACHE 0xac
-#define CBFS_COMPONENT_CMOS_LAYOUT 0x01aa
-
-#define CBFS_HEADER_MAGIC 0x4F524243
-#define CBFS_HEADER_VERSION1 0x31313131
-#define CBFS_HEADER_VERSION2 0x31313132
+enum cbfs_compression {
+ CBFS_COMPRESS_NONE = 0,
+ CBFS_COMPRESS_LZMA = 1,
+ CBFS_COMPRESS_LZ4 = 2,
+};
+
+enum cbfs_type {
+ CBFS_TYPE_DELETED = 0x00000000,
+ CBFS_TYPE_NULL = 0xffffffff,
+ CBFS_TYPE_BOOTBLOCK = 0x01,
+ CBFS_TYPE_CBFSHEADER = 0x02,
+ CBFS_TYPE_STAGE = 0x10,
+ CBFS_TYPE_SELF = 0x20,
+ CBFS_TYPE_FIT = 0x21,
+ CBFS_TYPE_OPTIONROM = 0x30,
+ CBFS_TYPE_BOOTSPLASH = 0x40,
+ CBFS_TYPE_RAW = 0x50,
+ CBFS_TYPE_VSA = 0x51,
+ CBFS_TYPE_MBI = 0x52,
+ CBFS_TYPE_MICROCODE = 0x53,
+ CBFS_TYPE_FSP = 0x60,
+ CBFS_TYPE_MRC = 0x61,
+ CBFS_TYPE_MMA = 0x62,
+ CBFS_TYPE_EFI = 0x63,
+ CBFS_TYPE_STRUCT = 0x70,
+ CBFS_TYPE_CMOS_DEFAULT = 0xaa,
+ CBFS_TYPE_SPD = 0xab,
+ CBFS_TYPE_MRC_CACHE = 0xac,
+ CBFS_TYPE_CMOS_LAYOUT = 0x01aa,
+};
+
+#define CBFS_HEADER_MAGIC 0x4F524243 /* BE: 'ORBC' */
+#define CBFS_HEADER_VERSION1 0x31313131 /* BE: '1111' */
+#define CBFS_HEADER_VERSION2 0x31313132 /* BE: '1112' */
#define CBFS_HEADER_VERSION CBFS_HEADER_VERSION2
/* this is the master cbfs header - it must be located somewhere available
@@ -68,9 +63,15 @@ struct cbfs_header {
/* "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_ARM 0x00000010
+enum cbfs_architecture {
+ CBFS_ARCHITECTURE_UNKNOWN = 0xFFFFFFFF,
+ CBFS_ARCHITECTURE_X86 = 0x00000001,
+ CBFS_ARCHITECTURE_ARM = 0x00000010,
+ CBFS_ARCHITECTURE_AARCH64 = 0x0000aa64,
+ CBFS_ARCHITECTURE_MIPS = 0x00000100, /* deprecated */
+ CBFS_ARCHITECTURE_RISCV = 0xc001d0de,
+ CBFS_ARCHITECTURE_PPC64 = 0x407570ff,
+};
/** This is a component header - every entry in the CBFS
will have this header.
@@ -88,6 +89,7 @@ struct cbfs_header {
*/
#define CBFS_FILE_MAGIC "LARCHIVE"
+#define CBFS_METADATA_MAX_SIZE 256
struct cbfs_file {
char magic[8];
@@ -95,8 +97,13 @@ struct cbfs_file {
uint32_t type;
uint32_t attributes_offset;
uint32_t offset;
+ char filename[0];
} __packed;
+#if defined __GNUC__ && (__GNUC__ * 100 + __GNUC_MINOR__) >= 406
+_Static_assert(sizeof(struct cbfs_file) == 24, "cbfs_file size mismatch");
+#endif
+
/* The common fields of extended cbfs file attributes.
Attributes are expected to start with tag/len, then append their
specific fields. */
@@ -109,13 +116,16 @@ struct cbfs_file_attribute {
/* Depending on how the header was initialized, it may be backed with 0x00 or
* 0xff. Support both. */
-#define CBFS_FILE_ATTR_TAG_UNUSED 0
-#define CBFS_FILE_ATTR_TAG_UNUSED2 0xffffffff
-#define CBFS_FILE_ATTR_TAG_COMPRESSION 0x42435a4c
-#define CBFS_FILE_ATTR_TAG_HASH 0x68736148
-#define CBFS_FILE_ATTR_TAG_POSITION 0x42435350 /* PSCB */
-#define CBFS_FILE_ATTR_TAG_ALIGNMENT 0x42434c41 /* ALCB */
-#define CBFS_FILE_ATTR_TAG_IBB 0x32494242 /* Initial BootBlock */
+enum cbfs_file_attr_tag {
+ CBFS_FILE_ATTR_TAG_UNUSED = 0,
+ CBFS_FILE_ATTR_TAG_UNUSED2 = 0xffffffff,
+ CBFS_FILE_ATTR_TAG_COMPRESSION = 0x42435a4c, /* BE: 'BCZL' */
+ CBFS_FILE_ATTR_TAG_HASH = 0x68736148, /* BE: 'hsaH' */
+ CBFS_FILE_ATTR_TAG_POSITION = 0x42435350, /* BE: 'BCSP' */
+ CBFS_FILE_ATTR_TAG_ALIGNMENT = 0x42434c41, /* BE: 'BCLA' */
+ CBFS_FILE_ATTR_TAG_IBB = 0x32494242, /* BE: '2IBB' */
+ CBFS_FILE_ATTR_TAG_PADDING = 0x47444150, /* BE: 'GNDP' */
+};
struct cbfs_file_attr_compression {
uint32_t tag;
@@ -176,11 +186,13 @@ struct cbfs_payload {
struct cbfs_payload_segment segments;
};
-#define PAYLOAD_SEGMENT_CODE 0x434F4445
-#define PAYLOAD_SEGMENT_DATA 0x44415441
-#define PAYLOAD_SEGMENT_BSS 0x42535320
-#define PAYLOAD_SEGMENT_PARAMS 0x50415241
-#define PAYLOAD_SEGMENT_ENTRY 0x454E5452
+enum cbfs_payload_segment_type {
+ PAYLOAD_SEGMENT_CODE = 0x434F4445, /* BE: 'CODE' */
+ PAYLOAD_SEGMENT_DATA = 0x44415441, /* BE: 'DATA' */
+ PAYLOAD_SEGMENT_BSS = 0x42535320, /* BE: 'BSS ' */
+ PAYLOAD_SEGMENT_PARAMS = 0x50415241, /* BE: 'PARA' */
+ PAYLOAD_SEGMENT_ENTRY = 0x454E5452, /* BE: 'ENTR' */
+};
struct cbfs_optionrom {
uint32_t compression;