Various fixes to cbfstool.
[coreboot.git] / util / cbfstool / cbfs.h
1 /*
2  * Copyright (C) 2009 coresystems GmbH
3  *                 written by Patrick Georgi <patrick.georgi@coresystems.de>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; version 2 of the License.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
17  */
18
19 #include <stdint.h>
20
21 struct cbfs_header {
22         uint32_t magic;
23         uint32_t version;
24         uint32_t romsize;
25         uint32_t bootblocksize;
26         uint32_t align;
27         uint32_t offset;
28         uint32_t pad[2];
29 } __attribute__ ((packed));
30
31 struct cbfs_file {
32         uint8_t magic[8];
33         uint32_t len;
34         uint32_t type;
35         uint32_t checksum;
36         uint32_t offset;
37 } __attribute__ ((packed));
38
39 struct cbfs_stage {
40         uint32_t compression;
41         uint64_t entry;
42         uint64_t load;
43         uint32_t len;
44         uint32_t memlen;
45 } __attribute__ ((packed));
46
47 #define PAYLOAD_SEGMENT_CODE    0x45444F43
48 #define PAYLOAD_SEGMENT_DATA    0x41544144
49 #define PAYLOAD_SEGMENT_BSS     0x20535342
50 #define PAYLOAD_SEGMENT_PARAMS  0x41524150
51 #define PAYLOAD_SEGMENT_ENTRY   0x52544E45
52
53 struct cbfs_payload_segment {
54         uint32_t type;
55         uint32_t compression;
56         uint32_t offset;
57         uint64_t load_addr;
58         uint32_t len;
59         uint32_t mem_len;
60 } __attribute__ ((packed));
61
62 struct cbfs_payload {
63         struct cbfs_payload_segment segments;
64 } __attribute__ ((packed));
65
66 /** These are standard component types for well known
67     components (i.e - those that coreboot needs to consume.
68     Users are welcome to use any other value for their
69     components */
70
71 #define CBFS_COMPONENT_STAGE      0x10
72 #define CBFS_COMPONENT_PAYLOAD    0x20
73 #define CBFS_COMPONENT_OPTIONROM  0x30
74 #define CBFS_COMPONENT_BOOTSPLASH 0x40
75 #define CBFS_COMPONENT_RAW        0x50
76 #define CBFS_COMPONENT_VSA        0x51
77 #define CBFS_COMPONENT_MBI        0x52
78 #define CBFS_COMPONENT_MICROCODE  0x53
79 #define CBFS_COMPONENT_CMOS_DEFAULT 0xaa
80 #define CBFS_COMPONENT_CMOS_LAYOUT 0x01aa
81
82 /* The deleted type is chosen to be a value
83  * that can be written in a FLASH from all other
84  * values.
85  */
86 #define CBFS_COMPONENT_DELETED 0
87
88 /* for all known FLASH, this value can be changed
89  * to all other values. This allows NULL files to be
90  * changed without a block erase
91  */
92 #define CBFS_COMPONENT_NULL 0xFFFFFFFF
93
94 int cbfs_file_header(uint32_t physaddr);
95 struct cbfs_file *cbfs_create_empty_file(uint32_t physaddr, uint32_t size);