return EFI_INVALID_PARAMETER;\r
}\r
\r
+ /// The following fields are theoretically mandatory, but not supported\r
+ /// by some platforms.\r
+ /// - PerformanceLimitedRegister\r
+ /// - ReferencePerformanceCounterRegister\r
+ /// - DeliveredPerformanceCounterRegister\r
+ /// Warn if BIT0 in PcdDevelopmentPlatformRelaxations is set, otherwise\r
+ /// return an error.\r
+ if (IsNullGenericAddress (&CpcInfo->PerformanceLimitedRegister) ||\r
+ IsNullGenericAddress (&CpcInfo->ReferencePerformanceCounterRegister) ||\r
+ IsNullGenericAddress (&CpcInfo->DeliveredPerformanceCounterRegister))\r
+ {\r
+ if ((PcdGet64 (PcdDevelopmentPlatformRelaxations) & BIT0) != 0) {\r
+ DEBUG ((\r
+ DEBUG_WARN,\r
+ "Missing PerformanceLimited|ReferencePerformanceCounter|"\r
+ "DeliveredPerformanceCounter field in _CPC object\n"\r
+ ));\r
+ } else {\r
+ ASSERT (0);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ }\r
+\r
if ((IsNullGenericAddress (&CpcInfo->HighestPerformanceBuffer) &&\r
(CpcInfo->HighestPerformanceInteger == 0)) ||\r
(IsNullGenericAddress (&CpcInfo->NominalPerformanceBuffer) &&\r
(CpcInfo->LowestNonlinearPerformanceInteger == 0)) ||\r
(IsNullGenericAddress (&CpcInfo->LowestPerformanceBuffer) &&\r
(CpcInfo->LowestPerformanceInteger == 0)) ||\r
- IsNullGenericAddress (&CpcInfo->DesiredPerformanceRegister) ||\r
- IsNullGenericAddress (&CpcInfo->ReferencePerformanceCounterRegister) ||\r
- IsNullGenericAddress (&CpcInfo->DeliveredPerformanceCounterRegister) ||\r
- IsNullGenericAddress (&CpcInfo->PerformanceLimitedRegister))\r
+ IsNullGenericAddress (&CpcInfo->DesiredPerformanceRegister))\r
{\r
ASSERT (0);\r
return EFI_INVALID_PARAMETER;\r