MdeModulePkg/FirmwarePerformancePei:Add FPDT records for S3 phase
Add FPDT records into boot performance table for S3 phase 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
2001f84e8c
commit
2040e6c556
|
@ -5,7 +5,7 @@
|
||||||
This module register report status code listener to collect performance data
|
This module register report status code listener to collect performance data
|
||||||
for S3 Resume Performance Record on S3 resume boot path.
|
for S3 Resume Performance Record on S3 resume boot path.
|
||||||
|
|
||||||
Copyright (c) 2011 - 2017, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -19,8 +19,11 @@
|
||||||
#include <PiPei.h>
|
#include <PiPei.h>
|
||||||
|
|
||||||
#include <Ppi/ReportStatusCodeHandler.h>
|
#include <Ppi/ReportStatusCodeHandler.h>
|
||||||
|
#include <Ppi/ReadOnlyVariable2.h>
|
||||||
|
|
||||||
#include <Guid/FirmwarePerformance.h>
|
#include <Guid/FirmwarePerformance.h>
|
||||||
|
#include <Guid/Performance.h>
|
||||||
|
#include <Guid/ExtendedFirmwarePerformance.h>
|
||||||
|
|
||||||
#include <Library/PeiServicesLib.h>
|
#include <Library/PeiServicesLib.h>
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
|
@ -29,6 +32,7 @@
|
||||||
#include <Library/BaseMemoryLib.h>
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/LockBoxLib.h>
|
#include <Library/LockBoxLib.h>
|
||||||
#include <Library/PcdLib.h>
|
#include <Library/PcdLib.h>
|
||||||
|
#include <Library/HobLib.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Report status code listener for PEI. This is used to record the performance
|
Report status code listener for PEI. This is used to record the performance
|
||||||
|
@ -70,6 +74,13 @@ FpdtStatusCodeListenerPei (
|
||||||
UINT64 S3ResumeTotal;
|
UINT64 S3ResumeTotal;
|
||||||
EFI_ACPI_5_0_FPDT_S3_SUSPEND_RECORD S3SuspendRecord;
|
EFI_ACPI_5_0_FPDT_S3_SUSPEND_RECORD S3SuspendRecord;
|
||||||
EFI_ACPI_5_0_FPDT_S3_SUSPEND_RECORD *AcpiS3SuspendRecord;
|
EFI_ACPI_5_0_FPDT_S3_SUSPEND_RECORD *AcpiS3SuspendRecord;
|
||||||
|
EFI_PEI_READ_ONLY_VARIABLE2_PPI *VariableServices;
|
||||||
|
UINT8 *BootPerformanceTable;
|
||||||
|
FIRMWARE_PERFORMANCE_VARIABLE PerformanceVariable;
|
||||||
|
EFI_HOB_GUID_TYPE *GuidHob;
|
||||||
|
FPDT_PEI_EXT_PERF_HEADER *PeiPerformanceLogHeader;
|
||||||
|
UINT8 *FirmwarePerformanceData;
|
||||||
|
UINT8 *FirmwarePerformanceTablePtr;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check whether status code is what we are interested in.
|
// Check whether status code is what we are interested in.
|
||||||
|
@ -130,6 +141,52 @@ FpdtStatusCodeListenerPei (
|
||||||
DEBUG ((EFI_D_INFO, "FPDT: S3 Suspend Performance - SuspendStart = %ld\n", AcpiS3SuspendRecord->SuspendStart));
|
DEBUG ((EFI_D_INFO, "FPDT: S3 Suspend Performance - SuspendStart = %ld\n", AcpiS3SuspendRecord->SuspendStart));
|
||||||
DEBUG ((EFI_D_INFO, "FPDT: S3 Suspend Performance - SuspendEnd = %ld\n", AcpiS3SuspendRecord->SuspendEnd));
|
DEBUG ((EFI_D_INFO, "FPDT: S3 Suspend Performance - SuspendEnd = %ld\n", AcpiS3SuspendRecord->SuspendEnd));
|
||||||
|
|
||||||
|
Status = PeiServicesLocatePpi (
|
||||||
|
&gEfiPeiReadOnlyVariable2PpiGuid,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
(VOID **) &VariableServices
|
||||||
|
);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Update S3 boot records into the basic boot performance table.
|
||||||
|
//
|
||||||
|
VarSize = sizeof (PerformanceVariable);
|
||||||
|
Status = VariableServices->GetVariable (
|
||||||
|
VariableServices,
|
||||||
|
EFI_FIRMWARE_PERFORMANCE_VARIABLE_NAME,
|
||||||
|
&gEfiFirmwarePerformanceGuid,
|
||||||
|
NULL,
|
||||||
|
&VarSize,
|
||||||
|
&PerformanceVariable
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
BootPerformanceTable = (UINT8*) (UINTN) PerformanceVariable.BootPerformanceTablePointer;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Dump PEI boot records
|
||||||
|
//
|
||||||
|
FirmwarePerformanceTablePtr = (BootPerformanceTable + sizeof (BOOT_PERFORMANCE_TABLE));
|
||||||
|
GuidHob = GetFirstGuidHob (&gEdkiiFpdtExtendedFirmwarePerformanceGuid);
|
||||||
|
while (GuidHob != NULL) {
|
||||||
|
FirmwarePerformanceData = GET_GUID_HOB_DATA (GuidHob);
|
||||||
|
PeiPerformanceLogHeader = (FPDT_PEI_EXT_PERF_HEADER *) FirmwarePerformanceData;
|
||||||
|
|
||||||
|
CopyMem (FirmwarePerformanceTablePtr, FirmwarePerformanceData + sizeof (FPDT_PEI_EXT_PERF_HEADER), (UINTN)(PeiPerformanceLogHeader->SizeOfAllEntries));
|
||||||
|
|
||||||
|
GuidHob = GetNextGuidHob (&gEdkiiFpdtExtendedFirmwarePerformanceGuid, GET_NEXT_HOB (GuidHob));
|
||||||
|
|
||||||
|
FirmwarePerformanceTablePtr += (UINTN)(PeiPerformanceLogHeader->SizeOfAllEntries);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Update Table length.
|
||||||
|
//
|
||||||
|
((BOOT_PERFORMANCE_TABLE *) BootPerformanceTable)->Header.Length = (UINT32)((UINTN)FirmwarePerformanceTablePtr - (UINTN)BootPerformanceTable);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
# This module register report status code listener to collect performance data
|
# This module register report status code listener to collect performance data
|
||||||
# for S3 Resume Performance Record on S3 resume boot path.
|
# for S3 Resume Performance Record on S3 resume boot path.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2011 - 2017, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# are licensed and made available under the terms and conditions of the BSD License
|
||||||
# which accompanies this distribution. The full text of the license may be found at
|
# which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -48,14 +48,17 @@
|
||||||
BaseMemoryLib
|
BaseMemoryLib
|
||||||
LockBoxLib
|
LockBoxLib
|
||||||
PcdLib
|
PcdLib
|
||||||
|
HobLib
|
||||||
|
|
||||||
[Ppis]
|
[Ppis]
|
||||||
gEfiPeiRscHandlerPpiGuid ## CONSUMES
|
gEfiPeiRscHandlerPpiGuid ## CONSUMES
|
||||||
|
gEfiPeiReadOnlyVariable2PpiGuid ## CONSUMES
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
## SOMETIMES_CONSUMES ## UNDEFINED # RestoreLockBox
|
## SOMETIMES_CONSUMES ## UNDEFINED # RestoreLockBox
|
||||||
gEfiFirmwarePerformanceGuid
|
gEfiFirmwarePerformanceGuid
|
||||||
gFirmwarePerformanceS3PointerGuid ## SOMETIMES_CONSUMES ## UNDEFINED # RestoreLockBox
|
gFirmwarePerformanceS3PointerGuid ## SOMETIMES_CONSUMES ## UNDEFINED # RestoreLockBox
|
||||||
|
gEdkiiFpdtExtendedFirmwarePerformanceGuid ## SOMETIMES_CONSUMES ## HOB
|
||||||
|
|
||||||
[FeaturePcd]
|
[FeaturePcd]
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwarePerformanceDataTableS3Support ## CONSUMES
|
gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwarePerformanceDataTableS3Support ## CONSUMES
|
||||||
|
|
Loading…
Reference in New Issue