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