93 lines
2.0 KiB
C
93 lines
2.0 KiB
C
/**
|
|
* PROJECT: ExectOS
|
|
* COPYRIGHT: See COPYING.md in the top level directory
|
|
* FILE: xtldr/memory.c
|
|
* DESCRIPTION: XT Boot Loader memory management
|
|
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
|
*/
|
|
|
|
#include <xtldr.h>
|
|
|
|
|
|
/**
|
|
* This routine allocates one or more 4KB pages.
|
|
*
|
|
* @param Pages
|
|
* The number of contiguous 4KB pages to allocate.
|
|
*
|
|
* @param Memory
|
|
* The pointer to a physical address.
|
|
*
|
|
* @return This routine returns a status code.
|
|
*
|
|
* @since XT 1.0
|
|
*/
|
|
XTCDECL
|
|
EFI_STATUS
|
|
BlMemoryAllocatePages(IN UINT64 Pages,
|
|
OUT PEFI_PHYSICAL_ADDRESS Memory)
|
|
{
|
|
return EfiSystemTable->BootServices->AllocatePages(AllocateAnyPages, EfiLoaderData, Pages, Memory);
|
|
}
|
|
|
|
/**
|
|
* This routine allocates a pool memory.
|
|
*
|
|
* @param Size
|
|
* The number of bytes to allocate from the pool.
|
|
*
|
|
* @param Memory
|
|
* The pointer to a physical address.
|
|
*
|
|
* @return This routine returns a status code.
|
|
*
|
|
* @since XT 1.0
|
|
*/
|
|
XTCDECL
|
|
EFI_STATUS
|
|
BlMemoryAllocatePool(IN UINT_PTR Size,
|
|
OUT PVOID *Memory)
|
|
{
|
|
/* Allocate pool */
|
|
return EfiSystemTable->BootServices->AllocatePool(EfiLoaderData, Size, Memory);
|
|
}
|
|
|
|
/**
|
|
* This routine frees memory pages.
|
|
*
|
|
* @param Pages
|
|
* The number of contiguous 4 KB pages to free.
|
|
*
|
|
* @param Memory
|
|
* The base physical address of the pages to be freed.
|
|
*
|
|
* @return This routine returns a status code.
|
|
*
|
|
* @since XT 1.0
|
|
*/
|
|
XTCDECL
|
|
EFI_STATUS
|
|
BlMemoryFreePages(IN UINT64 Pages,
|
|
IN EFI_PHYSICAL_ADDRESS Memory)
|
|
{
|
|
return EfiSystemTable->BootServices->FreePages(Memory, Pages);
|
|
}
|
|
|
|
/**
|
|
* Returns pool memory to the system.
|
|
*
|
|
* @param Memory
|
|
* The pointer to the buffer to free.
|
|
*
|
|
* @return This routine returns a status code.
|
|
*
|
|
* @since XT 1.0
|
|
*/
|
|
XTCDECL
|
|
EFI_STATUS
|
|
BlMemoryFreePool(IN PVOID Memory)
|
|
{
|
|
/* Free pool */
|
|
return EfiSystemTable->BootServices->FreePool(Memory);
|
|
}
|