Reduce the log output from Configuration Manager Object Parser in TableHelperLib by enabling the logs only if DEBUG_INFO is enabled. Reviewed-by: Pierre Gondois <pierre.gondois@arm.com> Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>
		
			
				
	
	
		
			1007 lines
		
	
	
		
			43 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1007 lines
		
	
	
		
			43 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Configuration Manager Object parser.
 | |
| 
 | |
|   Copyright (c) 2021 - 2023, ARM Limited. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #include <Library/BaseLib.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <ConfigurationManagerObject.h>
 | |
| #include "ConfigurationManagerObjectParser.h"
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| EFIAPI
 | |
| PrintOemId (
 | |
|   CONST CHAR8  *Format,
 | |
|   UINT8        *Ptr
 | |
|   );
 | |
| 
 | |
| STATIC
 | |
| VOID
 | |
| EFIAPI
 | |
| PrintString (
 | |
|   CONST CHAR8  *Format,
 | |
|   UINT8        *Ptr
 | |
|   );
 | |
| 
 | |
| /** A parser for EArmObjBootArchInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmBootArchInfoParser[] = {
 | |
|   { "BootArchFlags", 2, "0x%x", NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjPowerManagementProfileInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmPowerManagementProfileInfoParser[] = {
 | |
|   { "PowerManagementProfile", 1, "0x%x", NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjGicCInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmGicCInfoParser[] = {
 | |
|   { "CPUInterfaceNumber",            4,                        "0x%x",   NULL },
 | |
|   { "AcpiProcessorUid",              4,                        "0x%x",   NULL },
 | |
|   { "Flags",                         4,                        "0x%x",   NULL },
 | |
|   { "ParkingProtocolVersion",        4,                        "0x%x",   NULL },
 | |
|   { "PerformanceInterruptGsiv",      4,                        "0x%x",   NULL },
 | |
|   { "ParkedAddress",                 8,                        "0x%llx", NULL },
 | |
|   { "PhysicalBaseAddress",           8,                        "0x%llx", NULL },
 | |
|   { "GICV",                          8,                        "0x%llx", NULL },
 | |
|   { "GICH",                          8,                        "0x%llx", NULL },
 | |
|   { "VGICMaintenanceInterrupt",      4,                        "0x%x",   NULL },
 | |
|   { "GICRBaseAddress",               8,                        "0x%llx", NULL },
 | |
|   { "MPIDR",                         8,                        "0x%llx", NULL },
 | |
|   { "ProcessorPowerEfficiencyClass", 1,                        "0x%x",   NULL },
 | |
|   { "SpeOverflowInterrupt",          2,                        "0x%x",   NULL },
 | |
|   { "ProximityDomain",               4,                        "0x%x",   NULL },
 | |
|   { "ClockDomain",                   4,                        "0x%x",   NULL },
 | |
|   { "AffinityFlags",                 4,                        "0x%x",   NULL },
 | |
|   { "CpcToken",                      sizeof (CM_OBJECT_TOKEN), "0x%p",   NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjGicDInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmGicDInfoParser[] = {
 | |
|   { "PhysicalBaseAddress", 8, "0x%llx", NULL },
 | |
|   { "SystemVectorBase",    4, "0x%x",   NULL },
 | |
|   { "GicVersion",          1, "0x%x",   NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjGicMsiFrameInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmGicMsiFrameInfoParser[] = {
 | |
|   { "GicMsiFrameId",       4, "0x%x",   NULL },
 | |
|   { "PhysicalBaseAddress", 8, "0x%llx", NULL },
 | |
|   { "Flags",               4, "0x%x",   NULL },
 | |
|   { "SPICount",            2, "0x%x",   NULL },
 | |
|   { "SPIBase",             2, "0x%x",   NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjGicRedistributorInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmGicRedistInfoParser[] = {
 | |
|   { "DiscoveryRangeBaseAddress", 8, "0x%llx", NULL },
 | |
|   { "DiscoveryRangeLength",      4, "0x%x",   NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjGicItsInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmGicItsInfoParser[] = {
 | |
|   { "GicItsId",            4, "0x%x",   NULL },
 | |
|   { "PhysicalBaseAddress", 8, "0x%llx", NULL },
 | |
|   { "ProximityDomain",     4, "0x%x",   NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjSerialConsolePortInfo,
 | |
|     EArmObjSerialDebugPortInfo and EArmObjSerialPortInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmSerialPortInfoParser[] = {
 | |
|   { "BaseAddress",       8, "0x%llx", NULL },
 | |
|   { "Interrupt",         4, "0x%x",   NULL },
 | |
|   { "BaudRate",          8, "0x%llx", NULL },
 | |
|   { "Clock",             4, "0x%x",   NULL },
 | |
|   { "PortSubtype",       2, "0x%x",   NULL },
 | |
|   { "BaseAddressLength", 8, "0x%llx", NULL },
 | |
|   { "AccessSize",        1, "0x%d",   NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjGenericTimerInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmGenericTimerInfoParser[] = {
 | |
|   { "CounterControlBaseAddress", 8, "0x%llx", NULL },
 | |
|   { "CounterReadBaseAddress",    8, "0x%llx", NULL },
 | |
|   { "SecurePL1TimerGSIV",        4, "0x%x",   NULL },
 | |
|   { "SecurePL1TimerFlags",       4, "0x%x",   NULL },
 | |
|   { "NonSecurePL1TimerGSIV",     4, "0x%x",   NULL },
 | |
|   { "NonSecurePL1TimerFlags",    4, "0x%x",   NULL },
 | |
|   { "VirtualTimerGSIV",          4, "0x%x",   NULL },
 | |
|   { "VirtualTimerFlags",         4, "0x%x",   NULL },
 | |
|   { "NonSecurePL2TimerGSIV",     4, "0x%x",   NULL },
 | |
|   { "NonSecurePL2TimerFlags",    4, "0x%x",   NULL },
 | |
|   { "VirtualPL2TimerGSIV",       4, "0x%x",   NULL },
 | |
|   { "VirtualPL2TimerFlags",      4, "0x%x",   NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjPlatformGTBlockInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmGTBlockInfoParser[] = {
 | |
|   { "GTBlockPhysicalAddress", 8,                        "0x%llx", NULL },
 | |
|   { "GTBlockTimerFrameCount", 4,                        "0x%x",   NULL },
 | |
|   { "GTBlockTimerFrameToken", sizeof (CM_OBJECT_TOKEN), "0x%p",   NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjGTBlockTimerFrameInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmGTBlockTimerFrameInfoParser[] = {
 | |
|   { "FrameNumber",               1, "0x%x",   NULL },
 | |
|   { "PhysicalAddressCntBase",    8, "0x%llx", NULL },
 | |
|   { "PhysicalAddressCntEL0Base", 8, "0x%llx", NULL },
 | |
|   { "PhysicalTimerGSIV",         4, "0x%x",   NULL },
 | |
|   { "PhysicalTimerFlags",        4, "0x%x",   NULL },
 | |
|   { "VirtualTimerGSIV",          4, "0x%x",   NULL },
 | |
|   { "VirtualTimerFlags",         4, "0x%x",   NULL },
 | |
|   { "CommonFlags",               4, "0x%x",   NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjPlatformGenericWatchdogInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmGenericWatchdogInfoParser[] = {
 | |
|   { "ControlFrameAddress", 8, "0x%llx", NULL },
 | |
|   { "RefreshFrameAddress", 8, "0x%llx", NULL },
 | |
|   { "TimerGSIV",           4, "0x%x",   NULL },
 | |
|   { "Flags",               4, "0x%x",   NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjPciConfigSpaceInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmPciConfigSpaceInfoParser[] = {
 | |
|   { "BaseAddress",           8,                        "0x%llx", NULL },
 | |
|   { "PciSegmentGroupNumber", 2,                        "0x%x",   NULL },
 | |
|   { "StartBusNumber",        1,                        "0x%x",   NULL },
 | |
|   { "EndBusNumber",          1,                        "0x%x",   NULL },
 | |
|   { "AddressMapToken",       sizeof (CM_OBJECT_TOKEN), "0x%p",   NULL },
 | |
|   { "InterruptMapToken",     sizeof (CM_OBJECT_TOKEN), "0x%p",   NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjHypervisorVendorIdentity.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmHypervisorVendorIdParser[] = {
 | |
|   { "HypervisorVendorId", 8, "0x%llx", NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjFixedFeatureFlags.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmFixedFeatureFlagsParser[] = {
 | |
|   { "Flags", 4, "0x%x", NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjItsGroup.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmItsGroupNodeParser[] = {
 | |
|   { "Token",      sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "ItsIdCount", 4,                        "0x%x", NULL },
 | |
|   { "ItsIdToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "Identifier", 4,                        "0x%x", NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjNamedComponent.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmNamedComponentNodeParser[] = {
 | |
|   { "Token",             sizeof (CM_OBJECT_TOKEN), "0x%p", NULL        },
 | |
|   { "IdMappingCount",    4,                        "0x%x", NULL        },
 | |
|   { "IdMappingToken",    sizeof (CM_OBJECT_TOKEN), "0x%p", NULL        },
 | |
|   { "Flags",             4,                        "0x%x", NULL        },
 | |
|   { "CacheCoherent",     4,                        "0x%x", NULL        },
 | |
|   { "AllocationHints",   1,                        "0x%x", NULL        },
 | |
|   { "MemoryAccessFlags", 1,                        "0x%x", NULL        },
 | |
|   { "AddressSizeLimit",  1,                        "0x%x", NULL        },
 | |
|   { "ObjectName",        sizeof (CHAR8 *),         NULL,   PrintString },
 | |
|   { "Identifier",        4,                        "0x%x", NULL        },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjRootComplex.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmRootComplexNodeParser[] = {
 | |
|   { "Token",             sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "IdMappingCount",    4,                        "0x%x", NULL },
 | |
|   { "IdMappingToken",    sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "CacheCoherent",     4,                        "0x%x", NULL },
 | |
|   { "AllocationHints",   1,                        "0x%x", NULL },
 | |
|   { "MemoryAccessFlags", 1,                        "0x%x", NULL },
 | |
|   { "AtsAttribute",      4,                        "0x%x", NULL },
 | |
|   { "PciSegmentNumber",  4,                        "0x%x", NULL },
 | |
|   { "MemoryAddressSize", 1,                        "0x%x", NULL },
 | |
|   { "PasidCapabilities", 2,                        "0x%x", NULL },
 | |
|   { "Flags",             4,                        "0x%x", NULL },
 | |
|   { "Identifier",        4,                        "0x%x", NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjSmmuV1SmmuV2.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmSmmuV1SmmuV2NodeParser[] = {
 | |
|   { "Token",                 sizeof (CM_OBJECT_TOKEN), "0x%p",   NULL },
 | |
|   { "IdMappingCount",        4,                        "0x%x",   NULL },
 | |
|   { "IdMappingToken",        sizeof (CM_OBJECT_TOKEN), "0x%p",   NULL },
 | |
|   { "BaseAddress",           8,                        "0x%llx", NULL },
 | |
|   { "Span",                  8,                        "0x%llx", NULL },
 | |
|   { "Model",                 4,                        "0x%x",   NULL },
 | |
|   { "Flags",                 4,                        "0x%x",   NULL },
 | |
|   { "ContextInterruptCount", 4,                        "0x%x",   NULL },
 | |
|   { "ContextInterruptToken", sizeof (CM_OBJECT_TOKEN), "0x%p",   NULL },
 | |
|   { "PmuInterruptCount",     4,                        "0x%x",   NULL },
 | |
|   { "PmuInterruptToken",     sizeof (CM_OBJECT_TOKEN), "0x%p",   NULL },
 | |
|   { "SMMU_NSgIrpt",          4,                        "0x%x",   NULL },
 | |
|   { "SMMU_NSgIrptFlags",     4,                        "0x%x",   NULL },
 | |
|   { "SMMU_NSgCfgIrpt",       4,                        "0x%x",   NULL },
 | |
|   { "SMMU_NSgCfgIrptFlags",  4,                        "0x%x",   NULL },
 | |
|   { "Identifier",            4,                        "0x%x",   NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjSmmuV3.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmSmmuV3NodeParser[] = {
 | |
|   { "Token",                sizeof (CM_OBJECT_TOKEN), "0x%p",   NULL },
 | |
|   { "IdMappingCount",       4,                        "0x%x",   NULL },
 | |
|   { "IdMappingToken",       sizeof (CM_OBJECT_TOKEN), "0x%p",   NULL },
 | |
|   { "BaseAddress",          8,                        "0x%llx", NULL },
 | |
|   { "Flags",                4,                        "0x%x",   NULL },
 | |
|   { "VatosAddress",         8,                        "0x%llx", NULL },
 | |
|   { "Model",                4,                        "0x%x",   NULL },
 | |
|   { "EventInterrupt",       4,                        "0x%x",   NULL },
 | |
|   { "PriInterrupt",         4,                        "0x%x",   NULL },
 | |
|   { "GerrInterrupt",        4,                        "0x%x",   NULL },
 | |
|   { "SyncInterrupt",        4,                        "0x%x",   NULL },
 | |
|   { "ProximityDomain",      4,                        "0x%x",   NULL },
 | |
|   { "DeviceIdMappingIndex", 4,                        "0x%x",   NULL },
 | |
|   { "Identifier",           4,                        "0x%x",   NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjPmcg.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmPmcgNodeParser[] = {
 | |
|   { "Token",             sizeof (CM_OBJECT_TOKEN), "0x%p",   NULL },
 | |
|   { "IdMappingCount",    4,                        "0x%x",   NULL },
 | |
|   { "IdMappingToken",    sizeof (CM_OBJECT_TOKEN), "0x%p",   NULL },
 | |
|   { "BaseAddress",       8,                        "0x%llx", NULL },
 | |
|   { "OverflowInterrupt", 4,                        "0x%x",   NULL },
 | |
|   { "Page1BaseAddress",  8,                        "0x%llx", NULL },
 | |
|   { "ReferenceToken",    sizeof (CM_OBJECT_TOKEN), "0x%p",   NULL },
 | |
|   { "Identifier",        4,                        "0x%x",   NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjGicItsIdentifierArray.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmGicItsIdentifierParser[] = {
 | |
|   { "ItsId", 4, "0x%x", NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjIdMappingArray.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmIdMappingParser[] = {
 | |
|   { "InputBase",            4,                        "0x%x", NULL },
 | |
|   { "NumIds",               4,                        "0x%x", NULL },
 | |
|   { "OutputBase",           4,                        "0x%x", NULL },
 | |
|   { "OutputReferenceToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "Flags",                4,                        "0x%x", NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjSmmuInterruptArray.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmGenericInterruptParser[] = {
 | |
|   { "Interrupt", 4, "0x%x", NULL },
 | |
|   { "Flags",     4, "0x%x", NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjProcHierarchyInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmProcHierarchyInfoParser[] = {
 | |
|   { "Token",                      sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "Flags",                      4,                        "0x%x", NULL },
 | |
|   { "ParentToken",                sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "GicCToken",                  sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "NoOfPrivateResources",       4,                        "0x%x", NULL },
 | |
|   { "PrivateResourcesArrayToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "LpiToken",                   sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "OverrideNameUidEnabled",     1,                        "%d",   NULL },
 | |
|   { "OverrideName",               2,                        "0x%x", NULL },
 | |
|   { "OverrideUid",                4,                        "0x%x", NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjCacheInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmCacheInfoParser[] = {
 | |
|   { "Token",                 sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "NextLevelOfCacheToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "Size",                  4,                        "0x%x", NULL },
 | |
|   { "NumberOfSets",          4,                        "0x%x", NULL },
 | |
|   { "Associativity",         4,                        "0x%x", NULL },
 | |
|   { "Attributes",            1,                        "0x%x", NULL },
 | |
|   { "LineSize",              2,                        "0x%x", NULL },
 | |
|   { "CacheId",               4,                        "0x%x", NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjProcNodeIdInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmProcNodeIdInfoParser[] = {
 | |
|   { "Token",    sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "VendorId", 4,                        "0x%p", NULL },
 | |
|   { "Level1Id", 8,                        "0x%x", NULL },
 | |
|   { "Level2Id", 8,                        "0x%x", NULL },
 | |
|   { "MajorRev", 2,                        "0x%x", NULL },
 | |
|   { "MinorRev", 2,                        "0x%x", NULL },
 | |
|   { "SpinRev",  2,                        "0x%x", NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjCmRef.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmObjRefParser[] = {
 | |
|   { "ReferenceToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjMemoryAffinityInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmMemoryAffinityInfoParser[] = {
 | |
|   { "ProximityDomain", 4, "0x%x",   NULL },
 | |
|   { "BaseAddress",     8, "0x%llx", NULL },
 | |
|   { "Length",          8, "0x%llx", NULL },
 | |
|   { "Flags",           4, "0x%x",   NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjDeviceHandleAcpi.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmDeviceHandleAcpiParser[] = {
 | |
|   { "Hid", 8, "0x%llx", NULL },
 | |
|   { "Uid", 4, "0x%x",   NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjDeviceHandlePci.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmDeviceHandlePciParser[] = {
 | |
|   { "SegmentNumber",  2, "0x%x", NULL },
 | |
|   { "BusNumber",      1, "0x%x", NULL },
 | |
|   { "DeviceNumber",   1, "0x%x", NULL },
 | |
|   { "FunctionNumber", 1, "0x%x", NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjGenericInitiatorAffinityInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmGenericInitiatorAffinityInfoParser[] = {
 | |
|   { "ProximityDomain",   4,                        "0x%x", NULL },
 | |
|   { "Flags",             4,                        "0x%x", NULL },
 | |
|   { "DeviceHandleType",  1,                        "0x%x", NULL },
 | |
|   { "DeviceHandleToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjCmn600Info.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmCmn600InfoParser[] = {
 | |
|   { "PeriphBaseAddress",       8, "0x%llx", NULL },
 | |
|   { "PeriphBaseAddressLength", 8, "0x%llx", NULL },
 | |
|   { "RootNodeBaseAddress",     8, "0x%llx", NULL },
 | |
|   { "DtcCount",                1, "0x%x",   NULL },
 | |
|   { "DtcInterrupt[0]",         4, "0x%x",   NULL },
 | |
|   { "DtcFlags[0]",             4, "0x%x",   NULL },
 | |
|   { "DtcInterrupt[1]",         4, "0x%x",   NULL },
 | |
|   { "DtcFlags[1]",             4, "0x%x",   NULL },
 | |
|   { "DtcInterrupt[2]",         4, "0x%x",   NULL },
 | |
|   { "DtcFlags[2]",             4, "0x%x",   NULL },
 | |
|   { "DtcInterrupt[3]",         4, "0x%x",   NULL },
 | |
|   { "DtcFlags[3]",             4, "0x%x",   NULL }
 | |
| };
 | |
| 
 | |
| /** A parser for the EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE structure.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  AcpiGenericAddressParser[] = {
 | |
|   { "AddressSpaceId",    1, "%d",     NULL },
 | |
|   { "RegisterBitWidth",  1, "%d",     NULL },
 | |
|   { "RegisterBitOffset", 1, "%d",     NULL },
 | |
|   { "AccessSize",        1, "%d",     NULL },
 | |
|   { "Address",           8, "0x%llx", NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjLpiInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmLpiInfoParser[] = {
 | |
|   { "MinResidency",             4,                                               "0x%x",   NULL        },
 | |
|   { "WorstCaseWakeLatency",     4,                                               "0x%x",   NULL        },
 | |
|   { "Flags",                    4,                                               "0x%x",   NULL        },
 | |
|   { "ArchFlags",                4,                                               "0x%x",   NULL        },
 | |
|   { "ResCntFreq",               4,                                               "0x%x",   NULL        },
 | |
|   { "EnableParentState",        4,                                               "0x%x",   NULL        },
 | |
|   { "IsInteger",                1,                                               "%d",     NULL        },
 | |
|   { "IntegerEntryMethod",       8,                                               "0x%llx", NULL        },
 | |
|   { "RegisterEntryMethod",      sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "ResidencyCounterRegister", sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "UsageCounterRegister",     sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "StateName",                16,                                              NULL,     PrintString },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjPciAddressMapInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmPciAddressMapInfoParser[] = {
 | |
|   { "SpaceCode",   1, "%d",     NULL },
 | |
|   { "PciAddress",  8, "0x%llx", NULL },
 | |
|   { "CpuAddress",  8, "0x%llx", NULL },
 | |
|   { "AddressSize", 8, "0x%llx", NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjPciInterruptMapInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmPciInterruptMapInfoParser[] = {
 | |
|   { "PciBus",        1,                                 "0x%x", NULL },
 | |
|   { "PciDevice",     1,                                 "0x%x", NULL },
 | |
|   { "PciInterrupt",  1,                                 "0x%x", NULL },
 | |
|   { "IntcInterrupt", sizeof (CM_ARM_GENERIC_INTERRUPT),
 | |
|     NULL, NULL, CmArmGenericInterruptParser,
 | |
|     ARRAY_SIZE (CmArmGenericInterruptParser) },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjRmr.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmRmrInfoParser[] = {
 | |
|   { "Token",             sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "IdMappingCount",    4,                        "0x%x", NULL },
 | |
|   { "IdMappingToken",    sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
|   { "Identifier",        4,                        "0x%x", NULL },
 | |
|   { "Flags",             4,                        "0x%x", NULL },
 | |
|   { "MemRangeDescCount", 4,                        "0x%x", NULL },
 | |
|   { "MemRangeDescToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjMemoryRangeDescriptor.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmMemoryRangeDescriptorInfoParser[] = {
 | |
|   { "BaseAddress", 8, "0x%llx", NULL },
 | |
|   { "Length",      8, "0x%llx", NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjCpcInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmCpcInfoParser[] = {
 | |
|   { "Revision",                              4,                                               "0x%lx", NULL },
 | |
|   { "HighestPerformanceBuffer",              sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "HighestPerformanceInteger",             4,                                               "0x%lx", NULL },
 | |
|   { "NominalPerformanceBuffer",              sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "NominalPerformanceInteger",             4,                                               "0x%lx", NULL },
 | |
|   { "LowestNonlinearPerformanceBuffer",      sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "LowestNonlinearPerformanceInteger",     4,                                               "0x%lx", NULL },
 | |
|   { "LowestPerformanceBuffer",               sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "LowestPerformanceInteger",              4,                                               "0x%lx", NULL },
 | |
|   { "GuaranteedPerformanceRegister",         sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "DesiredPerformanceRegister",            sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "MinimumPerformanceRegister",            sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "MaximumPerformanceRegister",            sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "PerformanceReductionToleranceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "TimeWindowRegister",                    sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "CounterWraparoundTimeBuffer",           sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "CounterWraparoundTimeInteger",          4,                                               "0x%lx", NULL },
 | |
|   { "ReferencePerformanceCounterRegister",   sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "DeliveredPerformanceCounterRegister",   sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "PerformanceLimitedRegister",            sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "CPPCEnableRegister",                    sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "AutonomousSelectionEnableBuffer",       sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "AutonomousSelectionEnableInteger",      4,                                               "0x%lx", NULL },
 | |
|   { "AutonomousActivityWindowRegister",      sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "EnergyPerformancePreferenceRegister",   sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "ReferencePerformanceBuffer",            sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "ReferencePerformanceInteger",           4,                                               "0x%lx", NULL },
 | |
|   { "LowestFrequencyBuffer",                 sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "LowestFrequencyInteger",                4,                                               "0x%lx", NULL },
 | |
|   { "NominalFrequencyBuffer",                sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),
 | |
|     NULL, NULL, AcpiGenericAddressParser,
 | |
|     ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "NominalFrequencyInteger",               4,                                               "0x%lx", NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for the PCC_MAILBOX_REGISTER_INFO struct.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmMailboxRegisterInfoParser[] = {
 | |
|   { "Register",     sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE), NULL,     NULL,
 | |
|     AcpiGenericAddressParser, ARRAY_SIZE (AcpiGenericAddressParser) },
 | |
|   { "PreserveMask", 8,                                               "0x%llx", NULL },
 | |
|   { "WriteMask",    8,                                               "0x%llx", NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for the PCC_SUBSPACE_CHANNEL_TIMING_INFO struct.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmPccSubspaceChannelTimingInfoParser[] = {
 | |
|   { "NominalLatency",           4, "0x%x", NULL },
 | |
|   { "MaxPeriodicAccessRate",    4, "0x%x", NULL },
 | |
|   { "MinRequestTurnaroundTime", 2, "0x%x", NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjPccSubspaceType0Info.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmPccSubspaceType0InfoParser[] = {
 | |
|   { "SubspaceId",    1,                                         "0x%x",   NULL },
 | |
|   { "Type",          1,                                         "0x%x",   NULL },
 | |
|   { "BaseAddress",   8,                                         "0x%llx", NULL },
 | |
|   { "AddressLength", 8,                                         "0x%llx", NULL },
 | |
|   { "DoorbellReg",   sizeof (PCC_MAILBOX_REGISTER_INFO),
 | |
|     NULL, NULL, CmArmMailboxRegisterInfoParser,
 | |
|     ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
 | |
|   { "ChannelTiming", sizeof (PCC_SUBSPACE_CHANNEL_TIMING_INFO),
 | |
|     NULL, NULL, CmArmPccSubspaceChannelTimingInfoParser,
 | |
|     ARRAY_SIZE (CmArmPccSubspaceChannelTimingInfoParser) },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjPccSubspaceType1Info.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmPccSubspaceType1InfoParser[] = {
 | |
|   { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO),
 | |
|     NULL, NULL, CmArmPccSubspaceType0InfoParser,
 | |
|     ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },
 | |
|   { "PlatIrq",        sizeof (CM_ARM_GENERIC_INTERRUPT),
 | |
|     NULL, NULL, CmArmGenericInterruptParser,
 | |
|     ARRAY_SIZE (CmArmGenericInterruptParser) },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjPccSubspaceType2Info.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmPccSubspaceType2InfoParser[] = {
 | |
|   { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO),
 | |
|     NULL, NULL, CmArmPccSubspaceType0InfoParser,
 | |
|     ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },
 | |
|   { "PlatIrq",        sizeof (CM_ARM_GENERIC_INTERRUPT), NULL,NULL,
 | |
|     CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) },
 | |
|   { "PlatIrqAckReg",  sizeof (PCC_MAILBOX_REGISTER_INFO),
 | |
|     NULL, NULL, CmArmMailboxRegisterInfoParser,
 | |
|     ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjPccSubspaceType3Info or EArmObjPccSubspaceType4Info.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmPccSubspaceType34InfoParser[] = {
 | |
|   { "GenericPccInfo",       sizeof (PCC_SUBSPACE_GENERIC_INFO),
 | |
|     NULL, NULL, CmArmPccSubspaceType0InfoParser,
 | |
|     ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },
 | |
|   { "PlatIrq",              sizeof (CM_ARM_GENERIC_INTERRUPT), NULL,NULL,
 | |
|     CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) },
 | |
|   { "PlatIrqAckReg",        sizeof (PCC_MAILBOX_REGISTER_INFO),
 | |
|     NULL, NULL, CmArmMailboxRegisterInfoParser,
 | |
|     ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
 | |
|   { "CmdCompleteCheckReg",  sizeof (PCC_MAILBOX_REGISTER_INFO),
 | |
|     NULL, NULL, CmArmMailboxRegisterInfoParser,
 | |
|     ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
 | |
|   { "CmdCompleteUpdateReg", sizeof (PCC_MAILBOX_REGISTER_INFO),
 | |
|     NULL, NULL, CmArmMailboxRegisterInfoParser,
 | |
|     ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
 | |
|   { "ErrorStatusReg",       sizeof (PCC_MAILBOX_REGISTER_INFO),
 | |
|     NULL, NULL, CmArmMailboxRegisterInfoParser,
 | |
|     ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
 | |
| };
 | |
| 
 | |
| /** A parser for EArmObjPccSubspaceType5Info.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  CmArmPccSubspaceType5InfoParser[] = {
 | |
|   { "GenericPccInfo",      sizeof (PCC_SUBSPACE_GENERIC_INFO),
 | |
|     NULL, NULL, CmArmPccSubspaceType0InfoParser,
 | |
|     ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },
 | |
|   { "Version",             2,                                 "0x%x",NULL },
 | |
|   { "PlatIrq",             sizeof (CM_ARM_GENERIC_INTERRUPT), NULL,  NULL,
 | |
|     CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) },
 | |
|   { "CmdCompleteCheckReg", sizeof (PCC_MAILBOX_REGISTER_INFO),
 | |
|     NULL, NULL, CmArmMailboxRegisterInfoParser,
 | |
|     ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
 | |
|   { "ErrorStatusReg",      sizeof (PCC_MAILBOX_REGISTER_INFO),
 | |
|     NULL, NULL, CmArmMailboxRegisterInfoParser,
 | |
|     ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
 | |
| };
 | |
| 
 | |
| /** 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) },
 | |
|   { "EArmObjProcNodeIdInfo",               CmArmProcNodeIdInfoParser,
 | |
|     ARRAY_SIZE (CmArmProcNodeIdInfoParser) },
 | |
|   { "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) },
 | |
|   { "EArmObjMax",                          NULL,                                  0                                },
 | |
| };
 | |
| 
 | |
| /** A parser for EStdObjCfgMgrInfo.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  StdObjCfgMgrInfoParser[] = {
 | |
|   { "Revision", 4, "0x%x",         NULL       },
 | |
|   { "OemId[6]", 6, "%C%C%C%C%C%C", PrintOemId }
 | |
| };
 | |
| 
 | |
| /** A parser for EStdObjAcpiTableList.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  StdObjAcpiTableInfoParser[] = {
 | |
|   { "AcpiTableSignature", 4,                                      "0x%x",   NULL },
 | |
|   { "AcpiTableRevision",  1,                                      "%d",     NULL },
 | |
|   { "TableGeneratorId",   sizeof (ACPI_TABLE_GENERATOR_ID),       "0x%x",   NULL },
 | |
|   { "AcpiTableData",      sizeof (EFI_ACPI_DESCRIPTION_HEADER *), "0x%p",   NULL },
 | |
|   { "OemTableId",         8,                                      "0x%LLX", NULL },
 | |
|   { "OemRevision",        4,                                      "0x%x",   NULL },
 | |
|   { "MinorRevision",      1,                                      "0x%x",   NULL },
 | |
| };
 | |
| 
 | |
| /** A parser for EStdObjSmbiosTableList.
 | |
| */
 | |
