/** @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); | |
} |