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]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to