From e981bb5ceeae8673c94ea32a9d043d0a470fa61b Mon Sep 17 00:00:00 2001 From: vit9696 Date: Tue, 25 Feb 2020 04:37:27 +0300 Subject: [PATCH] OcCpuLib: Support fallback frequency --- Include/Library/OcCpuLib.h | 7 ++++++- Library/OcCpuLib/FrequencyDetect.c | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Include/Library/OcCpuLib.h b/Include/Library/OcCpuLib.h index ab4e3681..3937ec25 100755 --- a/Include/Library/OcCpuLib.h +++ b/Include/Library/OcCpuLib.h @@ -18,6 +18,11 @@ #include #include +/** + Assumed CPU frequency when it cannot be detected. +**/ +#define OC_FALLBACK_CPU_FREQUENCY 1000000000 + typedef struct { // // Note, Vendor and BrandString are reordered for proper alignment. @@ -182,7 +187,7 @@ OcCpuGetGeneration ( /** Obtain CPU's invariant TSC frequency. - @retval CPU's TSC frequency. + @retval CPU's TSC frequency or OC_FALLBACK_CPU_FREQUENCY. **/ UINT64 OcGetTSCFrequency ( diff --git a/Library/OcCpuLib/FrequencyDetect.c b/Library/OcCpuLib/FrequencyDetect.c index 75db8130..44cdfd89 100644 --- a/Library/OcCpuLib/FrequencyDetect.c +++ b/Library/OcCpuLib/FrequencyDetect.c @@ -484,6 +484,12 @@ OcGetTSCFrequency ( CPUFrequency = InternalCalculateVMTFrequency (NULL, NULL); if (CPUFrequency == 0) { CPUFrequency = InternalCalculateTSCFromPMTimer (FALSE); + if (CPUFrequency == 0) { + // + // Assume at least some frequency, so that we always work. + // + CPUFrequency = OC_FALLBACK_CPU_FREQUENCY; + } } } //