mirror of https://github.com/acidanthera/audk.git
Remove allocate aligned pool services.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5696 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
e6bcee8713
commit
dd1245006f
|
@ -383,241 +383,6 @@ FreePool (
|
||||||
IN VOID *Buffer
|
IN VOID *Buffer
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates a buffer of type EfiBootServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiBootServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates a buffer of type EfiRuntimeServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedRuntimePool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates a buffer of type EfieservedMemoryType at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfieservedMemoryType 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedReservedPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates and zeros a buffer of type EfiBootServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiBootServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedZeroPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates and zeros a buffer of type EfiRuntimeServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedRuntimeZeroPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates and zeros a buffer of type EfieservedMemoryType at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfieservedMemoryType 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedReservedZeroPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copies a buffer to an allocated buffer of type EfiBootServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiBootServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedCopyPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN CONST VOID *Buffer,
|
|
||||||
IN UINTN Alignment
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copies a buffer to an allocated buffer of type EfiRuntimeServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedRuntimeCopyPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN CONST VOID *Buffer,
|
|
||||||
IN UINTN Alignment
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copies a buffer to an allocated buffer of type EfiReservedMemoryType at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedReservedCopyPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN CONST VOID *Buffer,
|
|
||||||
IN UINTN Alignment
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Frees a buffer that was previously allocated with one of the aligned pool allocation functions
|
|
||||||
in the Memory Allocation Library.
|
|
||||||
|
|
||||||
Frees the buffer specified by Buffer. Buffer must have been allocated on a previous call to the
|
|
||||||
aligned pool allocation services of the Memory Allocation Library.
|
|
||||||
If Buffer was not allocated with an aligned pool allocation function in the Memory Allocation
|
|
||||||
Library, then ASSERT().
|
|
||||||
|
|
||||||
@param Buffer Pointer to the buffer to free.
|
|
||||||
|
|
||||||
**/
|
|
||||||
VOID
|
|
||||||
EFIAPI
|
|
||||||
FreeAlignedPool (
|
|
||||||
IN VOID *Buffer
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Frees buffer that were previously allocated with one of the
|
Frees buffer that were previously allocated with one of the
|
||||||
memory allocation functions in the Memory Allocation Library.
|
memory allocation functions in the Memory Allocation Library.
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
[Sources.common]
|
[Sources.common]
|
||||||
MemoryAllocationLibInternals.h
|
|
||||||
MemoryAllocationLib.c
|
MemoryAllocationLib.c
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,6 @@
|
||||||
#include <Library/BaseMemoryLib.h>
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
|
|
||||||
#include "MemoryAllocationLibInternals.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Allocates one or more 4KB pages of a certain memory type.
|
Allocates one or more 4KB pages of a certain memory type.
|
||||||
|
|
||||||
|
@ -668,415 +666,6 @@ FreePool (
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
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
|
|
||||||
)
|
|
||||||
{
|
|
||||||
VOID *RawAddress;
|
|
||||||
UINTN AlignedAddress;
|
|
||||||
UINTN AlignmentMask;
|
|
||||||
UINTN OverAllocationSize;
|
|
||||||
UINTN RealAllocationSize;
|
|
||||||
VOID **FreePointer;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Alignment must be a power of two or zero.
|
|
||||||
//
|
|
||||||
ASSERT ((Alignment & (Alignment - 1)) == 0);
|
|
||||||
|
|
||||||
if (Alignment == 0) {
|
|
||||||
AlignmentMask = Alignment;
|
|
||||||
} else {
|
|
||||||
AlignmentMask = Alignment - 1;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// Calculate the extra memory size, over-allocate memory pool and get the aligned memory address.
|
|
||||||
//
|
|
||||||
OverAllocationSize = sizeof (RawAddress) + AlignmentMask;
|
|
||||||
RealAllocationSize = AllocationSize + OverAllocationSize;
|
|
||||||
//
|
|
||||||
// Make sure that AllocationSize plus OverAllocationSize does not overflow.
|
|
||||||
//
|
|
||||||
ASSERT (RealAllocationSize > AllocationSize);
|
|
||||||
|
|
||||||
RawAddress = InternalAllocatePool (PoolType, RealAllocationSize);
|
|
||||||
if (RawAddress == NULL) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
AlignedAddress = ((UINTN) RawAddress + OverAllocationSize) & ~AlignmentMask;
|
|
||||||
//
|
|
||||||
// Save the original memory address just before the aligned address.
|
|
||||||
//
|
|
||||||
FreePointer = (VOID **)(AlignedAddress - sizeof (RawAddress));
|
|
||||||
*FreePointer = RawAddress;
|
|
||||||
|
|
||||||
return (VOID *) AlignedAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates a buffer of type EfiBootServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiBootServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedPool (EfiBootServicesData, AllocationSize, Alignment);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates a buffer of type EfiRuntimeServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedRuntimePool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedPool (EfiRuntimeServicesData, AllocationSize, Alignment);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates a buffer of type EfieservedMemoryType at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfieservedMemoryType 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedReservedPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedPool (EfiReservedMemoryType, AllocationSize, 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
|
|
||||||
)
|
|
||||||
{
|
|
||||||
VOID *Memory;
|
|
||||||
Memory = InternalAllocateAlignedPool (PoolType, AllocationSize, Alignment);
|
|
||||||
if (Memory != NULL) {
|
|
||||||
Memory = ZeroMem (Memory, AllocationSize);
|
|
||||||
}
|
|
||||||
return Memory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates and zeros a buffer of type EfiBootServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiBootServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedZeroPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedZeroPool (EfiBootServicesData, AllocationSize, Alignment);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates and zeros a buffer of type EfiRuntimeServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedRuntimeZeroPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedZeroPool (EfiRuntimeServicesData, AllocationSize, Alignment);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates and zeros a buffer of type EfieservedMemoryType at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfieservedMemoryType 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedReservedZeroPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedZeroPool (EfiReservedMemoryType, AllocationSize, 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
|
|
||||||
)
|
|
||||||
{
|
|
||||||
VOID *Memory;
|
|
||||||
|
|
||||||
ASSERT (Buffer != NULL);
|
|
||||||
ASSERT (AllocationSize <= (MAX_ADDRESS - (UINTN) Buffer + 1));
|
|
||||||
|
|
||||||
Memory = InternalAllocateAlignedPool (PoolType, AllocationSize, Alignment);
|
|
||||||
if (Memory != NULL) {
|
|
||||||
Memory = CopyMem (Memory, Buffer, AllocationSize);
|
|
||||||
}
|
|
||||||
return Memory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copies a buffer to an allocated buffer of type EfiBootServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiBootServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedCopyPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN CONST VOID *Buffer,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedCopyPool (EfiBootServicesData, AllocationSize, Buffer, Alignment);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copies a buffer to an allocated buffer of type EfiRuntimeServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedRuntimeCopyPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN CONST VOID *Buffer,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedCopyPool (EfiRuntimeServicesData, AllocationSize, Buffer, Alignment);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copies a buffer to an allocated buffer of type EfiReservedMemoryType at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedReservedCopyPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN CONST VOID *Buffer,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedCopyPool (EfiReservedMemoryType, AllocationSize, Buffer, Alignment);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Frees a buffer that was previously allocated with one of the aligned pool allocation functions
|
|
||||||
in the Memory Allocation Library.
|
|
||||||
|
|
||||||
Frees the buffer specified by Buffer. Buffer must have been allocated on a previous call to the
|
|
||||||
aligned pool allocation services of the Memory Allocation Library.
|
|
||||||
If Buffer was not allocated with an aligned pool allocation function in the Memory Allocation
|
|
||||||
Library, then ASSERT().
|
|
||||||
|
|
||||||
@param Buffer Pointer to the buffer to free.
|
|
||||||
|
|
||||||
**/
|
|
||||||
VOID
|
|
||||||
EFIAPI
|
|
||||||
FreeAlignedPool (
|
|
||||||
IN VOID *Buffer
|
|
||||||
)
|
|
||||||
{
|
|
||||||
VOID *RawAddress;
|
|
||||||
VOID **FreePointer;
|
|
||||||
EFI_STATUS Status;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Get the pre-saved original address in the over-allocate pool.
|
|
||||||
//
|
|
||||||
FreePointer = (VOID **)((UINTN) Buffer - sizeof (RawAddress));
|
|
||||||
RawAddress = *FreePointer;
|
|
||||||
|
|
||||||
Status = gBS->FreePool (RawAddress);
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Frees buffer that were previously allocated with one of the
|
Frees buffer that were previously allocated with one of the
|
||||||
|
|
|
@ -1,205 +0,0 @@
|
||||||
/** @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__
|
|
||||||
|
|
||||||
#include <PiDxe.h>
|
|
||||||
#include <Library/MemoryAllocationLib.h>
|
|
||||||
#include <Library/UefiBootServicesTableLib.h>
|
|
||||||
#include <Library/BaseMemoryLib.h>
|
|
||||||
#include <Library/DebugLib.h>
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
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
|
|
|
@ -22,7 +22,6 @@
|
||||||
#include <Library/BaseMemoryLib.h>
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
|
|
||||||
#include "MemoryAllocationLibInternals.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Allocates one or more 4KB pages of a certain memory type.
|
Allocates one or more 4KB pages of a certain memory type.
|
||||||
|
@ -650,432 +649,6 @@ FreePool (
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
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
|
|
||||||
)
|
|
||||||
{
|
|
||||||
VOID *RawAddress;
|
|
||||||
UINTN AlignedAddress;
|
|
||||||
UINTN AlignmentMask;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Alignment must be a power of two or zero.
|
|
||||||
//
|
|
||||||
ASSERT ((Alignment & (Alignment - 1)) == 0);
|
|
||||||
|
|
||||||
if (Alignment == 0) {
|
|
||||||
AlignmentMask = Alignment;
|
|
||||||
} else {
|
|
||||||
AlignmentMask = Alignment - 1;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// Make sure that AllocationSize plus AlignmentMask does not overflow.
|
|
||||||
//
|
|
||||||
ASSERT (AllocationSize <= (MAX_ADDRESS - AlignmentMask));
|
|
||||||
|
|
||||||
RawAddress = InternalAllocatePool (PoolType, AllocationSize + AlignmentMask);
|
|
||||||
|
|
||||||
AlignedAddress = ((UINTN) RawAddress + AlignmentMask) & ~AlignmentMask;
|
|
||||||
|
|
||||||
return (VOID *) AlignedAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates a buffer of type EfiBootServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiBootServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
VOID *RawAddress;
|
|
||||||
UINTN AlignedAddress;
|
|
||||||
UINTN AlignmentMask;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Alignment must be a power of two or zero.
|
|
||||||
//
|
|
||||||
ASSERT ((Alignment & (Alignment - 1)) == 0);
|
|
||||||
|
|
||||||
if (Alignment == 0) {
|
|
||||||
AlignmentMask = Alignment;
|
|
||||||
} else {
|
|
||||||
AlignmentMask = Alignment - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Make sure that AllocationSize plus AlignmentMask does not overflow.
|
|
||||||
//
|
|
||||||
ASSERT (AllocationSize <= (MAX_ADDRESS - AlignmentMask));
|
|
||||||
|
|
||||||
RawAddress = AllocatePool (AllocationSize + AlignmentMask);
|
|
||||||
|
|
||||||
AlignedAddress = ((UINTN) RawAddress + AlignmentMask) & ~AlignmentMask;
|
|
||||||
|
|
||||||
return (VOID *) AlignedAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates a buffer of type EfiRuntimeServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedRuntimePool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedPool (EfiRuntimeServicesData, AllocationSize, Alignment);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates a buffer of type EfieservedMemoryType at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfieservedMemoryType 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedReservedPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedPool (EfiReservedMemoryType, AllocationSize, 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
|
|
||||||
)
|
|
||||||
{
|
|
||||||
VOID *Memory;
|
|
||||||
|
|
||||||
Memory = InternalAllocateAlignedPool (PoolType, AllocationSize, Alignment);
|
|
||||||
if (Memory != NULL) {
|
|
||||||
Memory = ZeroMem (Memory, AllocationSize);
|
|
||||||
}
|
|
||||||
return Memory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates and zeros a buffer of type EfiBootServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiBootServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedZeroPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
VOID *Memory;
|
|
||||||
|
|
||||||
Memory = AllocateAlignedPool (AllocationSize, Alignment);
|
|
||||||
if (Memory != NULL) {
|
|
||||||
Memory = ZeroMem (Memory, AllocationSize);
|
|
||||||
}
|
|
||||||
return Memory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates and zeros a buffer of type EfiRuntimeServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedRuntimeZeroPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedZeroPool (EfiRuntimeServicesData, AllocationSize, Alignment);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Allocates and zeros a buffer of type EfieservedMemoryType at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfieservedMemoryType 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedReservedZeroPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedZeroPool (EfiReservedMemoryType, AllocationSize, 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
|
|
||||||
)
|
|
||||||
{
|
|
||||||
VOID *Memory;
|
|
||||||
|
|
||||||
ASSERT (Buffer != NULL);
|
|
||||||
ASSERT (AllocationSize <= (MAX_ADDRESS - (UINTN) Buffer + 1));
|
|
||||||
|
|
||||||
Memory = InternalAllocateAlignedPool (PoolType, AllocationSize, Alignment);
|
|
||||||
if (Memory != NULL) {
|
|
||||||
Memory = CopyMem (Memory, Buffer, AllocationSize);
|
|
||||||
}
|
|
||||||
return Memory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copies a buffer to an allocated buffer of type EfiBootServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiBootServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedCopyPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN CONST VOID *Buffer,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
VOID *Memory;
|
|
||||||
|
|
||||||
ASSERT (Buffer != NULL);
|
|
||||||
ASSERT (AllocationSize <= (MAX_ADDRESS - (UINTN) Buffer + 1));
|
|
||||||
|
|
||||||
Memory = AllocateAlignedPool (AllocationSize, Alignment);
|
|
||||||
if (Memory != NULL) {
|
|
||||||
Memory = CopyMem (Memory, Buffer, AllocationSize);
|
|
||||||
}
|
|
||||||
return Memory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copies a buffer to an allocated buffer of type EfiRuntimeServicesData at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedRuntimeCopyPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN CONST VOID *Buffer,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedCopyPool (EfiRuntimeServicesData, AllocationSize, Buffer, Alignment);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copies a buffer to an allocated buffer of type EfiReservedMemoryType at a specified alignment.
|
|
||||||
|
|
||||||
Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType 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 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 *
|
|
||||||
EFIAPI
|
|
||||||
AllocateAlignedReservedCopyPool (
|
|
||||||
IN UINTN AllocationSize,
|
|
||||||
IN CONST VOID *Buffer,
|
|
||||||
IN UINTN Alignment
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InternalAllocateAlignedCopyPool (EfiReservedMemoryType, AllocationSize, Buffer, Alignment);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Frees a buffer that was previously allocated with one of the aligned pool allocation functions
|
|
||||||
in the Memory Allocation Library.
|
|
||||||
|
|
||||||
Frees the buffer specified by Buffer. Buffer must have been allocated on a previous call to the
|
|
||||||
aligned pool allocation services of the Memory Allocation Library.
|
|
||||||
If Buffer was not allocated with an aligned pool allocation function in the Memory Allocation
|
|
||||||
Library, then ASSERT().
|
|
||||||
|
|
||||||
@param Buffer Pointer to the buffer to free.
|
|
||||||
|
|
||||||
**/
|
|
||||||
VOID
|
|
||||||
EFIAPI
|
|
||||||
FreeAlignedPool (
|
|
||||||
IN VOID *Buffer
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// PEI phase does not support to free pool, so leave it as NOP.
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Frees buffer that were previously allocated with one of the
|
Frees buffer that were previously allocated with one of the
|
||||||
|
|
|
@ -1,198 +0,0 @@
|
||||||
/** @file
|
|
||||||
Internal include file of PEI Memory Allocation Library.
|
|
||||||
|
|
||||||
Copyright (c) 2006, Intel Corporation<BR>
|
|
||||||
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 __PEI_MEMORY_ALLOCATION_LIB_INTERNALS_H__
|
|
||||||
#define __PEI_MEMORY_ALLOCATION_LIB_INTERNALS_H__
|
|
||||||
|
|
||||||
/**
|
|
||||||
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
|
|
|
@ -31,10 +31,8 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
[Sources.common]
|
[Sources.common]
|
||||||
MemoryAllocationLibInternals.h
|
|
||||||
MemoryAllocationLib.c
|
MemoryAllocationLib.c
|
||||||
|
|
||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue