mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/FirmwarePerfSmm:Enhance for new pref infrastructure
V3: a. Remove unused definitions b. Get records size form the records buffer when getting size action is triggered. V2: Update FirmwarePerformanceSmm to receive the address of performance records instead of records content. Receive buffer address of Boot performance records which are reported by SmmCorePerformanceLib. Cc: Liming Gao <liming.gao@intel.com> Cc: Star Zeng <star.zeng@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
parent
9e62c23017
commit
718a937ed9
|
@ -40,13 +40,12 @@
|
||||||
#include <Library/SynchronizationLib.h>
|
#include <Library/SynchronizationLib.h>
|
||||||
#include <Library/SmmMemLib.h>
|
#include <Library/SmmMemLib.h>
|
||||||
|
|
||||||
#define EXTENSION_RECORD_SIZE 0x1000
|
SMM_BOOT_PERFORMANCE_TABLE *mSmmBootPerformanceTable = NULL;
|
||||||
|
|
||||||
EFI_SMM_RSC_HANDLER_PROTOCOL *mRscHandlerProtocol = NULL;
|
EFI_SMM_RSC_HANDLER_PROTOCOL *mRscHandlerProtocol = NULL;
|
||||||
UINT64 mSuspendStartTime = 0;
|
UINT64 mSuspendStartTime = 0;
|
||||||
BOOLEAN mS3SuspendLockBoxSaved = FALSE;
|
BOOLEAN mS3SuspendLockBoxSaved = FALSE;
|
||||||
UINT32 mBootRecordSize = 0;
|
UINT32 mBootRecordSize = 0;
|
||||||
UINT32 mBootRecordMaxSize = 0;
|
|
||||||
UINT8 *mBootRecordBuffer = NULL;
|
UINT8 *mBootRecordBuffer = NULL;
|
||||||
|
|
||||||
SPIN_LOCK mSmmFpdtLock;
|
SPIN_LOCK mSmmFpdtLock;
|
||||||
|
@ -84,7 +83,6 @@ FpdtStatusCodeListenerSmm (
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT64 CurrentTime;
|
UINT64 CurrentTime;
|
||||||
EFI_ACPI_5_0_FPDT_S3_SUSPEND_RECORD S3SuspendRecord;
|
EFI_ACPI_5_0_FPDT_S3_SUSPEND_RECORD S3SuspendRecord;
|
||||||
UINT8 *NewRecordBuffer;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check whether status code is what we are interested in.
|
// Check whether status code is what we are interested in.
|
||||||
|
@ -96,31 +94,13 @@ FpdtStatusCodeListenerSmm (
|
||||||
//
|
//
|
||||||
// Collect one or more Boot records in boot time
|
// Collect one or more Boot records in boot time
|
||||||
//
|
//
|
||||||
if (Data != NULL && CompareGuid (&Data->Type, &gEfiFirmwarePerformanceGuid)) {
|
if (Data != NULL && CompareGuid (&Data->Type, &gEdkiiFpdtExtendedFirmwarePerformanceGuid)) {
|
||||||
AcquireSpinLock (&mSmmFpdtLock);
|
AcquireSpinLock (&mSmmFpdtLock);
|
||||||
|
|
||||||
if (mBootRecordSize + Data->Size > mBootRecordMaxSize) {
|
|
||||||
//
|
//
|
||||||
// Try to allocate big SMRAM data to store Boot record.
|
// Get the boot performance data.
|
||||||
//
|
//
|
||||||
if (mSmramIsOutOfResource) {
|
CopyMem (&mSmmBootPerformanceTable, Data + 1, Data->Size);
|
||||||
ReleaseSpinLock (&mSmmFpdtLock);
|
mBootRecordBuffer = ((UINT8 *) (mSmmBootPerformanceTable)) + sizeof (SMM_BOOT_PERFORMANCE_TABLE);
|
||||||
return EFI_OUT_OF_RESOURCES;
|
|
||||||
}
|
|
||||||
NewRecordBuffer = ReallocatePool (mBootRecordSize, mBootRecordSize + Data->Size + EXTENSION_RECORD_SIZE, mBootRecordBuffer);
|
|
||||||
if (NewRecordBuffer == NULL) {
|
|
||||||
ReleaseSpinLock (&mSmmFpdtLock);
|
|
||||||
mSmramIsOutOfResource = TRUE;
|
|
||||||
return EFI_OUT_OF_RESOURCES;
|
|
||||||
}
|
|
||||||
mBootRecordBuffer = NewRecordBuffer;
|
|
||||||
mBootRecordMaxSize = mBootRecordSize + Data->Size + EXTENSION_RECORD_SIZE;
|
|
||||||
}
|
|
||||||
//
|
|
||||||
// Save boot record into the temp memory space.
|
|
||||||
//
|
|
||||||
CopyMem (mBootRecordBuffer + mBootRecordSize, Data + 1, Data->Size);
|
|
||||||
mBootRecordSize += Data->Size;
|
|
||||||
|
|
||||||
ReleaseSpinLock (&mSmmFpdtLock);
|
ReleaseSpinLock (&mSmmFpdtLock);
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
|
@ -239,6 +219,9 @@ FpdtSmiHandler (
|
||||||
|
|
||||||
switch (SmmCommData->Function) {
|
switch (SmmCommData->Function) {
|
||||||
case SMM_FPDT_FUNCTION_GET_BOOT_RECORD_SIZE :
|
case SMM_FPDT_FUNCTION_GET_BOOT_RECORD_SIZE :
|
||||||
|
if (mSmmBootPerformanceTable != NULL) {
|
||||||
|
mBootRecordSize = mSmmBootPerformanceTable->Header.Length - sizeof (SMM_BOOT_PERFORMANCE_TABLE);
|
||||||
|
}
|
||||||
SmmCommData->BootRecordSize = mBootRecordSize;
|
SmmCommData->BootRecordSize = mBootRecordSize;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
## PRODUCES ## UNDEFINED # SmiHandlerRegister
|
## PRODUCES ## UNDEFINED # SmiHandlerRegister
|
||||||
## SOMETIMES_CONSUMES ## UNDEFINED # StatusCode Data
|
## SOMETIMES_CONSUMES ## UNDEFINED # StatusCode Data
|
||||||
gEfiFirmwarePerformanceGuid
|
gEfiFirmwarePerformanceGuid
|
||||||
|
gEdkiiFpdtExtendedFirmwarePerformanceGuid ## SOMETIMES_PRODUCES ## UNDEFINED # StatusCode Data
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeS3SuspendStart ## CONSUMES
|
gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeS3SuspendStart ## CONSUMES
|
||||||
|
|
Loading…
Reference in New Issue