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:
Dandan Bi 2018-01-30 11:07:36 +08:00 committed by Liming Gao
parent 9e62c23017
commit 718a937ed9
2 changed files with 10 additions and 26 deletions

View File

@ -40,13 +40,12 @@
#include <Library/SynchronizationLib.h>
#include <Library/SmmMemLib.h>
#define EXTENSION_RECORD_SIZE 0x1000
SMM_BOOT_PERFORMANCE_TABLE *mSmmBootPerformanceTable = NULL;
EFI_SMM_RSC_HANDLER_PROTOCOL *mRscHandlerProtocol = NULL;
UINT64 mSuspendStartTime = 0;
BOOLEAN mS3SuspendLockBoxSaved = FALSE;
UINT32 mBootRecordSize = 0;
UINT32 mBootRecordMaxSize = 0;
UINT8 *mBootRecordBuffer = NULL;
SPIN_LOCK mSmmFpdtLock;
@ -84,7 +83,6 @@ FpdtStatusCodeListenerSmm (
EFI_STATUS Status;
UINT64 CurrentTime;
EFI_ACPI_5_0_FPDT_S3_SUSPEND_RECORD S3SuspendRecord;
UINT8 *NewRecordBuffer;
//
// Check whether status code is what we are interested in.
@ -96,32 +94,14 @@ FpdtStatusCodeListenerSmm (
//
// 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);
if (mBootRecordSize + Data->Size > mBootRecordMaxSize) {
//
// Try to allocate big SMRAM data to store Boot record.
//
if (mSmramIsOutOfResource) {
ReleaseSpinLock (&mSmmFpdtLock);
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.
// Get the boot performance data.
//
CopyMem (mBootRecordBuffer + mBootRecordSize, Data + 1, Data->Size);
mBootRecordSize += Data->Size;
CopyMem (&mSmmBootPerformanceTable, Data + 1, Data->Size);
mBootRecordBuffer = ((UINT8 *) (mSmmBootPerformanceTable)) + sizeof (SMM_BOOT_PERFORMANCE_TABLE);
ReleaseSpinLock (&mSmmFpdtLock);
return EFI_SUCCESS;
}
@ -239,6 +219,9 @@ FpdtSmiHandler (
switch (SmmCommData->Function) {
case SMM_FPDT_FUNCTION_GET_BOOT_RECORD_SIZE :
if (mSmmBootPerformanceTable != NULL) {
mBootRecordSize = mSmmBootPerformanceTable->Header.Length - sizeof (SMM_BOOT_PERFORMANCE_TABLE);
}
SmmCommData->BootRecordSize = mBootRecordSize;
break;

View File

@ -60,6 +60,7 @@
## PRODUCES ## UNDEFINED # SmiHandlerRegister
## SOMETIMES_CONSUMES ## UNDEFINED # StatusCode Data
gEfiFirmwarePerformanceGuid
gEdkiiFpdtExtendedFirmwarePerformanceGuid ## SOMETIMES_PRODUCES ## UNDEFINED # StatusCode Data
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdProgressCodeS3SuspendStart ## CONSUMES