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