xref: /kvm-unit-tests/lib/memregions.h (revision 6b801c8981f74d75419d77e031dd37f5ad356efe)
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)
12fa8e5d67SAndrew Jones #define MR_F_PERSISTENT			BIT(3)
13*3d83840dSAndrew Jones #define MR_F_UNUSED			BIT(4)
142479ae50SAndrew Jones #define MR_F_UNKNOWN			BIT(31)
152479ae50SAndrew Jones 
162479ae50SAndrew Jones struct mem_region {
172479ae50SAndrew Jones 	phys_addr_t start;
182479ae50SAndrew Jones 	phys_addr_t end;
192479ae50SAndrew Jones 	uint32_t flags;
202479ae50SAndrew Jones };
212479ae50SAndrew Jones 
222479ae50SAndrew Jones extern struct mem_region *mem_regions;
232479ae50SAndrew Jones 
242479ae50SAndrew Jones void memregions_init(struct mem_region regions[], size_t nr);
252479ae50SAndrew Jones struct mem_region *memregions_add(struct mem_region *r);
262479ae50SAndrew Jones struct mem_region *memregions_find(phys_addr_t paddr);
272479ae50SAndrew Jones uint32_t memregions_get_flags(phys_addr_t paddr);
282479ae50SAndrew Jones void memregions_split(phys_addr_t addr, struct mem_region **r1, struct mem_region **r2);
292479ae50SAndrew Jones void memregions_add_dt_regions(size_t max_nr);
302479ae50SAndrew Jones 
31fa8e5d67SAndrew Jones #ifdef CONFIG_EFI
32fa8e5d67SAndrew Jones #include <efi.h>
33fa8e5d67SAndrew Jones void memregions_efi_init(struct efi_boot_memmap *mem_map, struct mem_region **freemem);
34fa8e5d67SAndrew Jones #endif
35fa8e5d67SAndrew Jones 
362479ae50SAndrew Jones #endif /* _MEMREGIONS_H_ */
37