mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/AcpiTableDxe: PCD switch to avoid using ACPI reclaim memory
UEFI spec defined ACPI Tables at boot time can be contained in memory of type EfiACPIReclaimMemory or EfiAcpiMemoryNVS, although InstallAcpiTable with AcpiTableProtocol will only allocate memory with type EfiACPIReclaimMemory (Except FACS). This patch provides an optional method controlled by PCD to avoid using EfiACPIReclaimMemory, by setting the PCD PcdNoACPIReclaimMemory to TRUE, all ACPI allocated memory will use EfiAcpiMemoryNVS instead. Cc: Zhiguang Liu <zhiguang.liu@intel.com> Cc: Dandan Bi <dandan.bi@intel.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Liu Yun <yun.y.liu@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Aaron Li <aaron.li@intel.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn> Reviewed-by: Zhiguang Liu <zhiguang.liu@intel.com>
This commit is contained in:
parent
b7f8779fe1
commit
932db9df0c
|
@ -1533,6 +1533,13 @@
|
||||||
# @Prompt Exposed ACPI table versions.
|
# @Prompt Exposed ACPI table versions.
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x3E|UINT32|0x0001004c
|
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x3E|UINT32|0x0001004c
|
||||||
|
|
||||||
|
## Indicates whether ACPI Reclaim memory is not available
|
||||||
|
# Default is FALSE that means ACPI Reclaim memory is available
|
||||||
|
# If it is set to TRUE that means ACPI Reclaim memory is not available
|
||||||
|
# For example ACPI Table protocol will use ACPI NVS memory instead of ACPI Reclaim memory
|
||||||
|
# @Prompt ACPI Reclaim memory is not available.
|
||||||
|
gEfiMdeModulePkgTokenSpaceGuid.PcdNoACPIReclaimMemory|FALSE|BOOLEAN|0x0001008b
|
||||||
|
|
||||||
## This PCD defines the MAX repair count.
|
## This PCD defines the MAX repair count.
|
||||||
# The default value is 0 that means infinite.
|
# The default value is 0 that means infinite.
|
||||||
# @Prompt MAX repair count
|
# @Prompt MAX repair count
|
||||||
|
|
|
@ -955,6 +955,14 @@
|
||||||
"BIT 4 - EFI_ACPI_TABLE_VERSION_4_0.<BR>\n"
|
"BIT 4 - EFI_ACPI_TABLE_VERSION_4_0.<BR>\n"
|
||||||
"BIT 5 - EFI_ACPI_TABLE_VERSION_5_0.<BR>"
|
"BIT 5 - EFI_ACPI_TABLE_VERSION_5_0.<BR>"
|
||||||
|
|
||||||
|
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdNoACPIReclaimMemory_PROMPT #language en-US "ACPI Reclaim memory is not available."
|
||||||
|
|
||||||
|
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdNoACPIReclaimMemory_HELP #language en-US "Indicates whether ACPI Reclaim memory is not available\n"
|
||||||
|
"Default is FALSE that means ACPI Reclaim memory is available\n"
|
||||||
|
"If it is set to TRUE that means ACPI Reclaim memory is not available\n"
|
||||||
|
"For example ACPI Table protocol will use ACPI NVS memory instead of ACPI Reclaim memory"
|
||||||
|
|
||||||
|
|
||||||
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdHiiOsRuntimeSupport_PROMPT #language en-US "Enable export HII data and configuration to be used in OS runtime."
|
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdHiiOsRuntimeSupport_PROMPT #language en-US "Enable export HII data and configuration to be used in OS runtime."
|
||||||
|
|
||||||
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdHiiOsRuntimeSupport_HELP #language en-US "Indicates if HII data and configuration has been exported.<BR><BR>\n"
|
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdHiiOsRuntimeSupport_HELP #language en-US "Indicates if HII data and configuration has been exported.<BR><BR>\n"
|
||||||
|
|
|
@ -68,6 +68,7 @@
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId ## CONSUMES
|
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId ## CONSUMES
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision ## CONSUMES
|
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorRevision ## CONSUMES
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions ## CONSUMES
|
gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions ## CONSUMES
|
||||||
|
gEfiMdeModulePkgTokenSpaceGuid.PcdNoACPIReclaimMemory ## CONSUMES
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiAcpiTableProtocolGuid ## PRODUCES
|
gEfiAcpiTableProtocolGuid ## PRODUCES
|
||||||
|
|
|
@ -340,6 +340,7 @@ ReallocateAcpiTableBuffer (
|
||||||
EFI_ACPI_TABLE_INSTANCE TempPrivateData;
|
EFI_ACPI_TABLE_INSTANCE TempPrivateData;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT64 CurrentData;
|
UINT64 CurrentData;
|
||||||
|
EFI_MEMORY_TYPE AcpiAllocateMemoryType;
|
||||||
|
|
||||||
CopyMem (&TempPrivateData, AcpiTableInstance, sizeof (EFI_ACPI_TABLE_INSTANCE));
|
CopyMem (&TempPrivateData, AcpiTableInstance, sizeof (EFI_ACPI_TABLE_INSTANCE));
|
||||||
//
|
//
|
||||||
|
@ -359,6 +360,12 @@ ReallocateAcpiTableBuffer (
|
||||||
NewMaxTableNumber * sizeof (UINT32);
|
NewMaxTableNumber * sizeof (UINT32);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (PcdGetBool (PcdNoACPIReclaimMemory)) {
|
||||||
|
AcpiAllocateMemoryType = EfiACPIMemoryNVS;
|
||||||
|
} else {
|
||||||
|
AcpiAllocateMemoryType = EfiACPIReclaimMemory;
|
||||||
|
}
|
||||||
|
|
||||||
if (mAcpiTableAllocType != AllocateAnyPages) {
|
if (mAcpiTableAllocType != AllocateAnyPages) {
|
||||||
//
|
//
|
||||||
// Allocate memory in the lower 32 bit of address range for
|
// Allocate memory in the lower 32 bit of address range for
|
||||||
|
@ -372,13 +379,13 @@ ReallocateAcpiTableBuffer (
|
||||||
PageAddress = 0xFFFFFFFF;
|
PageAddress = 0xFFFFFFFF;
|
||||||
Status = gBS->AllocatePages (
|
Status = gBS->AllocatePages (
|
||||||
mAcpiTableAllocType,
|
mAcpiTableAllocType,
|
||||||
EfiACPIReclaimMemory,
|
AcpiAllocateMemoryType,
|
||||||
EFI_SIZE_TO_PAGES (TotalSize),
|
EFI_SIZE_TO_PAGES (TotalSize),
|
||||||
&PageAddress
|
&PageAddress
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
Status = gBS->AllocatePool (
|
Status = gBS->AllocatePool (
|
||||||
EfiACPIReclaimMemory,
|
AcpiAllocateMemoryType,
|
||||||
TotalSize,
|
TotalSize,
|
||||||
(VOID **)&Pointer
|
(VOID **)&Pointer
|
||||||
);
|
);
|
||||||
|
@ -512,6 +519,7 @@ AddTableToList (
|
||||||
EFI_PHYSICAL_ADDRESS AllocPhysAddress;
|
EFI_PHYSICAL_ADDRESS AllocPhysAddress;
|
||||||
UINT64 Buffer64;
|
UINT64 Buffer64;
|
||||||
BOOLEAN AddToRsdt;
|
BOOLEAN AddToRsdt;
|
||||||
|
EFI_MEMORY_TYPE AcpiAllocateMemoryType;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check for invalid input parameters
|
// Check for invalid input parameters
|
||||||
|
@ -550,6 +558,12 @@ AddTableToList (
|
||||||
CurrentTableList->TableSize = CurrentTableSize;
|
CurrentTableList->TableSize = CurrentTableSize;
|
||||||
CurrentTableList->PoolAllocation = FALSE;
|
CurrentTableList->PoolAllocation = FALSE;
|
||||||
|
|
||||||
|
if (PcdGetBool (PcdNoACPIReclaimMemory)) {
|
||||||
|
AcpiAllocateMemoryType = EfiACPIMemoryNVS;
|
||||||
|
} else {
|
||||||
|
AcpiAllocateMemoryType = EfiACPIReclaimMemory;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Allocation memory type depends on the type of the table
|
// Allocation memory type depends on the type of the table
|
||||||
//
|
//
|
||||||
|
@ -585,7 +599,7 @@ AddTableToList (
|
||||||
// such as AArch64 that allocate multiples of 64 KB
|
// such as AArch64 that allocate multiples of 64 KB
|
||||||
//
|
//
|
||||||
Status = gBS->AllocatePool (
|
Status = gBS->AllocatePool (
|
||||||
EfiACPIReclaimMemory,
|
AcpiAllocateMemoryType,
|
||||||
CurrentTableList->TableSize,
|
CurrentTableList->TableSize,
|
||||||
(VOID **)&CurrentTableList->Table
|
(VOID **)&CurrentTableList->Table
|
||||||
);
|
);
|
||||||
|
@ -596,7 +610,7 @@ AddTableToList (
|
||||||
//
|
//
|
||||||
Status = gBS->AllocatePages (
|
Status = gBS->AllocatePages (
|
||||||
mAcpiTableAllocType,
|
mAcpiTableAllocType,
|
||||||
EfiACPIReclaimMemory,
|
AcpiAllocateMemoryType,
|
||||||
EFI_SIZE_TO_PAGES (CurrentTableList->TableSize),
|
EFI_SIZE_TO_PAGES (CurrentTableList->TableSize),
|
||||||
&AllocPhysAddress
|
&AllocPhysAddress
|
||||||
);
|
);
|
||||||
|
@ -1944,6 +1958,7 @@ AcpiTableAcpiTableConstructor (
|
||||||
UINTN RsdpTableSize;
|
UINTN RsdpTableSize;
|
||||||
UINT8 *Pointer;
|
UINT8 *Pointer;
|
||||||
EFI_PHYSICAL_ADDRESS PageAddress;
|
EFI_PHYSICAL_ADDRESS PageAddress;
|
||||||
|
EFI_MEMORY_TYPE AcpiAllocateMemoryType;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check for invalid input parameters
|
// Check for invalid input parameters
|
||||||
|
@ -1978,17 +1993,23 @@ AcpiTableAcpiTableConstructor (
|
||||||
RsdpTableSize += sizeof (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER);
|
RsdpTableSize += sizeof (EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (PcdGetBool (PcdNoACPIReclaimMemory)) {
|
||||||
|
AcpiAllocateMemoryType = EfiACPIMemoryNVS;
|
||||||
|
} else {
|
||||||
|
AcpiAllocateMemoryType = EfiACPIReclaimMemory;
|
||||||
|
}
|
||||||
|
|
||||||
if (mAcpiTableAllocType != AllocateAnyPages) {
|
if (mAcpiTableAllocType != AllocateAnyPages) {
|
||||||
PageAddress = 0xFFFFFFFF;
|
PageAddress = 0xFFFFFFFF;
|
||||||
Status = gBS->AllocatePages (
|
Status = gBS->AllocatePages (
|
||||||
mAcpiTableAllocType,
|
mAcpiTableAllocType,
|
||||||
EfiACPIReclaimMemory,
|
AcpiAllocateMemoryType,
|
||||||
EFI_SIZE_TO_PAGES (RsdpTableSize),
|
EFI_SIZE_TO_PAGES (RsdpTableSize),
|
||||||
&PageAddress
|
&PageAddress
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
Status = gBS->AllocatePool (
|
Status = gBS->AllocatePool (
|
||||||
EfiACPIReclaimMemory,
|
AcpiAllocateMemoryType,
|
||||||
RsdpTableSize,
|
RsdpTableSize,
|
||||||
(VOID **)&Pointer
|
(VOID **)&Pointer
|
||||||
);
|
);
|
||||||
|
@ -2037,13 +2058,13 @@ AcpiTableAcpiTableConstructor (
|
||||||
PageAddress = 0xFFFFFFFF;
|
PageAddress = 0xFFFFFFFF;
|
||||||
Status = gBS->AllocatePages (
|
Status = gBS->AllocatePages (
|
||||||
mAcpiTableAllocType,
|
mAcpiTableAllocType,
|
||||||
EfiACPIReclaimMemory,
|
AcpiAllocateMemoryType,
|
||||||
EFI_SIZE_TO_PAGES (TotalSize),
|
EFI_SIZE_TO_PAGES (TotalSize),
|
||||||
&PageAddress
|
&PageAddress
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
Status = gBS->AllocatePool (
|
Status = gBS->AllocatePool (
|
||||||
EfiACPIReclaimMemory,
|
AcpiAllocateMemoryType,
|
||||||
TotalSize,
|
TotalSize,
|
||||||
(VOID **)&Pointer
|
(VOID **)&Pointer
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue