Lines Matching +full:non +full:- +full:overlapping

1 // SPDX-License-Identifier: GPL-2.0+
25 #define EFI_CARVE_NO_OVERLAP -1
26 #define EFI_CARVE_LOOP_AGAIN -2
27 #define EFI_CARVE_OVERLAPS_NONRAM -3
37 * U-Boot services each EFI AllocatePool request as a separate
61 if (mema->desc.physical_start == memb->desc.physical_start) in efi_mem_cmp()
63 else if (mema->desc.physical_start < memb->desc.physical_start) in efi_mem_cmp()
66 return -1; in efi_mem_cmp()
71 return desc->physical_start + (desc->num_pages << EFI_PAGE_SHIFT); in desc_get_end()
87 struct efi_mem_desc *prev = &prevmem->desc; in efi_mem_sort()
97 cur = &lmem->desc; in efi_mem_sort()
99 if ((desc_get_end(cur) == prev->physical_start) && in efi_mem_sort()
100 (prev->type == cur->type) && in efi_mem_sort()
101 (prev->attribute == cur->attribute)) { in efi_mem_sort()
103 pages = cur->num_pages; in efi_mem_sort()
104 prev->num_pages += pages; in efi_mem_sort()
105 prev->physical_start -= pages << EFI_PAGE_SHIFT; in efi_mem_sort()
106 prev->virtual_start -= pages << EFI_PAGE_SHIFT; in efi_mem_sort()
107 list_del(&lmem->link); in efi_mem_sort()
119 /** efi_mem_carve_out - unmap memory region
124 * Return Value: the number of overlapping pages which have been
137 * to re-add the already carved out pages to the mapping.
144 struct efi_mem_desc *map_desc = &map->desc; in efi_mem_carve_out()
145 uint64_t map_start = map_desc->physical_start; in efi_mem_carve_out()
146 uint64_t map_end = map_start + (map_desc->num_pages << EFI_PAGE_SHIFT); in efi_mem_carve_out()
147 uint64_t carve_start = carve_desc->physical_start; in efi_mem_carve_out()
149 (carve_desc->num_pages << EFI_PAGE_SHIFT); in efi_mem_carve_out()
151 /* check whether we're overlapping */ in efi_mem_carve_out()
155 /* We're overlapping with non-RAM, warn the caller if desired */ in efi_mem_carve_out()
156 if (overlap_only_ram && (map_desc->type != EFI_CONVENTIONAL_MEMORY)) in efi_mem_carve_out()
167 list_del(&map->link); in efi_mem_carve_out()
170 map->desc.physical_start = carve_end; in efi_mem_carve_out()
171 map->desc.num_pages = (map_end - carve_end) in efi_mem_carve_out()
175 return (carve_end - carve_start) >> EFI_PAGE_SHIFT; in efi_mem_carve_out()
179 * Overlapping maps, just split the list map at carve_start, in efi_mem_carve_out()
187 newmap->desc = map->desc; in efi_mem_carve_out()
188 newmap->desc.physical_start = carve_start; in efi_mem_carve_out()
189 newmap->desc.num_pages = (map_end - carve_start) >> EFI_PAGE_SHIFT; in efi_mem_carve_out()
191 list_add_tail(&newmap->link, &map->link); in efi_mem_carve_out()
194 map_desc->num_pages = (carve_start - map_start) >> EFI_PAGE_SHIFT; in efi_mem_carve_out()
218 newlist->desc.type = memory_type; in efi_add_memory_map()
219 newlist->desc.physical_start = start; in efi_add_memory_map()
220 newlist->desc.virtual_start = start; in efi_add_memory_map()
221 newlist->desc.num_pages = pages; in efi_add_memory_map()
226 newlist->desc.attribute = EFI_MEMORY_WB | EFI_MEMORY_RUNTIME; in efi_add_memory_map()
229 newlist->desc.attribute = EFI_MEMORY_RUNTIME; in efi_add_memory_map()
232 newlist->desc.attribute = EFI_MEMORY_WB; in efi_add_memory_map()
244 r = efi_mem_carve_out(lmem, &newlist->desc, in efi_add_memory_map()
250 * but we hit a non-RAM region. Error out. in efi_add_memory_map()
286 list_add_tail(&newlist->link, &efi_mem); in efi_add_memory_map()
307 struct efi_mem_desc *desc = &lmem->desc; in efi_find_free_memory()
308 uint64_t desc_len = desc->num_pages << EFI_PAGE_SHIFT; in efi_find_free_memory()
309 uint64_t desc_end = desc->physical_start + desc_len; in efi_find_free_memory()
311 uint64_t ret = curmax - len; in efi_find_free_memory()
314 if (desc->type != EFI_CONVENTIONAL_MEMORY) in efi_find_free_memory()
326 if (ret < desc->physical_start) in efi_find_free_memory()
358 addr = efi_find_free_memory(len, -1ULL); in efi_allocate_pages()
460 alloc->num_pages = num_pages; in efi_allocate_pool()
461 *buffer = alloc->data; in efi_allocate_pool()
485 r = efi_free_pages((uintptr_t)alloc, alloc->num_pages); in efi_free_pool()
538 memory_map = &memory_map[map_entries - 1]; in efi_get_memory_map()
543 *memory_map = lmem->desc; in efi_get_memory_map()
544 memory_map--; in efi_get_memory_map()
562 ram_top = (uintptr_t)map_sysmem(ram_top - 1, 0) + 1; in efi_add_known_memory()
572 ram_start = (uintptr_t)map_sysmem(gd->bd->bi_dram[i].start, 0); in efi_add_known_memory()
573 ram_end = ram_start + gd->bd->bi_dram[i].size; in efi_add_known_memory()
584 pages = (ram_end - ram_start) >> EFI_PAGE_SHIFT; in efi_add_known_memory()
590 * Boards may indicate to the U-Boot memory core that they in efi_add_known_memory()
601 pages = (ram_end - ram_top) >> EFI_PAGE_SHIFT; in efi_add_known_memory()
609 /* Add memory regions for U-Boot's memory and for the runtime services code */
617 /* Add U-Boot */ in add_u_boot_and_runtime()
618 uboot_start = (gd->start_addr_sp - uboot_stack_size) & ~EFI_PAGE_MASK; in add_u_boot_and_runtime()
619 uboot_pages = (gd->ram_top - uboot_start) >> EFI_PAGE_SHIFT; in add_u_boot_and_runtime()
628 runtime_mask = SZ_64K - 1; in add_u_boot_and_runtime()
638 runtime_pages = (runtime_end - runtime_start) >> EFI_PAGE_SHIFT; in add_u_boot_and_runtime()
657 return -1; in efi_memory_init()