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

View File

@ -11,6 +11,18 @@
#define OUTPUT_FIELD_COLUMN_WIDTH 32 #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. /** Function prototype to format a field print.
@param [in] Format Format string for tracing the data as specified by @param [in] Format Format string for tracing the data as specified by
@ -58,6 +70,9 @@ struct CmObjParser {
with their object names. with their object names.
*/ */
typedef struct CmObjParserArray { typedef struct CmObjParserArray {
/// Object ID
CONST UINTN ObjectId;
/// Object name /// Object name
CONST CHAR8 *ObjectName; CONST CHAR8 *ObjectName;