xref: /kvm-unit-tests/lib/memregions.h (revision a8a78d758b16d4e1869aae600ee074dfd1a64135)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 #ifndef _MEMREGIONS_H_
3 #define _MEMREGIONS_H_
4 #include <libcflat.h>
5 #include <bitops.h>
6 
7 #define NR_INITIAL_MEM_REGIONS		8
8 
9 #define MR_F_IO				BIT(0)
10 #define MR_F_CODE			BIT(1)
11 #define MR_F_RESERVED			BIT(2)
12 #define MR_F_PERSISTENT			BIT(3)
13 #define MR_F_UNKNOWN			BIT(31)
14 
15 struct mem_region {
16 	phys_addr_t start;
17 	phys_addr_t end;
18 	uint32_t flags;
19 };
20 
21 extern struct mem_region *mem_regions;
22 
23 void memregions_init(struct mem_region regions[], size_t nr);
24 struct mem_region *memregions_add(struct mem_region *r);
25 struct mem_region *memregions_find(phys_addr_t paddr);
26 uint32_t memregions_get_flags(phys_addr_t paddr);
27 void memregions_split(phys_addr_t addr, struct mem_region **r1, struct mem_region **r2);
28 void memregions_add_dt_regions(size_t max_nr);
29 
30 #ifdef CONFIG_EFI
31 #include <efi.h>
32 void memregions_efi_init(struct efi_boot_memmap *mem_map, struct mem_region **freemem);
33 #endif
34 
35 #endif /* _MEMREGIONS_H_ */
36