mirror of https://github.com/acidanthera/audk.git
1146 lines
46 KiB
C
1146 lines
46 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
|
|
PrintString (
|
|
CONST CHAR8 *Format,
|
|
UINT8 *Ptr
|
|
);
|
|
|
|
STATIC
|
|
VOID
|
|
EFIAPI
|
|
PrintStringPtr (
|
|
CONST CHAR8 *Format,
|
|
UINT8 *Ptr
|
|
);
|
|
|
|
STATIC
|
|
VOID
|
|
EFIAPI
|
|
PrintChar4 (
|
|
CONST CHAR8 *Format,
|
|
UINT8 *Ptr
|
|
);
|
|
|
|
STATIC
|
|
VOID
|
|
EFIAPI
|
|
PrintChar6 (
|
|
CONST CHAR8 *Format,
|
|
UINT8 *Ptr
|
|
);
|
|
|
|
STATIC
|
|
VOID
|
|
EFIAPI
|
|
PrintChar8 (
|
|
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 },
|
|
{ "TRBEInterrupt", 2, "0x%x", NULL },
|
|
{ "EtToken", 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, PrintStringPtr },
|
|
{ "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 EArmObjEtInfo.
|
|
*/
|
|
STATIC CONST CM_OBJ_PARSER CmArmEtInfo[] = {
|
|
{ "EtType", sizeof (ARM_ET_TYPE), "0x%x", NULL }
|
|
};
|
|
|
|
/** 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) },
|
|
{ "EArmObjEtInfo", CmArmEtInfo,
|
|
ARRAY_SIZE (CmArmEtInfo) },
|
|
{ "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", PrintChar6 }
|
|
};
|
|
|
|
/** A parser for EStdObjAcpiTableList.
|
|
*/
|
|
STATIC CONST CM_OBJ_PARSER StdObjAcpiTableInfoParser[] = {
|
|
{ "AcpiTableSignature", 4, "%c%c%c%c", PrintChar4 },
|
|
{ "AcpiTableRevision", 1, "%d", NULL },
|
|
{ "TableGeneratorId", sizeof (ACPI_TABLE_GENERATOR_ID), "0x%x", NULL },
|
|
{ "AcpiTableData", sizeof (EFI_ACPI_DESCRIPTION_HEADER *), "0x%p", NULL },
|
|
{ "OemTableId", 8, "%c%c%c%c%c%c%c%c", PrintChar8 },
|
|
{ "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) },
|
|
{ "EStdObjMax", NULL, 0}
|
|
};
|
|
|
|
/** Print string data.
|
|
|
|
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 (
|
|
IN CONST CHAR8 *Format,
|
|
IN UINT8 *Ptr
|
|
)
|
|
{
|
|
if (Ptr == NULL) {
|
|
ASSERT (0);
|
|
return;
|
|
}
|
|
|
|
DEBUG ((DEBUG_ERROR, "%a", Ptr));
|
|
}
|
|
|
|
/** Print string from pointer.
|
|
|
|
The string must be NULL terminated.
|
|
|
|
@param [in] Format Format to print the string.
|
|
@param [in] Ptr Pointer to the string pointer.
|
|
**/
|
|
STATIC
|
|
VOID
|
|
EFIAPI
|
|
PrintStringPtr (
|
|
IN CONST CHAR8 *Format,
|
|
IN UINT8 *Ptr
|
|
)
|
|
{
|
|
UINT8 *String;
|
|
|
|
if (Ptr == NULL) {
|
|
ASSERT (0);
|
|
return;
|
|
}
|
|
|
|
String = *(UINT8 **)Ptr;
|
|
|
|
if (String == NULL) {
|
|
String = (UINT8 *)"(NULLPTR)";
|
|
}
|
|
|
|
PrintString (Format, String);
|
|
}
|
|
|
|
/** Print 4 characters.
|
|
|
|
@param [in] Format Format to print the Ptr.
|
|
@param [in] Ptr Pointer to the characters.
|
|
**/
|
|
STATIC
|
|
VOID
|
|
EFIAPI
|
|
PrintChar4 (
|
|
IN CONST CHAR8 *Format,
|
|
IN UINT8 *Ptr
|
|
)
|
|
{
|
|
DEBUG ((
|
|
DEBUG_ERROR,
|
|
(Format != NULL) ? Format : "%c%c%c%c",
|
|
Ptr[0],
|
|
Ptr[1],
|
|
Ptr[2],
|
|
Ptr[3]
|
|
));
|
|
}
|
|
|
|
/** Print 6 characters.
|
|
|
|
@param [in] Format Format to print the Ptr.
|
|
@param [in] Ptr Pointer to the characters.
|
|
**/
|
|
STATIC
|
|
VOID
|
|
EFIAPI
|
|
PrintChar6 (
|
|
IN CONST CHAR8 *Format,
|
|
IN UINT8 *Ptr
|
|
)
|
|
{
|
|
DEBUG ((
|
|
DEBUG_ERROR,
|
|
(Format != NULL) ? Format : "%c%c%c%c%c%c",
|
|
Ptr[0],
|
|
Ptr[1],
|
|
Ptr[2],
|
|
Ptr[3],
|
|
Ptr[4],
|
|
Ptr[5]
|
|
));
|
|
}
|
|
|
|
/** Print 8 characters.
|
|
|
|
@param [in] Format Format to print the Ptr.
|
|
@param [in] Ptr Pointer to the characters.
|
|
**/
|
|
STATIC
|
|
VOID
|
|
EFIAPI
|
|
PrintChar8 (
|
|
IN CONST CHAR8 *Format,
|
|
IN UINT8 *Ptr
|
|
)
|
|
{
|
|
DEBUG ((
|
|
DEBUG_ERROR,
|
|
(Format != NULL) ? Format : "%c%c%c%c%c%c%c%c",
|
|
Ptr[0],
|
|
Ptr[1],
|
|
Ptr[2],
|
|
Ptr[3],
|
|
Ptr[4],
|
|
Ptr[5],
|
|
Ptr[6],
|
|
Ptr[7]
|
|
));
|
|
}
|
|
|
|
/** 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;
|
|
}
|
|
|
|
if (ObjId >= ARRAY_SIZE (StdNamespaceObjectParser)) {
|
|
DEBUG ((DEBUG_ERROR, "ObjId 0x%x is missing from the StdNamespaceObjectParser array\n", ObjId));
|
|
ASSERT (0);
|
|
return;
|
|
}
|
|
|
|
ParserArray = &StdNamespaceObjectParser[ObjId];
|
|
break;
|
|
case EObjNameSpaceArm:
|
|
if (ObjId >= EArmObjMax) {
|
|
ASSERT (0);
|
|
return;
|
|
}
|
|
|
|
if (ObjId >= ARRAY_SIZE (ArmNamespaceObjectParser)) {
|
|
DEBUG ((DEBUG_ERROR, "ObjId 0x%x is missing from the ArmNamespaceObjectParser array\n", ObjId));
|
|
ASSERT (0);
|
|
return;
|
|
}
|
|
|
|
ParserArray = &ArmNamespaceObjectParser[ObjId];
|
|
break;
|
|
default:
|
|
// Not supported
|
|
DEBUG ((DEBUG_ERROR, "NameSpaceId 0x%x, ObjId 0x%x is not supported by the parser\n", NameSpaceId, ObjId));
|
|
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
|
|
));
|
|
if (ParserArray->Parser == NULL) {
|
|
DEBUG ((DEBUG_ERROR, "Parser not implemented\n"));
|
|
RemainingSize = 0;
|
|
} else {
|
|
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);
|
|
}
|