| STATIC CONST CM_OBJ_PARSER  StdObjSmbiosTableInfoParser[] = {
 | |
|   { "TableGeneratorId", sizeof (SMBIOS_TABLE_GENERATOR_ID), "0x%x", NULL },
 | |
|   { "SmbiosTableData",  sizeof (SMBIOS_STRUCTURE *),        "0x%p", NULL }
 | |
| };
 | |
| 
 | |
| /** 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) },
 | |
| };
 | |
| 
 | |
| /** Print OEM Id.
 | |
| 
 | |
|   @param [in]  Format  Format to print the Ptr.
 | |
|   @param [in]  Ptr     Pointer to the OEM Id.
 | |
| **/
 | |
| STATIC
 | |
| VOID
 | |
| EFIAPI
 | |
| PrintOemId (
 | |
|   IN  CONST CHAR8  *Format,
 | |
|   IN  UINT8        *Ptr
 | |
|   )
 | |
| {
 | |
|   DEBUG ((
 | |
|     DEBUG_INFO,
 | |
|     (Format != NULL) ? Format : "%C%C%C%C%C%C",
 | |
|     Ptr[0],
 | |
|     Ptr[1],
 | |
|     Ptr[2],
 | |
|     Ptr[3],
 | |
|     Ptr[4],
 | |
|     Ptr[5]
 | |
|     ));
 | |
| }
 | |
