1/* 2 * Copyright 2016 Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include <boot/platform.h> 8#include <boot/stage2.h> 9 10#include "efi_platform.h" 11 12 13#define STAGE_PAGES 0x2000 /* 32 MB */ 14 15 16static efi_physical_addr staging; 17 18 19extern "C" void 20platform_release_heap(struct stage2_args *args, void *base) 21{ 22 if ((void*)staging != base) 23 panic("Attempt to release heap with wrong base address!"); 24 25 kBootServices->FreePages(staging, STAGE_PAGES); 26} 27 28 29extern "C" status_t 30platform_init_heap(struct stage2_args *args, void **_base, void **_top) 31{ 32 if (kBootServices->AllocatePages(AllocateAnyPages, EfiLoaderData, 33 STAGE_PAGES, &staging) != EFI_SUCCESS) 34 return B_NO_MEMORY; 35 36 *_base = (void*)staging; 37 *_top = (void*)((int8*)staging + STAGE_PAGES * B_PAGE_SIZE); 38 39 return B_OK; 40} 41