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