DynamicTablesPkg: Introduce ObjectId to validate CmObject Parser Array

Add ObjectId to CM_OBJ_PARSER_ARRAY so that the code can validate
the entries in the Cm object parser array. Also introduce helper
macros to populate the Cm Object Parser Arrays.

Cc: Pierre Gondois <Pierre.Gondois@arm.com>
Cc: Yeo Reum Yun <YeoReum.Yun@arm.com>
Cc: AbdulLateef Attar <AbdulLateef.Attar@amd.com>
Cc: Jeshua Smith <jeshuas@nvidia.com>
Cc: Jeff Brasen <jbrasen@nvidia.com>
Cc: Girish Mahadevan <gmahadevan@nvidia.com>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>
Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
Reviewed-by: Sunil V L <sunilvl@ventanamicro.com>
This commit is contained in:
Sami Mujawar 2024-03-07 14:05:40 +00:00 committed by mergify[bot]
parent 991b70c0da
commit cb3c2362cd
2 changed files with 75 additions and 105 deletions

View File

@ -670,103 +670,58 @@ STATIC CONST CM_OBJ_PARSER CmArmPsdInfoParser[] = {
/** A parser for Arm namespace objects.
*/
STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = {
{ "EArmObjReserved", NULL, 0 },
{ "EArmObjBootArchInfo", CmArmBootArchInfoParser,
ARRAY_SIZE (CmArmBootArchInfoParser) },
{ "EArmObjCpuInfo", NULL, 0 },
{ "EArmObjPowerManagementProfileInfo", CmArmPowerManagementProfileInfoParser,
ARRAY_SIZE (CmArmPowerManagementProfileInfoParser) },
{ "EArmObjGicCInfo", CmArmGicCInfoParser, ARRAY_SIZE (CmArmGicCInfoParser) },
{ "EArmObjGicDInfo", CmArmGicDInfoParser, ARRAY_SIZE (CmArmGicDInfoParser) },
{ "EArmObjGicMsiFrameInfo", CmArmGicMsiFrameInfoParser,
ARRAY_SIZE (CmArmGicMsiFrameInfoParser) },
{ "EArmObjGicRedistributorInfo", CmArmGicRedistInfoParser,
ARRAY_SIZE (CmArmGicRedistInfoParser) },
{ "EArmObjGicItsInfo", CmArmGicItsInfoParser,
ARRAY_SIZE (CmArmGicItsInfoParser) },
{ "EArmObjSerialConsolePortInfo", CmArmSerialPortInfoParser,
ARRAY_SIZE (CmArmSerialPortInfoParser) },
{ "EArmObjSerialDebugPortInfo", CmArmSerialPortInfoParser,
ARRAY_SIZE (CmArmSerialPortInfoParser) },
{ "EArmObjGenericTimerInfo", CmArmGenericTimerInfoParser,
ARRAY_SIZE (CmArmGenericTimerInfoParser) },
{ "EArmObjPlatformGTBlockInfo", CmArmGTBlockInfoParser,
ARRAY_SIZE (CmArmGTBlockInfoParser) },
{ "EArmObjGTBlockTimerFrameInfo", CmArmGTBlockTimerFrameInfoParser,
ARRAY_SIZE (CmArmGTBlockTimerFrameInfoParser) },
{ "EArmObjPlatformGenericWatchdogInfo", CmArmGenericWatchdogInfoParser,
ARRAY_SIZE (CmArmGenericWatchdogInfoParser) },
{ "EArmObjPciConfigSpaceInfo", CmArmPciConfigSpaceInfoParser,
ARRAY_SIZE (CmArmPciConfigSpaceInfoParser) },
{ "EArmObjHypervisorVendorIdentity", CmArmHypervisorVendorIdParser,
ARRAY_SIZE (CmArmHypervisorVendorIdParser) },
{ "EArmObjFixedFeatureFlags", CmArmFixedFeatureFlagsParser,
ARRAY_SIZE (CmArmFixedFeatureFlagsParser) },
{ "EArmObjItsGroup", CmArmItsGroupNodeParser,
ARRAY_SIZE (CmArmItsGroupNodeParser) },
{ "EArmObjNamedComponent", CmArmNamedComponentNodeParser,
ARRAY_SIZE (CmArmNamedComponentNodeParser) },
{ "EArmObjRootComplex", CmArmRootComplexNodeParser,
ARRAY_SIZE (CmArmRootComplexNodeParser) },
{ "EArmObjSmmuV1SmmuV2", CmArmSmmuV1SmmuV2NodeParser,
ARRAY_SIZE (CmArmSmmuV1SmmuV2NodeParser) },
{ "EArmObjSmmuV3", CmArmSmmuV3NodeParser,
ARRAY_SIZE (CmArmSmmuV3NodeParser) },
{ "EArmObjPmcg", CmArmPmcgNodeParser, ARRAY_SIZE (CmArmPmcgNodeParser) },
{ "EArmObjGicItsIdentifierArray", CmArmGicItsIdentifierParser,
ARRAY_SIZE (CmArmGicItsIdentifierParser) },
{ "EArmObjIdMappingArray", CmArmIdMappingParser,
ARRAY_SIZE (CmArmIdMappingParser) },
{ "EArmObjSmmuInterruptArray", CmArmGenericInterruptParser,
ARRAY_SIZE (CmArmGenericInterruptParser) },
{ "EArmObjProcHierarchyInfo", CmArmProcHierarchyInfoParser,
ARRAY_SIZE (CmArmProcHierarchyInfoParser) },
{ "EArmObjCacheInfo", CmArmCacheInfoParser,
ARRAY_SIZE (CmArmCacheInfoParser) },
{ "EArmObjReserved29", NULL, 0 },
{ "EArmObjCmRef", CmArmObjRefParser, ARRAY_SIZE (CmArmObjRefParser) },
{ "EArmObjMemoryAffinityInfo", CmArmMemoryAffinityInfoParser,
ARRAY_SIZE (CmArmMemoryAffinityInfoParser) },
{ "EArmObjDeviceHandleAcpi", CmArmDeviceHandleAcpiParser,
ARRAY_SIZE (CmArmDeviceHandleAcpiParser) },
{ "EArmObjDeviceHandlePci", CmArmDeviceHandlePciParser,
ARRAY_SIZE (CmArmDeviceHandlePciParser) },
{ "EArmObjGenericInitiatorAffinityInfo",
CmArmGenericInitiatorAffinityInfoParser,
ARRAY_SIZE (CmArmGenericInitiatorAffinityInfoParser) },
{ "EArmObjSerialPortInfo", CmArmSerialPortInfoParser,
ARRAY_SIZE (CmArmSerialPortInfoParser) },
{ "EArmObjCmn600Info", CmArmCmn600InfoParser,
ARRAY_SIZE (CmArmCmn600InfoParser) },
{ "EArmObjLpiInfo", CmArmLpiInfoParser,
ARRAY_SIZE (CmArmLpiInfoParser) },
{ "EArmObjPciAddressMapInfo", CmArmPciAddressMapInfoParser,
ARRAY_SIZE (CmArmPciAddressMapInfoParser) },
{ "EArmObjPciInterruptMapInfo", CmPciInterruptMapInfoParser,
ARRAY_SIZE (CmPciInterruptMapInfoParser) },
{ "EArmObjRmr", CmArmRmrInfoParser,
ARRAY_SIZE (CmArmRmrInfoParser) },
{ "EArmObjMemoryRangeDescriptor", CmArmMemoryRangeDescriptorInfoParser,
ARRAY_SIZE (CmArmMemoryRangeDescriptorInfoParser) },
{ "EArmObjCpcInfo", CmArmCpcInfoParser,
ARRAY_SIZE (CmArmCpcInfoParser) },
{ "EArmObjPccSubspaceType0Info", CmArmPccSubspaceType0InfoParser,
ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },
{ "EArmObjPccSubspaceType1Info", CmArmPccSubspaceType1InfoParser,
ARRAY_SIZE (CmArmPccSubspaceType1InfoParser) },
{ "EArmObjPccSubspaceType2Info", CmArmPccSubspaceType2InfoParser,
ARRAY_SIZE (CmArmPccSubspaceType2InfoParser) },
{ "EArmObjPccSubspaceType3Info", CmArmPccSubspaceType34InfoParser,
ARRAY_SIZE (CmArmPccSubspaceType34InfoParser) },
{ "EArmObjPccSubspaceType4Info", CmArmPccSubspaceType34InfoParser,
ARRAY_SIZE (CmArmPccSubspaceType34InfoParser) },
{ "EArmObjPccSubspaceType5Info", CmArmPccSubspaceType5InfoParser,
ARRAY_SIZE (CmArmPccSubspaceType5InfoParser) },
{ "EArmObjEtInfo", CmArmEtInfo,
ARRAY_SIZE (CmArmEtInfo) },
{ "EArmObjPsdInfo", CmArmPsdInfoParser,
ARRAY_SIZE (CmArmPsdInfoParser) },
{ "EArmObjMax", NULL, 0 },
CM_PARSER_ADD_OBJECT_RESERVED (EArmObjReserved),
CM_PARSER_ADD_OBJECT (EArmObjBootArchInfo, CmArmBootArchInfoParser),
CM_PARSER_ADD_OBJECT_RESERVED (EArmObjCpuInfo),
CM_PARSER_ADD_OBJECT (EArmObjPowerManagementProfileInfo, CmArmPowerManagementProfileInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjGicCInfo, CmArmGicCInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjGicDInfo, CmArmGicDInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjGicMsiFrameInfo, CmArmGicMsiFrameInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjGicRedistributorInfo, CmArmGicRedistInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjGicItsInfo, CmArmGicItsInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjSerialConsolePortInfo, CmArmSerialPortInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjSerialDebugPortInfo, CmArmSerialPortInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjGenericTimerInfo, CmArmGenericTimerInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjPlatformGTBlockInfo, CmArmGTBlockInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjGTBlockTimerFrameInfo, CmArmGTBlockTimerFrameInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjPlatformGenericWatchdogInfo, CmArmGenericWatchdogInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjPciConfigSpaceInfo, CmArmPciConfigSpaceInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjHypervisorVendorIdentity, CmArmHypervisorVendorIdParser),
CM_PARSER_ADD_OBJECT (EArmObjFixedFeatureFlags, CmArmFixedFeatureFlagsParser),
CM_PARSER_ADD_OBJECT (EArmObjItsGroup, CmArmItsGroupNodeParser),
CM_PARSER_ADD_OBJECT (EArmObjNamedComponent, CmArmNamedComponentNodeParser),
CM_PARSER_ADD_OBJECT (EArmObjRootComplex, CmArmRootComplexNodeParser),
CM_PARSER_ADD_OBJECT (EArmObjSmmuV1SmmuV2, CmArmSmmuV1SmmuV2NodeParser),
CM_PARSER_ADD_OBJECT (EArmObjSmmuV3, CmArmSmmuV3NodeParser),
CM_PARSER_ADD_OBJECT (EArmObjPmcg, CmArmPmcgNodeParser),
CM_PARSER_ADD_OBJECT (EArmObjGicItsIdentifierArray, CmArmGicItsIdentifierParser),
CM_PARSER_ADD_OBJECT (EArmObjIdMappingArray, CmArmIdMappingParser),
CM_PARSER_ADD_OBJECT (EArmObjSmmuInterruptArray, CmArmGenericInterruptParser),
CM_PARSER_ADD_OBJECT (EArmObjProcHierarchyInfo, CmArmProcHierarchyInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjCacheInfo, CmArmCacheInfoParser),
CM_PARSER_ADD_OBJECT_RESERVED (EArmObjReserved29),
CM_PARSER_ADD_OBJECT (EArmObjCmRef, CmArmObjRefParser),
CM_PARSER_ADD_OBJECT (EArmObjMemoryAffinityInfo, CmArmMemoryAffinityInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjDeviceHandleAcpi, CmArmDeviceHandleAcpiParser),
CM_PARSER_ADD_OBJECT (EArmObjDeviceHandlePci, CmArmDeviceHandlePciParser),
CM_PARSER_ADD_OBJECT (EArmObjGenericInitiatorAffinityInfo,CmArmGenericInitiatorAffinityInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjSerialPortInfo, CmArmSerialPortInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser),
CM_PARSER_ADD_OBJECT (EArmObjLpiInfo, CmArmLpiInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjPciAddressMapInfo, CmArmPciAddressMapInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjPciInterruptMapInfo, CmPciInterruptMapInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjCpcInfo, CmArmCpcInfoParser),
CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType0Info, CmArmPccSubspaceType0InfoParser),
CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType1Info, CmArmPccSubspaceType1InfoParser),
CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType2Info, CmArmPccSubspaceType2InfoParser),
CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType3Info, CmArmPccSubspaceType34InfoParser),
CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType4Info, CmArmPccSubspaceType34InfoParser),
CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType5Info, CmArmPccSubspaceType5InfoParser),
CM_PARSER_ADD_OBJECT (EArmObjEtInfo, CmArmEtInfo),
CM_PARSER_ADD_OBJECT (EArmObjPsdInfo, CmArmPsdInfoParser),
CM_PARSER_ADD_OBJECT_RESERVED (EArmObjMax)
};
/** A parser for EStdObjCfgMgrInfo.
@ -798,13 +753,10 @@ STATIC CONST CM_OBJ_PARSER StdObjSmbiosTableInfoParser[] = {
/** A parser for Standard namespace objects.
*/
STATIC CONST CM_OBJ_PARSER_ARRAY StdNamespaceObjectParser[] = {
{ "EStdObjCfgMgrInfo", StdObjCfgMgrInfoParser,
ARRAY_SIZE (StdObjCfgMgrInfoParser) },
{ "EStdObjAcpiTableList", StdObjAcpiTableInfoParser,
ARRAY_SIZE (StdObjAcpiTableInfoParser) },
{ "EStdObjSmbiosTableList", StdObjSmbiosTableInfoParser,
ARRAY_SIZE (StdObjSmbiosTableInfoParser) },
{ "EStdObjMax", NULL, 0}
CM_PARSER_ADD_OBJECT (EStdObjCfgMgrInfo, StdObjCfgMgrInfoParser),
CM_PARSER_ADD_OBJECT (EStdObjAcpiTableList, StdObjAcpiTableInfoParser),
CM_PARSER_ADD_OBJECT (EStdObjSmbiosTableList, StdObjSmbiosTableInfoParser),
CM_PARSER_ADD_OBJECT_RESERVED (EStdObjMax)
};
/** Print string data.
@ -975,7 +927,7 @@ PrintCmObjDesc (
*RemainingSize -= Parser[Index].Length;
if (*RemainingSize < 0) {
DEBUG ((
DEBUG_INFO,
DEBUG_ERROR,
"\nERROR: %a: Buffer overrun\n",
Parser[Index].NameStr
));
@ -1118,6 +1070,9 @@ ParseCmObjDesc (
ObjIndex + 1,
ObjectCount
));
ASSERT (ObjId == ParserArray->ObjectId);
if (ParserArray->Parser == NULL) {
DEBUG ((DEBUG_ERROR, "Parser not implemented\n"));
RemainingSize = 0;

View File

@ -11,6 +11,18 @@
#define OUTPUT_FIELD_COLUMN_WIDTH 32
/** A helper macro for populating the Reserved objects
like EArmObjReserved, EArmObjMax, etc. in the CM_OBJ_PARSER_ARRAY.
**/
#define CM_PARSER_ADD_OBJECT_RESERVED(ObjectId) \
{ObjectId, #ObjectId, NULL, 0}
/** A helper macro for populating the Cm Arm objects
in the CM_OBJ_PARSER_ARRAY.
**/
#define CM_PARSER_ADD_OBJECT(ObjectId, Parser) \
{ObjectId, #ObjectId, Parser, ARRAY_SIZE(Parser) }
/** Function prototype to format a field print.
@param [in] Format Format string for tracing the data as specified by
@ -58,6 +70,9 @@ struct CmObjParser {
with their object names.
*/
typedef struct CmObjParserArray {
/// Object ID
CONST UINTN ObjectId;
/// Object name
CONST CHAR8 *ObjectName;