mirror of https://github.com/acidanthera/audk.git
Store and get TSC Frequency with system configuration Table.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11572 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
0ec4f1cb6f
commit
a176509a7f
|
@ -31,21 +31,22 @@
|
||||||
#include <PiDxe.h>
|
#include <PiDxe.h>
|
||||||
#include <Ich/GenericIch.h>
|
#include <Ich/GenericIch.h>
|
||||||
|
|
||||||
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
#include <Library/TimerLib.h>
|
#include <Library/TimerLib.h>
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
#include <Library/IoLib.h>
|
#include <Library/IoLib.h>
|
||||||
#include <Library/PciLib.h>
|
#include <Library/PciLib.h>
|
||||||
#include <Library/PcdLib.h>
|
#include <Library/PcdLib.h>
|
||||||
#include <Library/HobLib.h>
|
#include <Library/UefiLib.h>
|
||||||
|
|
||||||
#include <Guid/TscFrequency.h>
|
#include <Guid/TscFrequency.h>
|
||||||
|
|
||||||
UINT64 mTscFrequency;
|
UINT64 mTscFrequency;
|
||||||
|
|
||||||
/** The constructor function determines the actual TSC frequency.
|
/** The constructor function determines the actual TSC frequency.
|
||||||
|
|
||||||
First, Get TSC frequency from TSC frequency GUID HOB,
|
First, Get TSC frequency from system configuration table with TSC frequency GUID,
|
||||||
If the HOB is not found, calculate it.
|
if the table is not found, install it.
|
||||||
|
|
||||||
The TSC counting frequency is determined by comparing how far it counts
|
The TSC counting frequency is determined by comparing how far it counts
|
||||||
during a 1ms period as determined by the ACPI timer. The ACPI timer is
|
during a 1ms period as determined by the ACPI timer. The ACPI timer is
|
||||||
|
@ -70,25 +71,24 @@ DxeTscTimerLibConstructor (
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_HOB_GUID_TYPE *GuidHob;
|
EFI_STATUS Status;
|
||||||
VOID *DataInHob;
|
UINT64 *TscFrequency;
|
||||||
UINT64 StartTSC;
|
UINT64 StartTSC;
|
||||||
UINT64 EndTSC;
|
UINT64 EndTSC;
|
||||||
UINT32 TimerAddr;
|
UINT32 TimerAddr;
|
||||||
UINT32 Ticks;
|
UINT32 Ticks;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get TSC frequency from TSC frequency GUID HOB.
|
// Get TSC frequency from system configuration table with TSC frequency GUID.
|
||||||
//
|
//
|
||||||
GuidHob = GetFirstGuidHob (&gEfiTscFrequencyGuid);
|
Status = EfiGetSystemConfigurationTable (&gEfiTscFrequencyGuid, (VOID **) &TscFrequency);
|
||||||
if (GuidHob != NULL) {
|
if (Status == EFI_SUCCESS) {
|
||||||
DataInHob = GET_GUID_HOB_DATA (GuidHob);
|
mTscFrequency = *TscFrequency;
|
||||||
mTscFrequency = * (UINT64 *) DataInHob;
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// TSC frequency GUID HOB is not found, calculate it.
|
// TSC frequency GUID system configuration table is not found, install it.
|
||||||
//
|
//
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -122,8 +122,10 @@ DxeTscTimerLibConstructor (
|
||||||
1000 // Number of ms in a second
|
1000 // Number of ms in a second
|
||||||
);
|
);
|
||||||
//
|
//
|
||||||
// mTscFrequency is now equal to the number of TSC counts per second
|
// mTscFrequency is now equal to the number of TSC counts per second, install system configuration table for it.
|
||||||
//
|
//
|
||||||
|
gBS->InstallConfigurationTable (&gEfiTscFrequencyGuid, &mTscFrequency);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,14 +43,15 @@
|
||||||
|
|
||||||
|
|
||||||
[LibraryClasses]
|
[LibraryClasses]
|
||||||
|
UefiBootServicesTableLib
|
||||||
PcdLib
|
PcdLib
|
||||||
PciLib
|
PciLib
|
||||||
IoLib
|
IoLib
|
||||||
BaseLib
|
BaseLib
|
||||||
HobLib
|
UefiLib
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiTscFrequencyGuid ## SOMETIMES_CONSUMES ## Hob
|
gEfiTscFrequencyGuid ## CONSUMES ## System Configuration Table
|
||||||
|
|
||||||
[Pcd.common]
|
[Pcd.common]
|
||||||
gPerformancePkgTokenSpaceGuid.PcdPerfPkgAcpiIoPortBaseAddress
|
gPerformancePkgTokenSpaceGuid.PcdPerfPkgAcpiIoPortBaseAddress
|
||||||
|
|
Loading…
Reference in New Issue