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