New cbfstool. Works without mmap or fork/exec and
supports fixed location files. Some parts are salvaged
from the pre-commit version (esp. stage and payload creation),
others are completely rewritten (eg. the main loop that handles
file addition)

Also adapt newconfig (we don't need cbfs/tools anymore) and fix
some minor issues in the cbfstool-README.

Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de>
Acked-by: Stefan Reinauer <stepan@coresystems.de>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4630 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
diff --git a/util/cbfstool/cbfs.h b/util/cbfstool/cbfs.h
index 04a12fc..9d57165 100644
--- a/util/cbfstool/cbfs.h
+++ b/util/cbfstool/cbfs.h
@@ -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
@@ -17,17 +16,52 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
  */
 
-#ifndef _CBFS_H_
-#define _CBFS_H_
+#include <stdint.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. */
+struct cbfs_header {
+	uint32_t magic;
+	uint32_t version;
+	uint32_t romsize;
+	uint32_t bootblocksize;
+	uint32_t align;
+	uint32_t offset;
+	uint32_t pad[2];
+} __attribute__ ((packed));
 
-#define CBFS_COMPRESS_NONE  0
-#define CBFS_COMPRESS_LZMA  1
-#define CBFS_COMPRESS_NRV2B 2
+struct cbfs_file {
+	char magic[8];
+	uint32_t len;
+	uint32_t type;
+	uint32_t checksum;
+	uint32_t offset;
+} __attribute__ ((packed));
+
+struct cbfs_stage {
+	unsigned int compression;
+	unsigned long long entry;
+	unsigned long long load;
+	unsigned int len;
+	unsigned int memlen;
+} __attribute__ ((packed));
+
+#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;
+	unsigned int compression;
+	unsigned int offset;
+	unsigned long long load_addr;
+	unsigned int len;
+	unsigned int mem_len;
+} __attribute__ ((packed));
+
+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.
@@ -50,90 +84,5 @@
  */
 #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
-
-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];
-} __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;
-} __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 */
-} __attribute__ ((packed));
-
-/** this is the sub-header for payload components.  Payloads
-    are loaded by coreboot at the end of the boot process */
-
-struct cbfs_payload_segment {
-	unsigned int type;
-	unsigned int compression;
-	unsigned int offset;
-	unsigned long long load_addr;
-	unsigned int len;
-	unsigned int mem_len;
-} __attribute__ ((packed));
-
-struct cbfs_payload {
-	struct cbfs_payload_segment segments;
-};
-
-#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
-
-#define CBFS_NAME(_c) (((unsigned char *) (_c)) + sizeof(struct cbfs_file))
-
-#endif
+int cbfs_file_header(uint32_t physaddr);
+struct cbfs_file *cbfs_create_empty_file(uint32_t physaddr, uint32_t size);