| 
 | |
| /** Print string.
 | |
| 
 | |
|   The string must be NULL terminated.
 | |
| 
 | |
|   @param [in]  Format  Format to print the Ptr.
 | |
|   @param [in]  Ptr     Pointer to the string.
 | |
| **/
 | |
| STATIC
 | |
| VOID
 | |
| EFIAPI
 | |
| PrintString (
 | |
|   CONST CHAR8  *Format,
 | |
|   UINT8        *Ptr
 | |
|   )
 | |
| {
 | |
|   DEBUG ((DEBUG_ERROR, "%a", Ptr));
 | |
| }
 | |
| 
 | |
| /** Print fields of the objects.
 | |
| 
 | |
|   @param [in]  Data           Pointer to the object to print.
 | |
|   @param [in]  Parser         Parser containing the object fields.
 | |
|   @param [in]  ItemCount      Number of entries/fields in the Parser.
 | |
|   @param [in]  RemainingSize  Parse at most *RemainingSize bytes.
 | |
|                               This function decrements the value
 | |
|                               from the number bytes consumed.
 | |
|   @param [in]  IndentLevel    Indentation to use when printing.
 | |
| **/
 | |
| STATIC
 | |
| VOID
 | |
| PrintCmObjDesc (
 | |
|   IN        VOID           *Data,
 | |
|   IN  CONST CM_OBJ_PARSER  *Parser,
 | |
|   IN        UINTN          ItemCount,
 | |
|   IN        INTN           *RemainingSize,
 | |
|   IN        UINT32         IndentLevel
 | |
|   )
 | |
