Add detection/dump support for ServerEngines SE-SM 4210-P01.
[coreboot.git] / util / cbfstool / cbfs.h
index 04a12fc24a16ae11161c3a906e37f58e81081a22..5c93838a36b1ccc0e947a923714369b572d681e5 100644 (file)
@@ -1,7 +1,6 @@
 /*
- * cbfstool
- *
- * Copyright (C) 2008 Jordan Crouse <jordan@cosmicpenguin.net>
+ * Copyright (C) 2009 coresystems GmbH
+ *                 written by Patrick Georgi <patrick.georgi@coresystems.de>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
  */
 
-#ifndef _CBFS_H_
-#define _CBFS_H_
-
-/** These are standard values for the known compression
-    alogrithms that coreboot knows about for stages and
-    payloads.  Of course, other LAR 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_NRV2B 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_COMPONENT_STAGE     0x10
-#define CBFS_COMPONENT_PAYLOAD   0x20
-#define CBFS_COMPONENT_OPTIONROM 0x30
-
-/* The deleted type is chosen to be a value
- * that can be written in a FLASH from all other
- * values. 
- */
-#define CBFS_COMPONENT_DELETED 0
-
-/* for all known FLASH, this value can be changed 
- * to all other values. This allows NULL files to be 
- * changed without a block erase
- */
-#define CBFS_COMPONENT_NULL 0xFFFFFFFF
-
-/** 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 0xFFFFFFF4, so we can
-    easily find it. */
-
-#define HEADER_MAGIC 0x4F524243
-
-/* this is a version that gives the right answer in any endian-ness */
-#define VERSION1 0x31313131
+#include <stdint.h>
 
 struct cbfs_header {
-       unsigned int magic;
-       unsigned int version; 
-       unsigned int romsize;
-       unsigned int bootblocksize;
-       unsigned int align;
-       unsigned int offset;
-       unsigned int pad[2];
+       uint32_t magic;
+       uint32_t version;
+       uint32_t romsize;
+       uint32_t bootblocksize;
+       uint32_t align;
+       uint32_t offset;
+       uint32_t pad[2];
 } __attribute__ ((packed));
 
-/** This is a component header - every entry in the CBFS
-    will have this header.
-
-    This is how the component is arranged in the ROM:
-
-    --------------   <- 0
-    component header 
-    --------------   <- sizeof(struct component)
-    component name
-    --------------   <- offset
-    data
-    ...
-    --------------   <- offset + len
-*/
-
-#define COMPONENT_MAGIC "LARCHIVE"
-
 struct cbfs_file {
        char magic[8];
-       unsigned int len;
-       unsigned int type;
-       unsigned int checksum;
-       unsigned int offset;
+       uint32_t len;
+       uint32_t type;
+       uint32_t checksum;
+       uint32_t offset;
 } __attribute__ ((packed));
 
-/*** Component sub-headers ***/
-
-/* Following are component sub-headers for the "standard"
-   component types */
-
-/** This is the sub-header for stage components.  Stages are
-    loaded by coreboot during the normal boot process */
-
 struct cbfs_stage {
-       unsigned int compression;  /** Compression type */
-       unsigned long long entry;  /** entry point */
-       unsigned long long load;   /** Where to load in memory */
-       unsigned int len;          /** length of data to load */
-       unsigned int memlen;       /** total length of object in memory */
+       unsigned int compression;
+       unsigned long long entry;
+       unsigned long long load;
+       unsigned int len;
+       unsigned int memlen;
 } __attribute__ ((packed));
 
-/** this is the sub-header for payload components.  Payloads
-    are loaded by coreboot at the end of the boot process */
+#define PAYLOAD_SEGMENT_CODE   0x45444F43
+#define PAYLOAD_SEGMENT_DATA   0x41544144
+#define PAYLOAD_SEGMENT_BSS    0x20535342
+#define PAYLOAD_SEGMENT_PARAMS 0x41524150
+#define PAYLOAD_SEGMENT_ENTRY  0x52544E45
 
 struct cbfs_payload_segment {
        unsigned int type;
@@ -126,14 +61,35 @@ struct cbfs_payload_segment {
 
 struct cbfs_payload {
        struct cbfs_payload_segment segments;
-};
+} __attribute__ ((packed));
+
+/** 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_COMPONENT_STAGE      0x10
+#define CBFS_COMPONENT_PAYLOAD    0x20
+#define CBFS_COMPONENT_OPTIONROM  0x30
+#define CBFS_COMPONENT_BOOTSPLASH 0x40
+#define CBFS_COMPONENT_RAW        0x50
+#define CBFS_COMPONENT_VSA        0x51
+#define CBFS_COMPONENT_MBI        0x52
+#define CBFS_COMPONENT_MICROCODE  0x53
+#define CBFS_COMPONENT_CMOS_DEFAULT 0xaa
+#define CBFS_COMPONENT_CMOS_LAYOUT 0x01aa
 
-#define PAYLOAD_SEGMENT_CODE   0x45444F43
-#define PAYLOAD_SEGMENT_DATA   0x41544144
-#define PAYLOAD_SEGMENT_BSS    0x20535342
-#define PAYLOAD_SEGMENT_PARAMS 0x41524150
-#define PAYLOAD_SEGMENT_ENTRY  0x52544E45
+/* The deleted type is chosen to be a value
+ * that can be written in a FLASH from all other
+ * values.
+ */
+#define CBFS_COMPONENT_DELETED 0
 
-#define CBFS_NAME(_c) (((unsigned char *) (_c)) + sizeof(struct cbfs_file))
+/* for all known FLASH, this value can be changed
+ * to all other values. This allows NULL files to be
+ * changed without a block erase
+ */
+#define CBFS_COMPONENT_NULL 0xFFFFFFFF
 
-#endif
+int cbfs_file_header(uint32_t physaddr);
+struct cbfs_file *cbfs_create_empty_file(uint32_t physaddr, uint32_t size);