xref: /kvm-unit-tests/lib/memregions.h (revision fa8e5d6767e9e2c7700d5c68ab6b88effbf0f224)
12479ae50SAndrew Jones /* SPDX-License-Identifier: GPL-2.0-only */
22479ae50SAndrew Jones #ifndef _MEMREGIONS_H_
32479ae50SAndrew Jones #define _MEMREGIONS_H_
42479ae50SAndrew Jones #include <libcflat.h>
52479ae50SAndrew Jones #include <bitops.h>
62479ae50SAndrew Jones 
72479ae50SAndrew Jones #define NR_INITIAL_MEM_REGIONS		8
82479ae50SAndrew Jones 
92479ae50SAndrew Jones #define MR_F_IO				BIT(0)
102479ae50SAndrew Jones #define MR_F_CODE			BIT(1)
112479ae50SAndrew Jones #define MR_F_RESERVED			BIT(2)
12*fa8e5d67SAndrew Jones #define MR_F_PERSISTENT			BIT(3)
132479ae50SAndrew Jones #define MR_F_UNKNOWN			BIT(31)
142479ae50SAndrew Jones 
152479ae50SAndrew Jones struct mem_region {
162479ae50SAndrew Jones 	phys_addr_t start;
172479ae50SAndrew Jones 	phys_addr_t end;
182479ae50SAndrew Jones 	uint32_t flags;
192479ae50SAndrew Jones };
202479ae50SAndrew Jones 
212479ae50SAndrew Jones extern struct mem_region *mem_regions;
222479ae50SAndrew Jones 
232479ae50SAndrew Jones void memregions_init(struct mem_region regions[], size_t nr);
242479ae50SAndrew Jones struct mem_region *memregions_add(struct mem_region *r);
252479ae50SAndrew Jones struct mem_region *memregions_find(phys_addr_t paddr);
262479ae50SAndrew Jones uint32_t memregions_get_flags(phys_addr_t paddr);
272479ae50SAndrew Jones void memregions_split(phys_addr_t addr, struct mem_region **r1, struct mem_region **r2);
282479ae50SAndrew Jones void memregions_add_dt_regions(size_t max_nr);
292479ae50SAndrew Jones 
30*fa8e5d67SAndrew Jones #ifdef CONFIG_EFI
31*fa8e5d67SAndrew Jones #include <efi.h>
32*fa8e5d67SAndrew Jones void memregions_efi_init(struct efi_boot_memmap *mem_map, struct mem_region **freemem);
33*fa8e5d67SAndrew Jones #endif
34*fa8e5d67SAndrew Jones 
352479ae50SAndrew Jones #endif /* _MEMREGIONS_H_ */
36