| {
 | |
|   UINT32  Index;
 | |
|   UINT32  IndentIndex;
 | |
|   INTN    SubStructSize;
 | |
| 
 | |
|   if ((Data == NULL)    ||
 | |
|       (Parser == NULL)  ||
 | |
|       (ItemCount == 0)  ||
 | |
|       (RemainingSize == NULL))
 | |
|   {
 | |
|     ASSERT (0);
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   // Print each field.
 | |
|   for (Index = 0; Index < ItemCount; Index++) {
 | |
|     // Check there is enough space in left.
 | |
|     *RemainingSize -= Parser[Index].Length;
 | |
|     if (*RemainingSize < 0) {
 | |
|       DEBUG ((
 | |
|         DEBUG_INFO,
 | |
|         "\nERROR: %a: Buffer overrun\n",
 | |
|         Parser[Index].NameStr
 | |
|         ));
 | |
|       ASSERT (0);
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     // Indentation
 | |
|     for (IndentIndex = 0; IndentIndex < IndentLevel; IndentIndex++) {
 | |
|       DEBUG ((DEBUG_INFO, "  "));
 | |
|     }
 | |
| 
 | |
|     DEBUG ((
 | |
|       DEBUG_INFO,
 | |
|       "%-*a :",
 | |
|       OUTPUT_FIELD_COLUMN_WIDTH - 2 * IndentLevel,
 | |
|       Parser[Index].NameStr
 | |
|       ));
 | |
|     if (Parser[Index].PrintFormatter != NULL) {
 | |
|       Parser[Index].PrintFormatter (Parser[Index].Format, Data);
 | |
|     } else if (Parser[Index].Format != NULL) {
 | |
|       switch (Parser[Index].Length) {
 | |
|         case 1:
 | |
|           DEBUG ((DEBUG_INFO, Parser[Index].Format, *(UINT8 *)Data));
 | |
|           break;
 | |
|         case 2:
 | |
|           DEBUG ((DEBUG_INFO, Parser[Index].Format, *(UINT16 *)Data));
 | |
|           break;
 | |
|         case 4:
 | |
|           DEBUG ((DEBUG_INFO, Parser[Index].Format, *(UINT32 *)Data));
 | |
|           break;
 | |
|         case 8:
 | |
|           DEBUG ((DEBUG_INFO, Parser[Index].Format, ReadUnaligned64 (Data)));
 | |
|           break;
 | |
|         default:
 | |
|           DEBUG ((
 | |
|             DEBUG_INFO,
 | |
|             "\nERROR: %a: CANNOT PARSE THIS FIELD, Field Length = %d\n",
 | |
|             Parser[Index].NameStr,
 | |
|             Parser[Index].Length
 | |
|             ));
 | |
|       } // switch
 | |
|     } else if (Parser[Index].SubObjParser != NULL) {
 | |
|       SubStructSize = Parser[Index].Length;
 | |
| 
 | |
|       DEBUG ((DEBUG_INFO, "\n"));
 | |
|       PrintCmObjDesc (
 | |
|         Data,
 | |
|         Parser[Index].SubObjParser,
 | |
|         Parser[Index].SubObjItemCount,
 | |
|         &SubStructSize,
 | |
|         IndentLevel + 1
 | |
|         );
 | |
|     } else {
 | |
|       ASSERT (0);
 | |
|       DEBUG ((
 | |
|         DEBUG_INFO,
 | |
|         "\nERROR: %a: CANNOT PARSE THIS FIELD, Field Length = %d\n",
 | |
|         Parser[Index].NameStr,
 | |
|         Parser[Index].Length
 | |
|         ));
 | |
|     }
 | |
| 
 | |
|     DEBUG ((DEBUG_INFO, "\n"));
 | |
|     Data = (UINT8 *)Data + Parser[Index].Length;
 | |
|   } // for
 | |
| }
 | |
| 
 | |
| /** Parse and print a CmObjDesc.
 | |
| 
 | |
|   @param [in]  CmObjDesc  The CmObjDesc to parse and print.
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| ParseCmObjDesc (
 | |
|   IN  CONST CM_OBJ_DESCRIPTOR  *CmObjDesc
 | |
|   )
 | |
| {
 | |
|   UINTN                       ObjId;
 | |
|   UINTN                       NameSpaceId;
 | |
|   UINT32                      ObjIndex;
 | |
|   UINT32                      ObjectCount;
 | |
|   INTN                        RemainingSize;
 | |
|   INTN                        Offset;
 | |
|   CONST  CM_OBJ_PARSER_ARRAY  *ParserArray;
 | |
| 
 | |
|   if ((CmObjDesc == NULL) || (CmObjDesc->Data == NULL)) {
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   NameSpaceId = GET_CM_NAMESPACE_ID (CmObjDesc->ObjectId);
 | |
|   ObjId       = GET_CM_OBJECT_ID (CmObjDesc->ObjectId);
 | |
| 
 | |
|   switch (NameSpaceId) {
 | |
|     case EObjNameSpaceStandard:
 | |
|       if (ObjId >= EStdObjMax) {
 | |
|         ASSERT (0);
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       ParserArray = &StdNamespaceObjectParser[ObjId];
 | |
|       break;
 | |
|     case EObjNameSpaceArm:
 | |
|       if (ObjId >= EArmObjMax) {
 | |
|         ASSERT (0);
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       ParserArray = &ArmNamespaceObjectParser[ObjId];
 | |
|       break;
 | |
|     default:
 | |
|       // Not supported
 | |
|       ASSERT (0);
 | |
|       return;
 | |
|   } // switch
 | |
| 
 | |
|   ObjectCount   = CmObjDesc->Count;
 | |
|   RemainingSize = CmObjDesc->Size;
 | |
|   Offset        = 0;
 | |
| 
 | |
|   for (ObjIndex = 0; ObjIndex < ObjectCount; ObjIndex++) {
 | |
|     DEBUG ((
 | |
|       DEBUG_INFO,
 | |
|       "\n%-*a [%d/%d]:\n",
 | |
|       OUTPUT_FIELD_COLUMN_WIDTH,
 | |
|       ParserArray->ObjectName,
 | |
|       ObjIndex + 1,
 | |
|       ObjectCount
 | |
|       ));
 | |
|     PrintCmObjDesc (
 | |
|       (VOID *)((UINTN)CmObjDesc->Data + Offset),
 | |
|       ParserArray->Parser,
 | |
|       ParserArray->ItemCount,
 | |
|       &RemainingSize,
 | |
|       1
 | |
|       );
 | |
|     if ((RemainingSize > CmObjDesc->Size) ||
 | |
|         (RemainingSize < 0))
 | |
|     {
 | |
|       ASSERT (0);
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     Offset = CmObjDesc->Size - RemainingSize;
 | |
|   } // for
 | |
| 
 | |
|   ASSERT (RemainingSize == 0);
 | |
| }
 |