diff --git a/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryProfileLibNull.c b/MdeModulePkg/Library/BaseMemoryProfileLibNull/BaseMemoryProfileLibNull.c
similarity index 93%
rename from MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryProfileLibNull.c
rename to MdeModulePkg/Library/BaseMemoryProfileLibNull/BaseMemoryProfileLibNull.c
index 01f9210777..b11b5db112 100644
--- a/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryProfileLibNull.c
+++ b/MdeModulePkg/Library/BaseMemoryProfileLibNull/BaseMemoryProfileLibNull.c
@@ -1,12 +1,12 @@
/** @file
- Null routines for memory profile for DxeCore.
+ Null routines for memory profile.
Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
-#include
+#include
#include
diff --git a/MdeModulePkg/Library/BaseMemoryProfileLibNull/BaseMemoryProfileLibNull.inf b/MdeModulePkg/Library/BaseMemoryProfileLibNull/BaseMemoryProfileLibNull.inf
new file mode 100644
index 0000000000..caa82ac2d1
--- /dev/null
+++ b/MdeModulePkg/Library/BaseMemoryProfileLibNull/BaseMemoryProfileLibNull.inf
@@ -0,0 +1,32 @@
+## @file
+# Memory Profile Library Null instance.
+#
+# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = BaseMemoryProfileLibNull
+ MODULE_UNI_FILE = BaseMemoryProfileLibNull.uni
+ FILE_GUID = 888809d7-e5c5-4848-b8b9-f920a7b89ce1
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = MemoryProfileLib
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64 EBC
+#
+
+[Sources]
+ BaseMemoryProfileLibNull.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+
diff --git a/MdeModulePkg/Library/BaseMemoryProfileLibNull/BaseMemoryProfileLibNull.uni b/MdeModulePkg/Library/BaseMemoryProfileLibNull/BaseMemoryProfileLibNull.uni
new file mode 100644
index 0000000000..31339032e5
--- /dev/null
+++ b/MdeModulePkg/Library/BaseMemoryProfileLibNull/BaseMemoryProfileLibNull.uni
@@ -0,0 +1,14 @@
+// /** @file
+// Memory Profile Library Null instance.
+//
+// Copyright (c) 2008 - 2016, Intel Corporation. All rights reserved.
+//
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+// **/
+
+
+#string STR_MODULE_ABSTRACT #language en-US "Memory Profile Library Null instance"
+
+#string STR_MODULE_DESCRIPTION #language en-US "Memory Profile Library Null instance."
+
diff --git a/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf b/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf
index 199da4ba65..cd5515ee52 100644
--- a/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf
+++ b/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf
@@ -29,7 +29,6 @@
[Sources]
MemoryAllocationLib.c
DxeCoreMemoryAllocationServices.h
- DxeCoreMemoryProfileLibNull.c
[Packages]
MdePkg/MdePkg.dec
@@ -38,3 +37,4 @@
[LibraryClasses]
DebugLib
BaseMemoryLib
+ MemoryProfileLib
diff --git a/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationProfileLib.inf b/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationProfileLib.inf
index 987e1cd9ce..5f3c5c3ef4 100644
--- a/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationProfileLib.inf
+++ b/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationProfileLib.inf
@@ -1,7 +1,7 @@
## @file
-# Memory Allocation/Profile Library instance dedicated to DXE Core.
-# The implementation borrows the DxeCore Memory Allocation/profile services as the primitive
-# for memory allocation/profile instead of using UEFI boot services or memory profile protocol in an indirect way.
+# Memory Profile Library instance dedicated to DXE Core.
+# The implementation borrows the DxeCore Memory profile services as the primitive
+# for memory profile instead of using UEFI boot services or memory profile protocol in an indirect way.
# It is assumed that this library instance must be linked with DxeCore in this package.
#
# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.
@@ -18,7 +18,6 @@
FILE_GUID = 7ADD7147-74E8-4583-BE34-B6BC45353BB5
MODULE_TYPE = DXE_CORE
VERSION_STRING = 1.0
- LIBRARY_CLASS = MemoryAllocationLib|DXE_CORE
LIBRARY_CLASS = MemoryProfileLib|DXE_CORE
#
@@ -28,8 +27,6 @@
#
[Sources]
- MemoryAllocationLib.c
- DxeCoreMemoryAllocationServices.h
DxeCoreMemoryProfileLib.c
DxeCoreMemoryProfileServices.h
@@ -37,7 +34,3 @@
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
-[LibraryClasses]
- DebugLib
- BaseMemoryLib
-
diff --git a/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationProfileLib.uni b/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationProfileLib.uni
index 089cfb33c9..1c558bd577 100644
--- a/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationProfileLib.uni
+++ b/MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationProfileLib.uni
@@ -1,8 +1,8 @@
// /** @file
-// Memory Allocation/Profile Library instance dedicated to DXE Core.
+// Memory Profile Library instance dedicated to DXE Core.
//
-// The implementation borrows the DxeCore Memory Allocation/Profile services as the primitive
-// for memory allocation/profile instead of using UEFI boot services or memory profile protocol in an indirect way.
+// The implementation borrows the DxeCore Memory Profile services as the primitive
+// for memory profile instead of using UEFI boot services or memory profile protocol in an indirect way.
// It is assumed that this library instance must be linked with DxeCore in this package.
//
// Copyright (c) 2008 - 2016, Intel Corporation. All rights reserved.
@@ -12,7 +12,7 @@
// **/
-#string STR_MODULE_ABSTRACT #language en-US "Memory Allocation/Profile Library instance dedicated to DXE Core"
+#string STR_MODULE_ABSTRACT #language en-US "Memory Profile Library instance dedicated to DXE Core"
-#string STR_MODULE_DESCRIPTION #language en-US "The implementation borrows the DxeCore Memory Allocation/Profile services as the primitive for memory allocation/profile instead of using UEFI boot services or memory profile protocol in an indirect way. It is assumed that this library instance must be linked with DxeCore in this package."
+#string STR_MODULE_DESCRIPTION #language en-US "The implementation borrows the DxeCore Memory Profile services as the primitive for memory profile instead of using UEFI boot services or memory profile protocol in an indirect way. It is assumed that this library instance must be linked with DxeCore in this package."
diff --git a/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/MemoryAllocationLib.c b/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/MemoryAllocationLib.c
new file mode 100644
index 0000000000..adad6b651e
--- /dev/null
+++ b/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/MemoryAllocationLib.c
@@ -0,0 +1,21 @@
+/** @file
+ Support routines for memory allocation routines based on SMM Core internal functions,
+ with memory profile support.
+
+ The PI System Management Mode Core Interface Specification only allows the use
+ of EfiRuntimeServicesCode and EfiRuntimeServicesData memory types for memory
+ allocations as the SMRAM space should be reserved after BDS phase. The functions
+ in the Memory Allocation Library use EfiBootServicesData as the default memory
+ allocation type. For this SMM specific instance of the Memory Allocation Library,
+ EfiRuntimeServicesData is used as the default memory type for all allocations.
+ In addition, allocation for the Reserved memory types are not supported and will
+ always return NULL.
+
+ Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+//
+// The required functions are defined by PiSmmCore itself.
+//
diff --git a/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationLib.inf b/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationLib.inf
index 8812c96041..9bb3aaef02 100644
--- a/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationLib.inf
+++ b/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationLib.inf
@@ -31,13 +31,10 @@
#
[Sources]
- PiSmmCoreMemoryProfileLibNull.c
+ MemoryAllocationLib.c
[Packages]
MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
[LibraryClasses]
- DebugLib
- BaseMemoryLib
- UefiBootServicesTableLib
+ MemoryProfileLib
diff --git a/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationProfileLib.inf b/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationProfileLib.inf
index c3b8a4fdce..04306f82b8 100644
--- a/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationProfileLib.inf
+++ b/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationProfileLib.inf
@@ -1,8 +1,8 @@
## @file
-# Memory Allocation/Profile Library instance dedicated to SMM Core.
-# The implementation borrows the SMM Core Memory Allocation/Profile services as the primitive
-# for memory allocation/profile instead of using SMM System Table servces or SMM memory profile protocol in an indirect way.
-# It is assumed that this library instance must be linked with SMM Cre in this package.
+# Memory Profile Library instance dedicated to SMM Core.
+# The implementation borrows the SMM Core Memory Profile services as the primitive
+# for memory profile instead of using SMM System Table services or SMM memory profile protocol in an indirect way.
+# It is assumed that this library instance must be linked with SMM Core in this package.
#
# Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.
#
@@ -18,7 +18,6 @@
MODULE_TYPE = SMM_CORE
VERSION_STRING = 1.0
PI_SPECIFICATION_VERSION = 0x0001000A
- LIBRARY_CLASS = MemoryAllocationLib|SMM_CORE
#
# This function is defined in PiSmmCore.
#
@@ -42,9 +41,7 @@
[LibraryClasses]
DebugLib
- BaseMemoryLib
UefiBootServicesTableLib
- MemoryAllocationLib
[Guids]
gEdkiiMemoryProfileGuid ## SOMETIMES_CONSUMES ## GUID # Locate protocol
diff --git a/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationProfileLib.uni b/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationProfileLib.uni
index 479c07941c..708fb8e83c 100644
--- a/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationProfileLib.uni
+++ b/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationProfileLib.uni
@@ -1,9 +1,9 @@
// /** @file
-// Memory Allocation/Profile Library instance dedicated to SMM Core.
+// Memory Profile Library instance dedicated to SMM Core.
//
-// The implementation borrows the SMM Core Memory Allocation/Profile services as the primitive
-// for memory allocation/profile instead of using SMM System Table servces or SMM memory profile protocol in an indirect way.
-// It is assumed that this library instance must be linked with SMM Cre in this package.
+// The implementation borrows the SMM Core Memory Profile services as the primitive
+// for memory profile instead of using SMM System Table services or SMM memory profile protocol in an indirect way.
+// It is assumed that this library instance must be linked with SMM Core in this package.
//
// Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.
//
@@ -12,7 +12,7 @@
// **/
-#string STR_MODULE_ABSTRACT #language en-US "Memory Allocation/Profile Library instance dedicated to SMM Core"
+#string STR_MODULE_ABSTRACT #language en-US "Memory Profile Library instance dedicated to SMM Core"
-#string STR_MODULE_DESCRIPTION #language en-US "The implementation borrows the SMM Core Memory Allocation/Profile services as the primitive for memory allocation/profile instead of using SMM System Table services or SMM memory profile protocol in an indirect way. This library is only intended to be linked with the SMM Core that resides in this same package."
+#string STR_MODULE_DESCRIPTION #language en-US "The implementation borrows the SMM Core Memory Profile services as the primitive for memory profile instead of using SMM System Table services or SMM memory profile protocol in an indirect way. This library is only intended to be linked with the SMM Core that resides in this same package."
diff --git a/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryProfileLibNull.c b/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryProfileLibNull.c
deleted file mode 100644
index 22b2cf883a..0000000000
--- a/MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryProfileLibNull.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/** @file
- Null routines for memory profile for PiSmmCore.
-
- Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include
-
-#include
-
-/**
- Record memory profile of multilevel caller.
-
- @param[in] CallerAddress Address of caller.
- @param[in] Action Memory profile action.
- @param[in] MemoryType Memory type.
- EfiMaxMemoryType means the MemoryType is unknown.
- @param[in] Buffer Buffer address.
- @param[in] Size Buffer size.
- @param[in] ActionString String for memory profile action.
- Only needed for user defined allocate action.
-
- @return EFI_SUCCESS Memory profile is updated.
- @return EFI_UNSUPPORTED Memory profile is unsupported,
- or memory profile for the image is not required,
- or memory profile for the memory type is not required.
- @return EFI_ACCESS_DENIED It is during memory profile data getting.
- @return EFI_ABORTED Memory profile recording is not enabled.
- @return EFI_OUT_OF_RESOURCES No enough resource to update memory profile for allocate action.
- @return EFI_NOT_FOUND No matched allocate info found for free action.
-
-**/
-EFI_STATUS
-EFIAPI
-MemoryProfileLibRecord (
- IN PHYSICAL_ADDRESS CallerAddress,
- IN MEMORY_PROFILE_ACTION Action,
- IN EFI_MEMORY_TYPE MemoryType,
- IN VOID *Buffer,
- IN UINTN Size,
- IN CHAR8 *ActionString OPTIONAL
- )
-{
- return EFI_UNSUPPORTED;
-}
diff --git a/MdeModulePkg/Library/SmmMemoryAllocationProfileLib/MemoryAllocationLib.c b/MdeModulePkg/Library/SmmMemoryAllocationProfileLib/MemoryAllocationLib.c
deleted file mode 100644
index 17c380a1d8..0000000000
--- a/MdeModulePkg/Library/SmmMemoryAllocationProfileLib/MemoryAllocationLib.c
+++ /dev/null
@@ -1,1160 +0,0 @@
-/** @file
- Support routines for memory allocation routines based
- on SMM Services Table services for SMM phase drivers, with memory profile support.
-
- The PI System Management Mode Core Interface Specification only allows the use
- of EfiRuntimeServicesCode and EfiRuntimeServicesData memory types for memory
- allocations through the SMM Services Table as the SMRAM space should be
- reserved after BDS phase. The functions in the Memory Allocation Library use
- EfiBootServicesData as the default memory allocation type. For this SMM
- specific instance of the Memory Allocation Library, EfiRuntimeServicesData
- is used as the default memory type for all allocations. In addition,
- allocation for the Reserved memory types are not supported and will always
- return NULL.
-
- Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-
-EFI_SMRAM_DESCRIPTOR *mSmramRanges;
-UINTN mSmramRangeCount;
-
-/**
- The constructor function caches SMRAM ranges that are present in the system.
-
- It will ASSERT() if SMM Access2 Protocol doesn't exist.
- It will ASSERT() if SMRAM ranges can't be got.
- It will ASSERT() if Resource can't be allocated for cache SMRAM range.
- It will always return EFI_SUCCESS.
-
- @param ImageHandle The firmware allocated handle for the EFI image.
- @param SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
-
-**/
-EFI_STATUS
-EFIAPI
-SmmMemoryAllocationLibConstructor (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
- EFI_SMM_ACCESS2_PROTOCOL *SmmAccess;
- UINTN Size;
-
- //
- // Locate SMM Access2 Protocol
- //
- Status = gBS->LocateProtocol (
- &gEfiSmmAccess2ProtocolGuid,
- NULL,
- (VOID **)&SmmAccess
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Get SMRAM range information
- //
- Size = 0;
- Status = SmmAccess->GetCapabilities (SmmAccess, &Size, NULL);
- ASSERT (Status == EFI_BUFFER_TOO_SMALL);
-
- mSmramRanges = (EFI_SMRAM_DESCRIPTOR *)AllocatePool (Size);
- ASSERT (mSmramRanges != NULL);
-
- Status = SmmAccess->GetCapabilities (SmmAccess, &Size, mSmramRanges);
- ASSERT_EFI_ERROR (Status);
-
- mSmramRangeCount = Size / sizeof (EFI_SMRAM_DESCRIPTOR);
-
- return EFI_SUCCESS;
-}
-
-/**
- If SMM driver exits with an error, it must call this routine
- to free the allocated resource before the exiting.
-
- @param[in] ImageHandle The firmware allocated handle for the EFI image.
- @param[in] SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The deconstructor always returns EFI_SUCCESS.
-**/
-EFI_STATUS
-EFIAPI
-SmmMemoryAllocationLibDestructor (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- FreePool (mSmramRanges);
-
- return EFI_SUCCESS;
-}
-
-/**
- Check whether the start address of buffer is within any of the SMRAM ranges.
-
- @param[in] Buffer The pointer to the buffer to be checked.
-
- @retval TRUE The buffer is in SMRAM ranges.
- @retval FALSE The buffer is out of SMRAM ranges.
-**/
-BOOLEAN
-EFIAPI
-BufferInSmram (
- IN VOID *Buffer
- )
-{
- UINTN Index;
-
- for (Index = 0; Index < mSmramRangeCount; Index++) {
- if (((EFI_PHYSICAL_ADDRESS)(UINTN)Buffer >= mSmramRanges[Index].CpuStart) &&
- ((EFI_PHYSICAL_ADDRESS)(UINTN)Buffer < (mSmramRanges[Index].CpuStart + mSmramRanges[Index].PhysicalSize)))
- {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-/**
- 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
- )
-{
- EFI_STATUS Status;
- EFI_PHYSICAL_ADDRESS Memory;
-
- if (Pages == 0) {
- return NULL;
- }
-
- Status = gSmst->SmmAllocatePages (AllocateAnyPages, MemoryType, Pages, &Memory);
- if (EFI_ERROR (Status)) {
- return NULL;
- }
-
- return (VOID *)(UINTN)Memory;
-}
-
-/**
- Allocates one or more 4KB pages of type EfiRuntimeServicesData.
-
- Allocates the number of 4KB pages of type EfiRuntimeServicesData 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 Pages The number of 4 KB pages to allocate.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocatePages (
- IN UINTN Pages
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocatePages (EfiRuntimeServicesData, Pages);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_PAGES,
- EfiRuntimeServicesData,
- Buffer,
- EFI_PAGES_TO_SIZE (Pages),
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates one or more 4KB pages of type EfiRuntimeServicesData.
-
- Allocates the number of 4KB pages of type EfiRuntimeServicesData 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 Pages The number of 4 KB pages to allocate.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateRuntimePages (
- IN UINTN Pages
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocatePages (EfiRuntimeServicesData, Pages);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_PAGES,
- EfiRuntimeServicesData,
- Buffer,
- EFI_PAGES_TO_SIZE (Pages),
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates one or more 4KB pages of type EfiReservedMemoryType.
-
- Allocates the number of 4KB pages of type EfiReservedMemoryType 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 Pages The number of 4 KB pages to allocate.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateReservedPages (
- IN UINTN Pages
- )
-{
- return NULL;
-}
-
-/**
- Frees one or more 4KB pages that were previously allocated with one of the page allocation
- functions in the Memory Allocation Library.
-
- 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 Allocation Library. If it is not possible to free allocated pages,
- then this function will perform no actions.
-
- If Buffer was not allocated with a page allocation function in the Memory Allocation
- Library, then ASSERT().
- If Pages is zero, then ASSERT().
-
- @param Buffer The pointer to the buffer of pages to free.
- @param Pages The number of 4 KB pages to free.
-
-**/
-VOID
-EFIAPI
-FreePages (
- IN VOID *Buffer,
- IN UINTN Pages
- )
-{
- EFI_STATUS Status;
-
- ASSERT (Pages != 0);
- if (BufferInSmram (Buffer)) {
- //
- // When Buffer is in SMRAM range, it should be allocated by gSmst->SmmAllocatePages() service.
- // So, gSmst->SmmFreePages() service is used to free it.
- //
- Status = gSmst->SmmFreePages ((EFI_PHYSICAL_ADDRESS)(UINTN)Buffer, Pages);
- } else {
- //
- // When Buffer is out of SMRAM range, it should be allocated by gBS->AllocatePages() service.
- // So, gBS->FreePages() service is used to free it.
- //
- Status = gBS->FreePages ((EFI_PHYSICAL_ADDRESS)(UINTN)Buffer, Pages);
- }
-
- ASSERT_EFI_ERROR (Status);
-}
-
-/**
- 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().
- If Pages plus EFI_SIZE_TO_PAGES (Alignment) overflows, 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
- )
-{
- EFI_STATUS Status;
- EFI_PHYSICAL_ADDRESS Memory;
- UINTN AlignedMemory;
- UINTN AlignmentMask;
- UINTN UnalignedPages;
- UINTN RealPages;
-
- //
- // Alignment must be a power of two or zero.
- //
- ASSERT ((Alignment & (Alignment - 1)) == 0);
-
- if (Pages == 0) {
- return NULL;
- }
-
- if (Alignment > EFI_PAGE_SIZE) {
- //
- // Calculate the total number of pages since alignment is larger than page size.
- //
- AlignmentMask = Alignment - 1;
- RealPages = Pages + EFI_SIZE_TO_PAGES (Alignment);
- //
- // Make sure that Pages plus EFI_SIZE_TO_PAGES (Alignment) does not overflow.
- //
- ASSERT (RealPages > Pages);
-
- Status = gSmst->SmmAllocatePages (AllocateAnyPages, MemoryType, RealPages, &Memory);
- if (EFI_ERROR (Status)) {
- return NULL;
- }
-
- AlignedMemory = ((UINTN)Memory + AlignmentMask) & ~AlignmentMask;
- UnalignedPages = EFI_SIZE_TO_PAGES (AlignedMemory - (UINTN)Memory);
- if (UnalignedPages > 0) {
- //
- // Free first unaligned page(s).
- //
- Status = gSmst->SmmFreePages (Memory, UnalignedPages);
- ASSERT_EFI_ERROR (Status);
- }
-
- Memory = AlignedMemory + EFI_PAGES_TO_SIZE (Pages);
- UnalignedPages = RealPages - Pages - UnalignedPages;
- if (UnalignedPages > 0) {
- //
- // Free last unaligned page(s).
- //
- Status = gSmst->SmmFreePages (Memory, UnalignedPages);
- ASSERT_EFI_ERROR (Status);
- }
- } else {
- //
- // Do not over-allocate pages in this case.
- //
- Status = gSmst->SmmAllocatePages (AllocateAnyPages, MemoryType, Pages, &Memory);
- if (EFI_ERROR (Status)) {
- return NULL;
- }
-
- AlignedMemory = (UINTN)Memory;
- }
-
- return (VOID *)AlignedMemory;
-}
-
-/**
- Allocates one or more 4KB pages of type EfiRuntimeServicesData at a specified alignment.
-
- Allocates the number of 4KB pages specified by Pages of type EfiRuntimeServicesData
- 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().
- If Pages plus EFI_SIZE_TO_PAGES (Alignment) overflows, then ASSERT().
-
- @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 *
-EFIAPI
-AllocateAlignedPages (
- IN UINTN Pages,
- IN UINTN Alignment
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocateAlignedPages (EfiRuntimeServicesData, Pages, Alignment);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_PAGES,
- EfiRuntimeServicesData,
- Buffer,
- EFI_PAGES_TO_SIZE (Pages),
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates one or more 4KB pages of type EfiRuntimeServicesData at a specified alignment.
-
- Allocates the number of 4KB pages specified by Pages of type EfiRuntimeServicesData
- 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().
- If Pages plus EFI_SIZE_TO_PAGES (Alignment) overflows, then ASSERT().
-
- @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 *
-EFIAPI
-AllocateAlignedRuntimePages (
- IN UINTN Pages,
- IN UINTN Alignment
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocateAlignedPages (EfiRuntimeServicesData, Pages, Alignment);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_RUNTIME_PAGES,
- EfiRuntimeServicesData,
- Buffer,
- EFI_PAGES_TO_SIZE (Pages),
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates one or more 4KB pages of type EfiReservedMemoryType at a specified alignment.
-
- Allocates the number of 4KB pages specified by Pages of type EfiReservedMemoryType
- 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().
- If Pages plus EFI_SIZE_TO_PAGES (Alignment) overflows, then ASSERT().
-
- @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 *
-EFIAPI
-AllocateAlignedReservedPages (
- IN UINTN Pages,
- IN UINTN Alignment
- )
-{
- return NULL;
-}
-
-/**
- Frees one or more 4KB pages that were previously allocated with one of the aligned page
- allocation functions in the Memory Allocation Library.
-
- 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 Allocation Library. If it is not possible to
- free allocated pages, then this function will perform no actions.
-
- If Buffer was not allocated with an aligned page allocation function in the
- Memory Allocation Library, then ASSERT().
- If Pages is zero, then ASSERT().
-
- @param Buffer The pointer to the buffer of pages to free.
- @param Pages The number of 4 KB pages to free.
-
-**/
-VOID
-EFIAPI
-FreeAlignedPages (
- IN VOID *Buffer,
- IN UINTN Pages
- )
-{
- EFI_STATUS Status;
-
- ASSERT (Pages != 0);
- if (BufferInSmram (Buffer)) {
- //
- // When Buffer is in SMRAM range, it should be allocated by gSmst->SmmAllocatePages() service.
- // So, gSmst->SmmFreePages() service is used to free it.
- //
- Status = gSmst->SmmFreePages ((EFI_PHYSICAL_ADDRESS)(UINTN)Buffer, Pages);
- } else {
- //
- // When Buffer is out of SMRAM range, it should be allocated by gBS->AllocatePages() service.
- // So, gBS->FreePages() service is used to free it.
- //
- Status = gBS->FreePages ((EFI_PHYSICAL_ADDRESS)(UINTN)Buffer, Pages);
- }
-
- ASSERT_EFI_ERROR (Status);
-}
-
-/**
- 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
- )
-{
- EFI_STATUS Status;
- VOID *Memory;
-
- Status = gSmst->SmmAllocatePool (MemoryType, AllocationSize, &Memory);
- if (EFI_ERROR (Status)) {
- Memory = NULL;
- }
-
- return Memory;
-}
-
-/**
- Allocates a buffer of type EfiRuntimeServicesData.
-
- Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData
- 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 AllocationSize The number of bytes to allocate.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocatePool (
- IN UINTN AllocationSize
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocatePool (EfiRuntimeServicesData, AllocationSize);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_POOL,
- EfiRuntimeServicesData,
- Buffer,
- AllocationSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates a buffer of type EfiRuntimeServicesData.
-
- Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData
- 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 AllocationSize The number of bytes to allocate.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateRuntimePool (
- IN UINTN AllocationSize
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocatePool (EfiRuntimeServicesData, AllocationSize);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_POOL,
- EfiRuntimeServicesData,
- Buffer,
- AllocationSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates a buffer of type EfiReservedMemoryType.
-
- Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType
- 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 AllocationSize The number of bytes to allocate.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateReservedPool (
- IN UINTN AllocationSize
- )
-{
- return NULL;
-}
-
-/**
- Allocates and zeros a buffer of a certain pool type.
-
- Allocates the number bytes specified by AllocationSize of a certain 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
- )
-{
- VOID *Memory;
-
- Memory = InternalAllocatePool (PoolType, AllocationSize);
- if (Memory != NULL) {
- Memory = ZeroMem (Memory, AllocationSize);
- }
-
- return Memory;
-}
-
-/**
- Allocates and zeros a buffer of type EfiRuntimeServicesData.
-
- Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData,
- 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 AllocationSize The number of bytes to allocate and zero.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateZeroPool (
- IN UINTN AllocationSize
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocateZeroPool (EfiRuntimeServicesData, AllocationSize);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ZERO_POOL,
- EfiRuntimeServicesData,
- Buffer,
- AllocationSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates and zeros a buffer of type EfiRuntimeServicesData.
-
- Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData,
- 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 AllocationSize The number of bytes to allocate and zero.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateRuntimeZeroPool (
- IN UINTN AllocationSize
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocateZeroPool (EfiRuntimeServicesData, AllocationSize);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_ZERO_POOL,
- EfiRuntimeServicesData,
- Buffer,
- AllocationSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates and zeros a buffer of type EfiReservedMemoryType.
-
- Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType,
- 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 AllocationSize The number of bytes to allocate and zero.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateReservedZeroPool (
- IN UINTN AllocationSize
- )
-{
- return NULL;
-}
-
-/**
- Copies a buffer to an allocated buffer of a certain pool type.
-
- Allocates the number bytes specified by AllocationSize of a certain 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
- )
-{
- VOID *Memory;
-
- ASSERT (Buffer != NULL);
- ASSERT (AllocationSize <= (MAX_ADDRESS - (UINTN)Buffer + 1));
-
- Memory = InternalAllocatePool (PoolType, AllocationSize);
- if (Memory != NULL) {
- Memory = CopyMem (Memory, Buffer, AllocationSize);
- }
-
- return Memory;
-}
-
-/**
- Copies a buffer to an allocated buffer of type EfiRuntimeServicesData.
-
- Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData,
- 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 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 *
-EFIAPI
-AllocateCopyPool (
- IN UINTN AllocationSize,
- IN CONST VOID *Buffer
- )
-{
- VOID *NewBuffer;
-
- NewBuffer = InternalAllocateCopyPool (EfiRuntimeServicesData, AllocationSize, Buffer);
- if (NewBuffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_COPY_POOL,
- EfiRuntimeServicesData,
- NewBuffer,
- AllocationSize,
- NULL
- );
- }
-
- return NewBuffer;
-}
-
-/**
- Copies a buffer to an allocated buffer of type EfiRuntimeServicesData.
-
- Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData,
- 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 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 *
-EFIAPI
-AllocateRuntimeCopyPool (
- IN UINTN AllocationSize,
- IN CONST VOID *Buffer
- )
-{
- VOID *NewBuffer;
-
- NewBuffer = InternalAllocateCopyPool (EfiRuntimeServicesData, AllocationSize, Buffer);
- if (NewBuffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_COPY_POOL,
- EfiRuntimeServicesData,
- NewBuffer,
- AllocationSize,
- NULL
- );
- }
-
- return NewBuffer;
-}
-
-/**
- Copies a buffer to an allocated buffer of type EfiReservedMemoryType.
-
- Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType,
- 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 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 *
-EFIAPI
-AllocateReservedCopyPool (
- IN UINTN AllocationSize,
- IN CONST VOID *Buffer
- )
-{
- return NULL;
-}
-
-/**
- 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 the allocation of the new buffer is successful and the smaller of NewSize
- and OldSize is greater than (MAX_ADDRESS - OldBuffer + 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 = InternalAllocateZeroPool (PoolType, NewSize);
- if ((NewBuffer != NULL) && (OldBuffer != NULL)) {
- CopyMem (NewBuffer, OldBuffer, MIN (OldSize, NewSize));
- FreePool (OldBuffer);
- }
-
- return NewBuffer;
-}
-
-/**
- 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 the allocation of the new buffer is successful and the smaller of NewSize
- and OldSize is greater than (MAX_ADDRESS - OldBuffer + 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
- )
-{
- VOID *Buffer;
-
- Buffer = InternalReallocatePool (EfiRuntimeServicesData, OldSize, NewSize, OldBuffer);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_REALLOCATE_POOL,
- EfiRuntimeServicesData,
- Buffer,
- NewSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- 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 the allocation of the new buffer is successful and the smaller of NewSize
- and OldSize is greater than (MAX_ADDRESS - OldBuffer + 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
- )
-{
- VOID *Buffer;
-
- Buffer = InternalReallocatePool (EfiRuntimeServicesData, OldSize, NewSize, OldBuffer);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_REALLOCATE_RUNTIME_POOL,
- EfiRuntimeServicesData,
- Buffer,
- NewSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- 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 the allocation of the new buffer is successful and the smaller of NewSize
- and OldSize is greater than (MAX_ADDRESS - OldBuffer + 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 NULL;
-}
-
-/**
- Frees a buffer that was previously allocated with one of the 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 pool allocation services of the Memory Allocation Library.
- If it is not possible to free pool resources, then this function will perform
- no actions.
-
- If Buffer was not allocated with a pool allocation function in the Memory
- Allocation Library, then ASSERT().
-
- @param Buffer The pointer to the buffer to free.
-
-**/
-VOID
-EFIAPI
-FreePool (
- IN VOID *Buffer
- )
-{
- EFI_STATUS Status;
-
- if (BufferInSmram (Buffer)) {
- //
- // When Buffer is in SMRAM range, it should be allocated by gSmst->SmmAllocatePool() service.
- // So, gSmst->SmmFreePool() service is used to free it.
- //
- Status = gSmst->SmmFreePool (Buffer);
- } else {
- //
- // When Buffer is out of SMRAM range, it should be allocated by gBS->AllocatePool() service.
- // So, gBS->FreePool() service is used to free it.
- //
- Status = gBS->FreePool (Buffer);
- }
-
- ASSERT_EFI_ERROR (Status);
-}
diff --git a/MdeModulePkg/Library/SmmMemoryAllocationProfileLib/SmmMemoryAllocationProfileLib.inf b/MdeModulePkg/Library/SmmMemoryAllocationProfileLib/SmmMemoryAllocationProfileLib.inf
index 3e29a8caf3..fb7c3c026d 100644
--- a/MdeModulePkg/Library/SmmMemoryAllocationProfileLib/SmmMemoryAllocationProfileLib.inf
+++ b/MdeModulePkg/Library/SmmMemoryAllocationProfileLib/SmmMemoryAllocationProfileLib.inf
@@ -1,12 +1,6 @@
## @file
-# Instance of Memory Allocation Library using SMM Services Table,
-# with memory profile support.
-#
-# Memory Allocation Library that uses services from the SMM Services Table to
-# allocate and free memory, with memory profile support.
-#
-# The implementation of this instance is copied from UefiMemoryAllocationLib
-# in MdePkg and updated to support both MemoryAllocationLib and MemoryProfileLib.
+# Instance of Memory Profile Library using the EDK II SMM Memory Profile
+# Protocol.
#
# Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -21,9 +15,6 @@
MODULE_TYPE = DXE_SMM_DRIVER
VERSION_STRING = 1.0
PI_SPECIFICATION_VERSION = 0x0001000A
- LIBRARY_CLASS = MemoryAllocationLib|DXE_SMM_DRIVER
- CONSTRUCTOR = SmmMemoryAllocationLibConstructor
- DESTRUCTOR = SmmMemoryAllocationLibDestructor
LIBRARY_CLASS = MemoryProfileLib|DXE_SMM_DRIVER
CONSTRUCTOR = SmmMemoryProfileLibConstructor
@@ -32,7 +23,6 @@
#
[Sources]
- MemoryAllocationLib.c
SmmMemoryProfileLib.c
[Packages]
@@ -41,7 +31,6 @@
[LibraryClasses]
DebugLib
- BaseMemoryLib
SmmServicesTableLib
UefiBootServicesTableLib
diff --git a/MdeModulePkg/Library/SmmMemoryAllocationProfileLib/SmmMemoryAllocationProfileLib.uni b/MdeModulePkg/Library/SmmMemoryAllocationProfileLib/SmmMemoryAllocationProfileLib.uni
index 3fae263725..e70e66a43b 100644
--- a/MdeModulePkg/Library/SmmMemoryAllocationProfileLib/SmmMemoryAllocationProfileLib.uni
+++ b/MdeModulePkg/Library/SmmMemoryAllocationProfileLib/SmmMemoryAllocationProfileLib.uni
@@ -1,9 +1,6 @@
// /** @file
-// Instance of Memory Allocation Library using SMM Services Table,
-// with memory profile support.
-//
-// Memory Allocation Library that uses services from the SMM Services Table to
-// allocate and free memory, with memory profile support.
+// Instance of Memory Profile Library using the EDK II SMM Memory Profile
+// Protocol.
//
// Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.
//
@@ -12,7 +9,7 @@
// **/
-#string STR_MODULE_ABSTRACT #language en-US "Instance of Memory Allocation Library using SMM Services Table, with memory profile support"
+#string STR_MODULE_ABSTRACT #language en-US "Instance of Memory Profile Library using the EDK II SMM Memory Profile Protocol"
-#string STR_MODULE_DESCRIPTION #language en-US "This Memory Allocation Library uses services from the SMM Services Table to allocate and free memory, with memory profile support."
+#string STR_MODULE_DESCRIPTION #language en-US "Instance of Memory Profile Library using the EDK II SMM Memory Profile Protocol."
diff --git a/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/MemoryAllocationLib.c b/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/MemoryAllocationLib.c
deleted file mode 100644
index 38c95b9eb7..0000000000
--- a/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/MemoryAllocationLib.c
+++ /dev/null
@@ -1,1076 +0,0 @@
-/** @file
- Support routines for memory allocation routines based
- on boot services for Dxe phase drivers, with memory profile support.
-
- Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include
-
-#include
-#include
-#include
-#include
-
-#include
-
-/**
- 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
- )
-{
- EFI_STATUS Status;
- EFI_PHYSICAL_ADDRESS Memory;
-
- if (Pages == 0) {
- return NULL;
- }
-
- Status = gBS->AllocatePages (AllocateAnyPages, MemoryType, Pages, &Memory);
- if (EFI_ERROR (Status)) {
- return NULL;
- }
-
- return (VOID *)(UINTN)Memory;
-}
-
-/**
- Allocates one or more 4KB pages of type EfiBootServicesData.
-
- Allocates the number of 4KB pages of type EfiBootServicesData 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 Pages The number of 4 KB pages to allocate.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocatePages (
- IN UINTN Pages
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocatePages (EfiBootServicesData, Pages);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_PAGES,
- EfiBootServicesData,
- Buffer,
- EFI_PAGES_TO_SIZE (Pages),
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates one or more 4KB pages of type EfiRuntimeServicesData.
-
- Allocates the number of 4KB pages of type EfiRuntimeServicesData 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 Pages The number of 4 KB pages to allocate.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateRuntimePages (
- IN UINTN Pages
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocatePages (EfiRuntimeServicesData, Pages);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_PAGES,
- EfiRuntimeServicesData,
- Buffer,
- EFI_PAGES_TO_SIZE (Pages),
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates one or more 4KB pages of type EfiReservedMemoryType.
-
- Allocates the number of 4KB pages of type EfiReservedMemoryType 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 Pages The number of 4 KB pages to allocate.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateReservedPages (
- IN UINTN Pages
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocatePages (EfiReservedMemoryType, Pages);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_PAGES,
- EfiReservedMemoryType,
- Buffer,
- EFI_PAGES_TO_SIZE (Pages),
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Frees one or more 4KB pages that were previously allocated with one of the page allocation
- functions in the Memory Allocation Library.
-
- 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
- Allocation Library. If it is not possible to free allocated pages, then this function will
- perform no actions.
-
- If Buffer was not allocated with a page allocation function in the Memory Allocation Library,
- then ASSERT().
- If Pages is zero, then ASSERT().
-
- @param Buffer The pointer to the buffer of pages to free.
- @param Pages The number of 4 KB pages to free.
-
-**/
-VOID
-EFIAPI
-FreePages (
- IN VOID *Buffer,
- IN UINTN Pages
- )
-{
- EFI_STATUS Status;
-
- ASSERT (Pages != 0);
- Status = gBS->FreePages ((EFI_PHYSICAL_ADDRESS)(UINTN)Buffer, Pages);
- ASSERT_EFI_ERROR (Status);
-}
-
-/**
- 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().
- If Pages plus EFI_SIZE_TO_PAGES (Alignment) overflows, 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
- )
-{
- EFI_STATUS Status;
- EFI_PHYSICAL_ADDRESS Memory;
- UINTN AlignedMemory;
- UINTN AlignmentMask;
- UINTN UnalignedPages;
- UINTN RealPages;
-
- //
- // Alignment must be a power of two or zero.
- //
- ASSERT ((Alignment & (Alignment - 1)) == 0);
-
- if (Pages == 0) {
- return NULL;
- }
-
- if (Alignment > EFI_PAGE_SIZE) {
- //
- // Calculate the total number of pages since alignment is larger than page size.
- //
- AlignmentMask = Alignment - 1;
- RealPages = Pages + EFI_SIZE_TO_PAGES (Alignment);
- //
- // Make sure that Pages plus EFI_SIZE_TO_PAGES (Alignment) does not overflow.
- //
- ASSERT (RealPages > Pages);
-
- Status = gBS->AllocatePages (AllocateAnyPages, MemoryType, RealPages, &Memory);
- if (EFI_ERROR (Status)) {
- return NULL;
- }
-
- AlignedMemory = ((UINTN)Memory + AlignmentMask) & ~AlignmentMask;
- UnalignedPages = EFI_SIZE_TO_PAGES (AlignedMemory - (UINTN)Memory);
- if (UnalignedPages > 0) {
- //
- // Free first unaligned page(s).
- //
- Status = gBS->FreePages (Memory, UnalignedPages);
- ASSERT_EFI_ERROR (Status);
- }
-
- Memory = AlignedMemory + EFI_PAGES_TO_SIZE (Pages);
- UnalignedPages = RealPages - Pages - UnalignedPages;
- if (UnalignedPages > 0) {
- //
- // Free last unaligned page(s).
- //
- Status = gBS->FreePages (Memory, UnalignedPages);
- ASSERT_EFI_ERROR (Status);
- }
- } else {
- //
- // Do not over-allocate pages in this case.
- //
- Status = gBS->AllocatePages (AllocateAnyPages, MemoryType, Pages, &Memory);
- if (EFI_ERROR (Status)) {
- return NULL;
- }
-
- AlignedMemory = (UINTN)Memory;
- }
-
- return (VOID *)AlignedMemory;
-}
-
-/**
- Allocates one or more 4KB pages of type EfiBootServicesData at a specified alignment.
-
- Allocates the number of 4KB pages specified by Pages of type EfiBootServicesData 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().
- If Pages plus EFI_SIZE_TO_PAGES (Alignment) overflows, then ASSERT().
-
- @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 *
-EFIAPI
-AllocateAlignedPages (
- IN UINTN Pages,
- IN UINTN Alignment
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocateAlignedPages (EfiBootServicesData, Pages, Alignment);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_PAGES,
- EfiBootServicesData,
- Buffer,
- EFI_PAGES_TO_SIZE (Pages),
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates one or more 4KB pages of type EfiRuntimeServicesData at a specified alignment.
-
- Allocates the number of 4KB pages specified by Pages of type EfiRuntimeServicesData 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().
- If Pages plus EFI_SIZE_TO_PAGES (Alignment) overflows, then ASSERT().
-
- @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 *
-EFIAPI
-AllocateAlignedRuntimePages (
- IN UINTN Pages,
- IN UINTN Alignment
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocateAlignedPages (EfiRuntimeServicesData, Pages, Alignment);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_RUNTIME_PAGES,
- EfiRuntimeServicesData,
- Buffer,
- EFI_PAGES_TO_SIZE (Pages),
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates one or more 4KB pages of type EfiReservedMemoryType at a specified alignment.
-
- Allocates the number of 4KB pages specified by Pages of type EfiReservedMemoryType 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().
- If Pages plus EFI_SIZE_TO_PAGES (Alignment) overflows, then ASSERT().
-
- @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 *
-EFIAPI
-AllocateAlignedReservedPages (
- IN UINTN Pages,
- IN UINTN Alignment
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocateAlignedPages (EfiReservedMemoryType, Pages, Alignment);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ALIGNED_RESERVED_PAGES,
- EfiReservedMemoryType,
- Buffer,
- EFI_PAGES_TO_SIZE (Pages),
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Frees one or more 4KB pages that were previously allocated with one of the aligned page
- allocation functions in the Memory Allocation Library.
-
- 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
- Allocation Library. If it is not possible to free allocated pages, then this function will
- perform no actions.
-
- If Buffer was not allocated with an aligned page allocation function in the Memory Allocation
- Library, then ASSERT().
- If Pages is zero, then ASSERT().
-
- @param Buffer The pointer to the buffer of pages to free.
- @param Pages The number of 4 KB pages to free.
-
-**/
-VOID
-EFIAPI
-FreeAlignedPages (
- IN VOID *Buffer,
- IN UINTN Pages
- )
-{
- EFI_STATUS Status;
-
- ASSERT (Pages != 0);
- Status = gBS->FreePages ((EFI_PHYSICAL_ADDRESS)(UINTN)Buffer, Pages);
- ASSERT_EFI_ERROR (Status);
-}
-
-/**
- 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
- )
-{
- EFI_STATUS Status;
- VOID *Memory;
-
- Status = gBS->AllocatePool (MemoryType, AllocationSize, &Memory);
- if (EFI_ERROR (Status)) {
- Memory = NULL;
- }
-
- return Memory;
-}
-
-/**
- Allocates a buffer of type EfiBootServicesData.
-
- Allocates the number bytes specified by AllocationSize of type EfiBootServicesData 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 AllocationSize The number of bytes to allocate.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocatePool (
- IN UINTN AllocationSize
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocatePool (EfiBootServicesData, AllocationSize);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_POOL,
- EfiBootServicesData,
- Buffer,
- AllocationSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates a buffer of type EfiRuntimeServicesData.
-
- Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData 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 AllocationSize The number of bytes to allocate.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateRuntimePool (
- IN UINTN AllocationSize
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocatePool (EfiRuntimeServicesData, AllocationSize);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_POOL,
- EfiRuntimeServicesData,
- Buffer,
- AllocationSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates a buffer of type EfiReservedMemoryType.
-
- Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType 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 AllocationSize The number of bytes to allocate.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateReservedPool (
- IN UINTN AllocationSize
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocatePool (EfiReservedMemoryType, AllocationSize);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_POOL,
- EfiReservedMemoryType,
- Buffer,
- AllocationSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates and zeros a buffer of a certain pool type.
-
- Allocates the number bytes specified by AllocationSize of a certain 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
- )
-{
- VOID *Memory;
-
- Memory = InternalAllocatePool (PoolType, AllocationSize);
- if (Memory != NULL) {
- Memory = ZeroMem (Memory, AllocationSize);
- }
-
- return Memory;
-}
-
-/**
- Allocates and zeros a buffer of type EfiBootServicesData.
-
- Allocates the number bytes specified by AllocationSize of type EfiBootServicesData, 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 AllocationSize The number of bytes to allocate and zero.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateZeroPool (
- IN UINTN AllocationSize
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocateZeroPool (EfiBootServicesData, AllocationSize);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_ZERO_POOL,
- EfiBootServicesData,
- Buffer,
- AllocationSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates and zeros a buffer of type EfiRuntimeServicesData.
-
- Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData, 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 AllocationSize The number of bytes to allocate and zero.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateRuntimeZeroPool (
- IN UINTN AllocationSize
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocateZeroPool (EfiRuntimeServicesData, AllocationSize);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_ZERO_POOL,
- EfiRuntimeServicesData,
- Buffer,
- AllocationSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Allocates and zeros a buffer of type EfiReservedMemoryType.
-
- Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType, 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 AllocationSize The number of bytes to allocate and zero.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID *
-EFIAPI
-AllocateReservedZeroPool (
- IN UINTN AllocationSize
- )
-{
- VOID *Buffer;
-
- Buffer = InternalAllocateZeroPool (EfiReservedMemoryType, AllocationSize);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_ZERO_POOL,
- EfiReservedMemoryType,
- Buffer,
- AllocationSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Copies a buffer to an allocated buffer of a certain pool type.
-
- Allocates the number bytes specified by AllocationSize of a certain 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
- )
-{
- VOID *Memory;
-
- ASSERT (Buffer != NULL);
- ASSERT (AllocationSize <= (MAX_ADDRESS - (UINTN)Buffer + 1));
-
- Memory = InternalAllocatePool (PoolType, AllocationSize);
- if (Memory != NULL) {
- Memory = CopyMem (Memory, Buffer, AllocationSize);
- }
-
- return Memory;
-}
-
-/**
- Copies a buffer to an allocated buffer of type EfiBootServicesData.
-
- Allocates the number bytes specified by AllocationSize of type EfiBootServicesData, 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 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 *
-EFIAPI
-AllocateCopyPool (
- IN UINTN AllocationSize,
- IN CONST VOID *Buffer
- )
-{
- VOID *NewBuffer;
-
- NewBuffer = InternalAllocateCopyPool (EfiBootServicesData, AllocationSize, Buffer);
- if (NewBuffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_COPY_POOL,
- EfiBootServicesData,
- NewBuffer,
- AllocationSize,
- NULL
- );
- }
-
- return NewBuffer;
-}
-
-/**
- Copies a buffer to an allocated buffer of type EfiRuntimeServicesData.
-
- Allocates the number bytes specified by AllocationSize of type EfiRuntimeServicesData, 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 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 *
-EFIAPI
-AllocateRuntimeCopyPool (
- IN UINTN AllocationSize,
- IN CONST VOID *Buffer
- )
-{
- VOID *NewBuffer;
-
- NewBuffer = InternalAllocateCopyPool (EfiRuntimeServicesData, AllocationSize, Buffer);
- if (NewBuffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RUNTIME_COPY_POOL,
- EfiRuntimeServicesData,
- NewBuffer,
- AllocationSize,
- NULL
- );
- }
-
- return NewBuffer;
-}
-
-/**
- Copies a buffer to an allocated buffer of type EfiReservedMemoryType.
-
- Allocates the number bytes specified by AllocationSize of type EfiReservedMemoryType, 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 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 *
-EFIAPI
-AllocateReservedCopyPool (
- IN UINTN AllocationSize,
- IN CONST VOID *Buffer
- )
-{
- VOID *NewBuffer;
-
- NewBuffer = InternalAllocateCopyPool (EfiReservedMemoryType, AllocationSize, Buffer);
- if (NewBuffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_ALLOCATE_RESERVED_COPY_POOL,
- EfiRuntimeServicesData,
- NewBuffer,
- AllocationSize,
- NULL
- );
- }
-
- return NewBuffer;
-}
-
-/**
- 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 the allocation of the new buffer is successful and the smaller of NewSize and OldSize
- is greater than (MAX_ADDRESS - OldBuffer + 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 = InternalAllocateZeroPool (PoolType, 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 the allocation of the new buffer is successful and the smaller of NewSize and OldSize
- is greater than (MAX_ADDRESS - OldBuffer + 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
- )
-{
- VOID *Buffer;
-
- Buffer = InternalReallocatePool (EfiBootServicesData, OldSize, NewSize, OldBuffer);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_REALLOCATE_POOL,
- EfiBootServicesData,
- Buffer,
- NewSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- 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 the allocation of the new buffer is successful and the smaller of NewSize and OldSize
- is greater than (MAX_ADDRESS - OldBuffer + 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
- )
-{
- VOID *Buffer;
-
- Buffer = InternalReallocatePool (EfiRuntimeServicesData, OldSize, NewSize, OldBuffer);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_REALLOCATE_RUNTIME_POOL,
- EfiRuntimeServicesData,
- Buffer,
- NewSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- 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 the allocation of the new buffer is successful and the smaller of NewSize and OldSize
- is greater than (MAX_ADDRESS - OldBuffer + 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
- )
-{
- VOID *Buffer;
-
- Buffer = InternalReallocatePool (EfiReservedMemoryType, OldSize, NewSize, OldBuffer);
- if (Buffer != NULL) {
- MemoryProfileLibRecord (
- (PHYSICAL_ADDRESS)(UINTN)RETURN_ADDRESS (0),
- MEMORY_PROFILE_ACTION_LIB_REALLOCATE_RESERVED_POOL,
- EfiReservedMemoryType,
- Buffer,
- NewSize,
- NULL
- );
- }
-
- return Buffer;
-}
-
-/**
- Frees a buffer that was previously allocated with one of the 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
- pool allocation services of the Memory Allocation Library. If it is not possible to free pool
- resources, then this function will perform no actions.
-
- If Buffer was not allocated with a pool allocation function in the Memory Allocation Library,
- then ASSERT().
-
- @param Buffer The pointer to the buffer to free.
-
-**/
-VOID
-EFIAPI
-FreePool (
- IN VOID *Buffer
- )
-{
- EFI_STATUS Status;
-
- Status = gBS->FreePool (Buffer);
- ASSERT_EFI_ERROR (Status);
-}
diff --git a/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/UefiMemoryAllocationProfileLib.inf b/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/UefiMemoryAllocationProfileLib.inf
index 553e876e44..8ac7bf6f4c 100644
--- a/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/UefiMemoryAllocationProfileLib.inf
+++ b/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/UefiMemoryAllocationProfileLib.inf
@@ -1,12 +1,5 @@
## @file
-# Instance of Memory Allocation Library using EFI Boot Services,
-# with memory profile support.
-#
-# Memory Allocation Library that uses EFI Boot Services to allocate
-# and free memory, with memory profile support.
-#
-# The implementation of this instance is copied from UefiMemoryAllocationLib
-# in MdePkg and updated to support both MemoryAllocationLib and MemoryProfileLib.
+# Instance of Memory Profile Library using the EDK II Memory Profile Protocol.
#
# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
#
@@ -22,7 +15,6 @@
FILE_GUID = 9E8A380A-231E-41E4-AD40-5E706196B853
MODULE_TYPE = UEFI_DRIVER
VERSION_STRING = 1.0
- LIBRARY_CLASS = MemoryAllocationLib|DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
LIBRARY_CLASS = MemoryProfileLib|DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
CONSTRUCTOR = MemoryProfileLibConstructor
@@ -31,7 +23,6 @@
#
[Sources]
- MemoryAllocationLib.c
DxeMemoryProfileLib.c
[Packages]
@@ -40,7 +31,6 @@
[LibraryClasses]
DebugLib
- BaseMemoryLib
UefiBootServicesTableLib
[Guids]
diff --git a/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/UefiMemoryAllocationProfileLib.uni b/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/UefiMemoryAllocationProfileLib.uni
index e0f369de34..185efeb23f 100644
--- a/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/UefiMemoryAllocationProfileLib.uni
+++ b/MdeModulePkg/Library/UefiMemoryAllocationProfileLib/UefiMemoryAllocationProfileLib.uni
@@ -1,9 +1,5 @@
// /** @file
-// Instance of Memory Allocation Library using EFI Boot Services,
-// with memory profile support.
-//
-// Memory Allocation Library that uses EFI Boot Services to allocate
-// and free memory, with memory profile support.
+// Instance of Memory Profile Library using the EDK II Memory Profile Protocol.
//
// Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.
//
@@ -12,7 +8,7 @@
// **/
-#string STR_MODULE_ABSTRACT #language en-US "Instance of Memory Allocation Library using EFI Boot Services, with memory profile support"
+#string STR_MODULE_ABSTRACT #language en-US "Instance of Memory Profile Library using the EDK II Memory Profile Protocol"
-#string STR_MODULE_DESCRIPTION #language en-US "This Memory Allocation Library uses EFI Boot Services to allocate and free memory, with memory profile support."
+#string STR_MODULE_DESCRIPTION #language en-US "Instance of Memory Profile Library using the EDK II Memory Profile Protocol."
diff --git a/MdePkg/MdeLibs.dsc.inc b/MdePkg/MdeLibs.dsc.inc
index 87cc94546e..831cfc5382 100644
--- a/MdePkg/MdeLibs.dsc.inc
+++ b/MdePkg/MdeLibs.dsc.inc
@@ -17,3 +17,5 @@
CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf
SmmCpuRendezvousLib|MdePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf
BaseOverflowLib|MdePkg/Library/BaseOverflowLib/BaseOverflowLib.inf
+
+ MemoryProfileLib|MdeModulePkg/Library/BaseMemoryProfileLibNull/BaseMemoryProfileLibNull.inf