xref: /qemu/hw/i386/e820_memory_layout.h (revision c4b8ffcb)
1 /*
2  * QEMU BIOS e820 routines
3  *
4  * Copyright (c) 2003-2004 Fabrice Bellard
5  *
6  * SPDX-License-Identifier: MIT
7  */
8 
9 #ifndef HW_I386_E820_MEMORY_LAYOUT_H
10 #define HW_I386_E820_MEMORY_LAYOUT_H
11 
12 /* e820 types */
13 #define E820_RAM        1
14 #define E820_RESERVED   2
15 #define E820_ACPI       3
16 #define E820_NVS        4
17 #define E820_UNUSABLE   5
18 
19 #define E820_NR_ENTRIES 16
20 
21 struct e820_entry {
22     uint64_t address;
23     uint64_t length;
24     uint32_t type;
25 } QEMU_PACKED __attribute((__aligned__(4)));
26 
27 struct e820_table {
28     uint32_t count;
29     struct e820_entry entry[E820_NR_ENTRIES];
30 } QEMU_PACKED __attribute((__aligned__(4)));
31 
32 extern struct e820_table e820_reserve;
33 extern struct e820_entry *e820_table;
34 
35 int e820_add_entry(uint64_t address, uint64_t length, uint32_t type);
36 int e820_get_num_entries(void);
37 bool e820_get_entry(int index, uint32_t type,
38                     uint64_t *address, uint64_t *length);
39 
40 
41 
42 #endif
43