From: Sami Mujawar <sami.muja...@arm.com> 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.gond...@arm.com> Cc: Yeo Reum Yun <yeoreum....@arm.com> Cc: AbdulLateef Attar <abdullateef.at...@amd.com> Cc: Jeshua Smith <jesh...@nvidia.com> Cc: Jeff Brasen <jbra...@nvidia.com> Cc: Girish Mahadevan <gmahade...@nvidia.com> Cc: Leif Lindholm <quic_llind...@quicinc.com> Cc: Meenakshi Aggarwal <meenakshi.aggar...@nxp.com> Signed-off-by: Sami Mujawar <sami.muja...@arm.com> Signed-off-by: Pierre Gondois <pierre.gond...@arm.com> --- .../ConfigurationManagerObjectParser.c | 165 +++++++----------- .../ConfigurationManagerObjectParser.h | 15 ++ 2 files changed, 75 insertions(+), 105 deletions(-) diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index f96b05b1c0b9..68d6c57acfc0 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -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; diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.h b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.h index 3204f5314340..d996d05a55dd 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.h +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.h @@ -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; -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#116964): https://edk2.groups.io/g/devel/message/116964 Mute This Topic: https://groups.io/mt/105067968/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-