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_UNUSED BIT(4) 14 #define MR_F_UNKNOWN BIT(31) 15 16 struct mem_region { 17 phys_addr_t start; 18 phys_addr_t end; 19 uint32_t flags; 20 }; 21 22 extern struct mem_region *mem_regions; 23 24 void memregions_init(struct mem_region regions[], size_t nr); 25 struct mem_region *memregions_add(struct mem_region *r); 26 struct mem_region *memregions_find(phys_addr_t paddr); 27 uint32_t memregions_get_flags(phys_addr_t paddr); 28 void memregions_split(phys_addr_t addr, struct mem_region **r1, struct mem_region **r2); 29 void memregions_add_dt_regions(size_t max_nr); 30 31 #ifdef CONFIG_EFI 32 #include <efi.h> 33 void memregions_efi_init(struct efi_boot_memmap *mem_map, struct mem_region **freemem); 34 #endif 35 36 #endif /* _MEMREGIONS_H_ */ 37