2007-06-22 08:57:39 +02:00
|
|
|
/** @file
|
|
|
|
Internal include file of DXE Memory Allocation Library.
|
|
|
|
|
|
|
|
Copyright (c) 2006, Intel Corporation
|
|
|
|
All rights reserved. This program and the accompanying materials
|
|
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
#ifndef __DXE_MEMORY_ALLOCATION_LIB_INTERNALS_H__
|
|
|
|
#define __DXE_MEMORY_ALLOCATION_LIB_INTERNALS_H__
|
|
|
|
|
2007-06-30 01:22:13 +02:00
|
|
|
#include <PiDxe.h>
|
|
|
|
#include <Library/MemoryAllocationLib.h>
|
|
|
|
#include <Library/UefiBootServicesTableLib.h>
|
|
|
|
#include <Library/BaseMemoryLib.h>
|
|
|
|
#include <Library/DebugLib.h>
|
|
|
|
|
|
|
|
|
2007-06-22 08:57:39 +02:00
|
|
|
/**
|
|
|
|
Allocates one or more 4KB pages of a certain memory type.
|
|
|
|
|
|
|
|
Allocates the number of 4KB pages of a certain memory type and returns a pointer to the allocated
|
|
|
|
buffer. The buffer returned is aligned on a 4KB boundary. If Pages is 0, then NULL is returned.
|
|
|
|
If there is not enough memory remaining to satisfy the request, then NULL is returned.
|
|
|
|
|
|
|
|
@param MemoryType The type of memory to allocate.
|
|
|
|
@param Pages The number of 4 KB pages to allocate.
|
|
|
|
|
|
|
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
|
|
|
|
|
|
|
**/
|
|
|
|
VOID *
|
|
|
|
InternalAllocatePages (
|
|
|
|
IN EFI_MEMORY_TYPE MemoryType,
|
|
|
|
IN UINTN Pages
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Allocates one or more 4KB pages of a certain memory type at a specified alignment.
|
|
|
|
|
|
|
|
Allocates the number of 4KB pages specified by Pages of a certain memory type with an alignment
|
|
|
|
specified by Alignment. The allocated buffer is returned. If Pages is 0, then NULL is returned.
|
|
|
|
If there is not enough memory at the specified alignment remaining to satisfy the request, then
|
|
|
|
NULL is returned.
|
|
|
|
If Alignment is not a power of two and Alignment is not zero, then ASSERT().
|
|
|
|
|
|
|
|
@param MemoryType The type of memory to allocate.
|
|
|
|
@param Pages The number of 4 KB pages to allocate.
|
|
|
|
@param Alignment The requested alignment of the allocation. Must be a power of two.
|
|
|
|
If Alignment is zero, then byte alignment is used.
|
|
|
|
|
|
|
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
|
|
|
|
|
|
|
**/
|
|
|
|
VOID *
|
|
|
|
InternalAllocateAlignedPages (
|
|
|
|
IN EFI_MEMORY_TYPE MemoryType,
|
|
|
|
IN UINTN Pages,
|
|
|
|
IN UINTN Alignment
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Allocates a buffer of a certain pool type.
|
|
|
|
|
|
|
|
Allocates the number bytes specified by AllocationSize of a certain pool type and returns a
|
|
|
|
pointer to the allocated buffer. If AllocationSize is 0, then a valid buffer of 0 size is
|
|
|
|
returned. If there is not enough memory remaining to satisfy the request, then NULL is returned.
|
|
|
|
|
|
|
|
@param MemoryType The type of memory to allocate.
|
|
|
|
@param AllocationSize The number of bytes to allocate.
|
|
|
|
|
|
|
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
|
|
|
|
|
|
|
**/
|
|
|
|
VOID *
|
|
|
|
InternalAllocatePool (
|
|
|
|
IN EFI_MEMORY_TYPE MemoryType,
|
|
|
|
IN UINTN AllocationSize
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Allocates and zeros a buffer of a certian pool type.
|
|
|
|
|
|
|
|
Allocates the number bytes specified by AllocationSize of a certian pool type, clears the buffer
|
|
|
|
with zeros, and returns a pointer to the allocated buffer. If AllocationSize is 0, then a valid
|
|
|
|
buffer of 0 size is returned. If there is not enough memory remaining to satisfy the request,
|
|
|
|
then NULL is returned.
|
|
|
|
|
|
|
|
@param PoolType The type of memory to allocate.
|
|
|
|
@param AllocationSize The number of bytes to allocate and zero.
|
|
|
|
|
|
|
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
|
|
|
|
|
|
|
**/
|
|
|
|
VOID *
|
|
|
|
InternalAllocateZeroPool (
|
|
|
|
IN EFI_MEMORY_TYPE PoolType,
|
|
|
|
IN UINTN AllocationSize
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Copies a buffer to an allocated buffer of a certian pool type.
|
|
|
|
|
|
|
|
Allocates the number bytes specified by AllocationSize of a certian pool type, copies
|
|
|
|
AllocationSize bytes from Buffer to the newly allocated buffer, and returns a pointer to the
|
|
|
|
allocated buffer. If AllocationSize is 0, then a valid buffer of 0 size is returned. If there
|
|
|
|
is not enough memory remaining to satisfy the request, then NULL is returned.
|
|
|
|
If Buffer is NULL, then ASSERT().
|
|
|
|
If AllocationSize is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
|
|
|
|
|
|
|
@param PoolType The type of pool to allocate.
|
|
|
|
@param AllocationSize The number of bytes to allocate and zero.
|
|
|
|
@param Buffer The buffer to copy to the allocated buffer.
|
|
|
|
|
|
|
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
|
|
|
|
|
|
|
**/
|
|
|
|
VOID *
|
|
|
|
InternalAllocateCopyPool (
|
|
|
|
IN EFI_MEMORY_TYPE PoolType,
|
|
|
|
IN UINTN AllocationSize,
|
|
|
|
IN CONST VOID *Buffer
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Allocates a buffer of a certain pool type at a specified alignment.
|
|
|
|
|
|
|
|
Allocates the number bytes specified by AllocationSize of a certain pool type with an alignment
|
|
|
|
specified by Alignment. The allocated buffer is returned. If AllocationSize is 0, then a valid
|
|
|
|
buffer of 0 size is returned. If there is not enough memory at the specified alignment remaining
|
|
|
|
to satisfy the request, then NULL is returned.
|
|
|
|
If Alignment is not a power of two and Alignment is not zero, then ASSERT().
|
|
|
|
|
|
|
|
@param PoolType The type of pool to allocate.
|
|
|
|
@param AllocationSize The number of bytes to allocate.
|
|
|
|
@param Alignment The requested alignment of the allocation. Must be a power of two. If Alignment is zero, then byte alignment is used.
|
|
|
|
If Alignment is zero, then byte alignment is used.
|
|
|
|
|
|
|
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
|
|
|
|
|
|
|
**/
|
|
|
|
VOID *
|
|
|
|
InternalAllocateAlignedPool (
|
|
|
|
IN EFI_MEMORY_TYPE PoolType,
|
|
|
|
IN UINTN AllocationSize,
|
|
|
|
IN UINTN Alignment
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Allocates and zeros a buffer of a certain pool type at a specified alignment.
|
|
|
|
|
|
|
|
Allocates the number bytes specified by AllocationSize of a certain pool type with an alignment
|
|
|
|
specified by Alignment, clears the buffer with zeros, and returns a pointer to the allocated
|
|
|
|
buffer. If AllocationSize is 0, then a valid buffer of 0 size is returned. If there is not
|
|
|
|
enough memory at the specified alignment remaining to satisfy the request, then NULL is returned.
|
|
|
|
If Alignment is not a power of two and Alignment is not zero, then ASSERT().
|
|
|
|
|
|
|
|
@param PoolType The type of pool to allocate.
|
|
|
|
@param AllocationSize The number of bytes to allocate.
|
|
|
|
@param Alignment The requested alignment of the allocation. Must be a power of two.
|
|
|
|
If Alignment is zero, then byte alignment is used.
|
|
|
|
|
|
|
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
|
|
|
|
|
|
|
**/
|
|
|
|
VOID *
|
|
|
|
InternalAllocateAlignedZeroPool (
|
|
|
|
IN EFI_MEMORY_TYPE PoolType,
|
|
|
|
IN UINTN AllocationSize,
|
|
|
|
IN UINTN Alignment
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Copies a buffer to an allocated buffer of a certain pool type at a specified alignment.
|
|
|
|
|
|
|
|
Allocates the number bytes specified by AllocationSize of a certain pool type with an alignment
|
|
|
|
specified by Alignment. The allocated buffer is returned. If AllocationSize is 0, then a valid
|
|
|
|
buffer of 0 size is returned. If there is not enough memory at the specified alignment remaining
|
|
|
|
to satisfy the request, then NULL is returned.
|
|
|
|
If Alignment is not a power of two and Alignment is not zero, then ASSERT().
|
|
|
|
|
|
|
|
@param PoolType The type of pool to allocate.
|
|
|
|
@param AllocationSize The number of bytes to allocate.
|
|
|
|
@param Buffer The buffer to copy to the allocated buffer.
|
|
|
|
@param Alignment The requested alignment of the allocation. Must be a power of two.
|
|
|
|
If Alignment is zero, then byte alignment is used.
|
|
|
|
|
|
|
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
|
|
|
|
|
|
|
**/
|
|
|
|
VOID *
|
|
|
|
InternalAllocateAlignedCopyPool (
|
|
|
|
IN EFI_MEMORY_TYPE PoolType,
|
|
|
|
IN UINTN AllocationSize,
|
|
|
|
IN CONST VOID *Buffer,
|
|
|
|
IN UINTN Alignment
|
|
|
|
);
|
|
|
|
|
|
|
|
#endif
|