Add 3 reallocation pool services in MemoryAllocationLib class.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6793 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -16,10 +16,10 @@
|
|||||||
|
|
||||||
#include <PiDxe.h>
|
#include <PiDxe.h>
|
||||||
|
|
||||||
|
|
||||||
#include <Library/MemoryAllocationLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
||||||
#include <Library/BaseMemoryLib.h>
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
|
|
||||||
#include "DxeCoreMemoryAllocationServices.h"
|
#include "DxeCoreMemoryAllocationServices.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -128,6 +128,7 @@ AllocateReservedPages (
|
|||||||
Frees the number of 4KB pages specified by Pages from the buffer specified by Buffer. Buffer
|
Frees the number of 4KB pages specified by Pages from the buffer specified by Buffer. Buffer
|
||||||
must have been allocated on a previous call to the page allocation services of the Memory
|
must have been allocated on a previous call to the page allocation services of the Memory
|
||||||
Allocation Library.
|
Allocation Library.
|
||||||
|
|
||||||
If Buffer was not allocated with a page allocation function in the Memory Allocation Library,
|
If Buffer was not allocated with a page allocation function in the Memory Allocation Library,
|
||||||
then ASSERT().
|
then ASSERT().
|
||||||
If Pages is zero, then ASSERT().
|
If Pages is zero, then ASSERT().
|
||||||
@ -242,6 +243,7 @@ InternalAllocateAlignedPages (
|
|||||||
alignment specified by Alignment. The allocated buffer is returned. If Pages is 0, then NULL is
|
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
|
returned. If there is not enough memory at the specified alignment remaining to satisfy the
|
||||||
request, then NULL is returned.
|
request, then NULL is returned.
|
||||||
|
|
||||||
If Alignment is not a power of two and Alignment is not zero, then ASSERT().
|
If Alignment is not a power of two and Alignment is not zero, then ASSERT().
|
||||||
|
|
||||||
@param Pages The number of 4 KB pages to allocate.
|
@param Pages The number of 4 KB pages to allocate.
|
||||||
@ -268,6 +270,7 @@ AllocateAlignedPages (
|
|||||||
alignment specified by Alignment. The allocated buffer is returned. If Pages is 0, then NULL is
|
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
|
returned. If there is not enough memory at the specified alignment remaining to satisfy the
|
||||||
request, then NULL is returned.
|
request, then NULL is returned.
|
||||||
|
|
||||||
If Alignment is not a power of two and Alignment is not zero, then ASSERT().
|
If Alignment is not a power of two and Alignment is not zero, then ASSERT().
|
||||||
|
|
||||||
@param Pages The number of 4 KB pages to allocate.
|
@param Pages The number of 4 KB pages to allocate.
|
||||||
@ -294,6 +297,7 @@ AllocateAlignedRuntimePages (
|
|||||||
alignment specified by Alignment. The allocated buffer is returned. If Pages is 0, then NULL is
|
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
|
returned. If there is not enough memory at the specified alignment remaining to satisfy the
|
||||||
request, then NULL is returned.
|
request, then NULL is returned.
|
||||||
|
|
||||||
If Alignment is not a power of two and Alignment is not zero, then ASSERT().
|
If Alignment is not a power of two and Alignment is not zero, then ASSERT().
|
||||||
|
|
||||||
@param Pages The number of 4 KB pages to allocate.
|
@param Pages The number of 4 KB pages to allocate.
|
||||||
@ -320,6 +324,7 @@ AllocateAlignedReservedPages (
|
|||||||
Frees the number of 4KB pages specified by Pages from the buffer specified by Buffer. Buffer
|
Frees the number of 4KB pages specified by Pages from the buffer specified by Buffer. Buffer
|
||||||
must have been allocated on a previous call to the aligned page allocation services of the Memory
|
must have been allocated on a previous call to the aligned page allocation services of the Memory
|
||||||
Allocation Library.
|
Allocation Library.
|
||||||
|
|
||||||
If Buffer was not allocated with an aligned page allocation function in the Memory Allocation
|
If Buffer was not allocated with an aligned page allocation function in the Memory Allocation
|
||||||
Library, then ASSERT().
|
Library, then ASSERT().
|
||||||
If Pages is zero, then ASSERT().
|
If Pages is zero, then ASSERT().
|
||||||
@ -572,6 +577,7 @@ InternalAllocateCopyPool (
|
|||||||
AllocationSize bytes from Buffer to the newly allocated buffer, and returns a pointer to the
|
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
|
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.
|
is not enough memory remaining to satisfy the request, then NULL is returned.
|
||||||
|
|
||||||
If Buffer is NULL, then ASSERT().
|
If Buffer is NULL, then ASSERT().
|
||||||
If AllocationSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
If AllocationSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
@ -598,6 +604,7 @@ AllocateCopyPool (
|
|||||||
AllocationSize bytes from Buffer to the newly allocated buffer, and returns a pointer to the
|
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
|
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.
|
is not enough memory remaining to satisfy the request, then NULL is returned.
|
||||||
|
|
||||||
If Buffer is NULL, then ASSERT().
|
If Buffer is NULL, then ASSERT().
|
||||||
If AllocationSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
If AllocationSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
@ -624,6 +631,7 @@ AllocateRuntimeCopyPool (
|
|||||||
AllocationSize bytes from Buffer to the newly allocated buffer, and returns a pointer to the
|
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
|
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.
|
is not enough memory remaining to satisfy the request, then NULL is returned.
|
||||||
|
|
||||||
If Buffer is NULL, then ASSERT().
|
If Buffer is NULL, then ASSERT().
|
||||||
If AllocationSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
If AllocationSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
@ -643,12 +651,153 @@ AllocateReservedCopyPool (
|
|||||||
return InternalAllocateCopyPool (EfiReservedMemoryType, AllocationSize, Buffer);
|
return InternalAllocateCopyPool (EfiReservedMemoryType, AllocationSize, Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reallocates a buffer of a specified memory type.
|
||||||
|
|
||||||
|
Allocates and zeros the number bytes specified by NewSize from memory of the type
|
||||||
|
specified by PoolType. If OldBuffer is not NULL, then the smaller of OldSize and
|
||||||
|
NewSize bytes are copied from OldBuffer to the newly allocated buffer, and
|
||||||
|
OldBuffer is freed. A pointer to the newly allocated buffer is returned.
|
||||||
|
If NewSize 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 OldBuffer is NULL, then ASSERT().
|
||||||
|
If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param PoolType The type of pool to allocate.
|
||||||
|
@param OldSize The size, in bytes, of OldBuffer.
|
||||||
|
@param NewSize The size, in bytes, of the buffer to reallocate.
|
||||||
|
@param OldBuffer The buffer to copy to the allocated buffer. This is an optional
|
||||||
|
parameter that may be NULL.
|
||||||
|
|
||||||
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
InternalReallocatePool (
|
||||||
|
IN EFI_MEMORY_TYPE PoolType,
|
||||||
|
IN UINTN OldSize,
|
||||||
|
IN UINTN NewSize,
|
||||||
|
IN VOID *OldBuffer OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
VOID *NewBuffer;
|
||||||
|
|
||||||
|
NewBuffer = AllocateZeroPool (NewSize);
|
||||||
|
if (NewBuffer != NULL && OldBuffer != NULL) {
|
||||||
|
CopyMem (NewBuffer, OldBuffer, MIN (OldSize, NewSize));
|
||||||
|
FreePool (OldBuffer);
|
||||||
|
}
|
||||||
|
return NewBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reallocates a buffer of type EfiBootServicesData.
|
||||||
|
|
||||||
|
Allocates and zeros the number bytes specified by NewSize from memory of type
|
||||||
|
EfiBootServicesData. If OldBuffer is not NULL, then the smaller of OldSize and
|
||||||
|
NewSize bytes are copied from OldBuffer to the newly allocated buffer, and
|
||||||
|
OldBuffer is freed. A pointer to the newly allocated buffer is returned.
|
||||||
|
If NewSize 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 OldBuffer is NULL, then ASSERT().
|
||||||
|
If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param OldSize The size, in bytes, of OldBuffer.
|
||||||
|
@param NewSize The size, in bytes, of the buffer to reallocate.
|
||||||
|
@param OldBuffer The buffer to copy to the allocated buffer. This is an optional
|
||||||
|
parameter that may be NULL.
|
||||||
|
|
||||||
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ReallocatePool (
|
||||||
|
IN UINTN OldSize,
|
||||||
|
IN UINTN NewSize,
|
||||||
|
IN VOID *OldBuffer OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return InternalReallocatePool (EfiBootServicesData, OldSize, NewSize, OldBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reallocates a buffer of type EfiRuntimeServicesData.
|
||||||
|
|
||||||
|
Allocates and zeros the number bytes specified by NewSize from memory of type
|
||||||
|
EfiRuntimeServicesData. If OldBuffer is not NULL, then the smaller of OldSize and
|
||||||
|
NewSize bytes are copied from OldBuffer to the newly allocated buffer, and
|
||||||
|
OldBuffer is freed. A pointer to the newly allocated buffer is returned.
|
||||||
|
If NewSize 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 OldBuffer is NULL, then ASSERT().
|
||||||
|
If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param OldSize The size, in bytes, of OldBuffer.
|
||||||
|
@param NewSize The size, in bytes, of the buffer to reallocate.
|
||||||
|
@param OldBuffer The buffer to copy to the allocated buffer. This is an optional
|
||||||
|
parameter that may be NULL.
|
||||||
|
|
||||||
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ReallocateRuntimePool (
|
||||||
|
IN UINTN OldSize,
|
||||||
|
IN UINTN NewSize,
|
||||||
|
IN VOID *OldBuffer OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return InternalReallocatePool (EfiRuntimeServicesData, OldSize, NewSize, OldBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reallocates a buffer of type EfiReservedMemoryType.
|
||||||
|
|
||||||
|
Allocates and zeros the number bytes specified by NewSize from memory of type
|
||||||
|
EfiReservedMemoryType. If OldBuffer is not NULL, then the smaller of OldSize and
|
||||||
|
NewSize bytes are copied from OldBuffer to the newly allocated buffer, and
|
||||||
|
OldBuffer is freed. A pointer to the newly allocated buffer is returned.
|
||||||
|
If NewSize 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 OldBuffer is NULL, then ASSERT().
|
||||||
|
If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param OldSize The size, in bytes, of OldBuffer.
|
||||||
|
@param NewSize The size, in bytes, of the buffer to reallocate.
|
||||||
|
@param OldBuffer The buffer to copy to the allocated buffer. This is an optional
|
||||||
|
parameter that may be NULL.
|
||||||
|
|
||||||
|
@return A pointer to the allocated buffer or NULL if allocation fails.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ReallocateReservedPool (
|
||||||
|
IN UINTN OldSize,
|
||||||
|
IN UINTN NewSize,
|
||||||
|
IN VOID *OldBuffer OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return InternalReallocatePool (EfiReservedMemoryType, OldSize, NewSize, OldBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Frees a buffer that was previously allocated with one of the pool allocation functions in the
|
Frees a buffer that was previously allocated with one of the pool allocation functions in the
|
||||||
Memory Allocation Library.
|
Memory Allocation Library.
|
||||||
|
|
||||||
Frees the buffer specified by Buffer. Buffer must have been allocated on a previous call to the
|
Frees the buffer specified by Buffer. Buffer must have been allocated on a previous call to the
|
||||||
pool allocation services of the Memory Allocation Library.
|
pool allocation services of the Memory Allocation Library.
|
||||||
|
|
||||||
If Buffer was not allocated with a pool allocation function in the Memory Allocation Library,
|
If Buffer was not allocated with a pool allocation function in the Memory Allocation Library,
|
||||||
then ASSERT().
|
then ASSERT().
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user