Merge tag 'dm-pull-9jul19-take2' of https://gitlab.denx.de/u-boot/custodians/u-boot-dm
[oweals/u-boot.git] / arch / x86 / include / asm / coreboot_tables.h
1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /*
3  * This file is part of the libpayload project.
4  *
5  * Copyright (C) 2008 Advanced Micro Devices, Inc.
6  */
7
8 #ifndef _COREBOOT_TABLES_H
9 #define _COREBOOT_TABLES_H
10
11 struct memory_area;
12
13 struct cbuint64 {
14         u32 lo;
15         u32 hi;
16 };
17
18 struct cb_header {
19         u8 signature[4];
20         u32 header_bytes;
21         u32 header_checksum;
22         u32 table_bytes;
23         u32 table_checksum;
24         u32 table_entries;
25 };
26
27 struct cb_record {
28         u32 tag;
29         u32 size;
30 };
31
32 #define CB_TAG_UNUSED                   0x0000
33 #define CB_TAG_MEMORY                   0x0001
34
35 struct cb_memory_range {
36         struct cbuint64 start;
37         struct cbuint64 size;
38         u32 type;
39 };
40
41 #define CB_MEM_RAM                      1
42 #define CB_MEM_RESERVED                 2
43 #define CB_MEM_ACPI                     3
44 #define CB_MEM_NVS                      4
45 #define CB_MEM_UNUSABLE                 5
46 #define CB_MEM_VENDOR_RSVD              6
47 #define CB_MEM_TABLE                    16
48
49 struct cb_memory {
50         u32 tag;
51         u32 size;
52         struct cb_memory_range map[0];
53 };
54
55 #define CB_TAG_HWRPB                    0x0002
56
57 struct cb_hwrpb {
58         u32 tag;
59         u32 size;
60         u64 hwrpb;
61 };
62
63 #define CB_TAG_MAINBOARD                0x0003
64
65 struct cb_mainboard {
66         u32 tag;
67         u32 size;
68         u8 vendor_idx;
69         u8 part_number_idx;
70         u8 strings[0];
71 };
72
73 #define CB_TAG_VERSION                  0x0004
74 #define CB_TAG_EXTRA_VERSION            0x0005
75 #define CB_TAG_BUILD                    0x0006
76 #define CB_TAG_COMPILE_TIME             0x0007
77 #define CB_TAG_COMPILE_BY               0x0008
78 #define CB_TAG_COMPILE_HOST             0x0009
79 #define CB_TAG_COMPILE_DOMAIN           0x000a
80 #define CB_TAG_COMPILER                 0x000b
81 #define CB_TAG_LINKER                   0x000c
82 #define CB_TAG_ASSEMBLER                0x000d
83
84 struct cb_string {
85         u32 tag;
86         u32 size;
87         u8 string[0];
88 };
89
90 #define CB_TAG_SERIAL                   0x000f
91
92 struct cb_serial {
93         u32 tag;
94         u32 size;
95 #define CB_SERIAL_TYPE_IO_MAPPED        1
96 #define CB_SERIAL_TYPE_MEMORY_MAPPED    2
97         u32 type;
98         u32 baseaddr;
99         u32 baud;
100 };
101
102 #define CB_TAG_CONSOLE                  0x0010
103
104 struct cb_console {
105         u32 tag;
106         u32 size;
107         u16 type;
108 };
109
110 #define CB_TAG_CONSOLE_SERIAL8250       0
111 #define CB_TAG_CONSOLE_VGA              1 /* OBSOLETE */
112 #define CB_TAG_CONSOLE_BTEXT            2 /* OBSOLETE */
113 #define CB_TAG_CONSOLE_LOGBUF           3
114 #define CB_TAG_CONSOLE_SROM             4 /* OBSOLETE */
115 #define CB_TAG_CONSOLE_EHCI             5
116
117 #define CB_TAG_FORWARD                  0x0011
118
119 struct cb_forward {
120         u32 tag;
121         u32 size;
122         u64 forward;
123 };
124
125 #define CB_TAG_FRAMEBUFFER              0x0012
126
127 struct cb_framebuffer {
128         u32 tag;
129         u32 size;
130         u64 physical_address;
131         u32 x_resolution;
132         u32 y_resolution;
133         u32 bytes_per_line;
134         u8 bits_per_pixel;
135         u8 red_mask_pos;
136         u8 red_mask_size;
137         u8 green_mask_pos;
138         u8 green_mask_size;
139         u8 blue_mask_pos;
140         u8 blue_mask_size;
141         u8 reserved_mask_pos;
142         u8 reserved_mask_size;
143 };
144
145 #define CB_TAG_GPIO                     0x0013
146 #define GPIO_MAX_NAME_LENGTH            16
147
148 struct cb_gpio {
149         u32 port;
150         u32 polarity;
151         u32 value;
152         u8 name[GPIO_MAX_NAME_LENGTH];
153 };
154
155 struct cb_gpios {
156         u32 tag;
157         u32 size;
158         u32 count;
159         struct cb_gpio gpios[0];
160 };
161
162 #define CB_TAG_FDT                      0x0014
163
164 struct cb_fdt {
165         uint32_t tag;
166         uint32_t size;  /* size of the entire entry */
167         /* the actual FDT gets placed here */
168 };
169
170 #define CB_TAG_VDAT                     0x0015
171
172 struct cb_vdat {
173         uint32_t tag;
174         uint32_t size;  /* size of the entire entry */
175         void *vdat_addr;
176         uint32_t vdat_size;
177 };
178
179 #define CB_TAG_TIMESTAMPS               0x0016
180 #define CB_TAG_CBMEM_CONSOLE            0x0017
181 #define CB_TAG_MRC_CACHE                0x0018
182
183 struct cb_cbmem_tab {
184         uint32_t tag;
185         uint32_t size;
186         void *cbmem_tab;
187 };
188
189 #define CB_TAG_VBNV                     0x0019
190
191 struct cb_vbnv {
192         uint32_t tag;
193         uint32_t size;
194         uint32_t vbnv_start;
195         uint32_t vbnv_size;
196 };
197
198 #define CB_TAG_CMOS_OPTION_TABLE        0x00c8
199
200 struct cb_cmos_option_table {
201         u32 tag;
202         u32 size;
203         u32 header_length;
204 };
205
206 #define CB_TAG_OPTION                   0x00c9
207
208 #define CMOS_MAX_NAME_LENGTH            32
209
210 struct cb_cmos_entries {
211         u32 tag;
212         u32 size;
213         u32 bit;
214         u32 length;
215         u32 config;
216         u32 config_id;
217         u8 name[CMOS_MAX_NAME_LENGTH];
218 };
219
220 #define CB_TAG_OPTION_ENUM              0x00ca
221 #define CMOS_MAX_TEXT_LENGTH            32
222
223 struct cb_cmos_enums {
224         u32 tag;
225         u32 size;
226         u32 config_id;
227         u32 value;
228         u8 text[CMOS_MAX_TEXT_LENGTH];
229 };
230
231 #define CB_TAG_OPTION_DEFAULTS          0x00cb
232 #define CMOS_IMAGE_BUFFER_SIZE          128
233
234 struct cb_cmos_defaults {
235         u32 tag;
236         u32 size;
237         u32 name_length;
238         u8 name[CMOS_MAX_NAME_LENGTH];
239         u8 default_set[CMOS_IMAGE_BUFFER_SIZE];
240 };
241
242 #define CB_TAG_OPTION_CHECKSUM          0x00cc
243 #define CHECKSUM_NONE                   0
244 #define CHECKSUM_PCBIOS                 1
245
246 struct  cb_cmos_checksum {
247         u32 tag;
248         u32 size;
249         u32 range_start;
250         u32 range_end;
251         u32 location;
252         u32 type;
253 };
254
255 /* Helpful macros */
256
257 #define MEM_RANGE_COUNT(_rec) \
258         (((_rec)->size - sizeof(*(_rec))) / sizeof((_rec)->map[0]))
259
260 #define MEM_RANGE_PTR(_rec, _idx) \
261         (((u8 *) (_rec)) + sizeof(*(_rec)) \
262         + (sizeof((_rec)->map[0]) * (_idx)))
263
264 #define MB_VENDOR_STRING(_mb) \
265         (((unsigned char *) ((_mb)->strings)) + (_mb)->vendor_idx)
266
267 #define MB_PART_STRING(_mb) \
268         (((unsigned char *) ((_mb)->strings)) + (_mb)->part_number_idx)
269
270 #define UNPACK_CB64(_in) \
271         ((((u64) _in.hi) << 32) | _in.lo)
272
273 #define CBMEM_TOC_RESERVED              512
274 #define MAX_CBMEM_ENTRIES               16
275 #define CBMEM_MAGIC                     0x434f5245
276
277 struct cbmem_entry {
278         u32 magic;
279         u32 id;
280         u64 base;
281         u64 size;
282 } __packed;
283
284 #define CBMEM_ID_FREESPACE              0x46524545
285 #define CBMEM_ID_GDT                    0x4c474454
286 #define CBMEM_ID_ACPI                   0x41435049
287 #define CBMEM_ID_CBTABLE                0x43425442
288 #define CBMEM_ID_PIRQ                   0x49525154
289 #define CBMEM_ID_MPTABLE                0x534d5054
290 #define CBMEM_ID_RESUME                 0x5245534d
291 #define CBMEM_ID_RESUME_SCRATCH         0x52455343
292 #define CBMEM_ID_SMBIOS                 0x534d4254
293 #define CBMEM_ID_TIMESTAMP              0x54494d45
294 #define CBMEM_ID_MRCDATA                0x4d524344
295 #define CBMEM_ID_CONSOLE                0x434f4e53
296 #define CBMEM_ID_NONE                   0x00000000
297
298 /**
299  * high_table_reserve() - reserve configuration table in high memory
300  *
301  * This reserves configuration table in high memory.
302  *
303  * @return:     always 0
304  */
305 int high_table_reserve(void);
306
307 /**
308  * high_table_malloc() - allocate configuration table in high memory
309  *
310  * This allocates configuration table in high memory.
311  *
312  * @bytes:      size of configuration table to be allocated
313  * @return:     pointer to configuration table in high memory
314  */
315 void *high_table_malloc(size_t bytes);
316
317 /**
318  * write_coreboot_table() - write coreboot table
319  *
320  * This writes coreboot table at a given address.
321  *
322  * @addr:       start address to write coreboot table
323  * @cfg_tables: pointer to configuration table memory area
324  */
325 void write_coreboot_table(u32 addr, struct memory_area *cfg_tables);
326
327 #endif