2 Configuration Manager Object parser.
4 Copyright (c) 2021 - 2022, ARM Limited. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
9 #include <Library/BaseLib.h>
10 #include <Library/DebugLib.h>
11 #include <ConfigurationManagerObject.h>
12 #include "ConfigurationManagerObjectParser.h"
30 /** A parser for EArmObjBootArchInfo.
32 STATIC CONST CM_OBJ_PARSER CmArmBootArchInfoParser
[] = {
33 { "BootArchFlags", 2, "0x%x", NULL
}
36 /** A parser for EArmObjPowerManagementProfileInfo.
38 STATIC CONST CM_OBJ_PARSER CmArmPowerManagementProfileInfoParser
[] = {
39 { "PowerManagementProfile", 1, "0x%x", NULL
}
42 /** A parser for EArmObjGicCInfo.
44 STATIC CONST CM_OBJ_PARSER CmArmGicCInfoParser
[] = {
45 { "CPUInterfaceNumber", 4, "0x%x", NULL
},
46 { "AcpiProcessorUid", 4, "0x%x", NULL
},
47 { "Flags", 4, "0x%x", NULL
},
48 { "ParkingProtocolVersion", 4, "0x%x", NULL
},
49 { "PerformanceInterruptGsiv", 4, "0x%x", NULL
},
50 { "ParkedAddress", 8, "0x%llx", NULL
},
51 { "PhysicalBaseAddress", 8, "0x%llx", NULL
},
52 { "GICV", 8, "0x%llx", NULL
},
53 { "GICH", 8, "0x%llx", NULL
},
54 { "VGICMaintenanceInterrupt", 4, "0x%x", NULL
},
55 { "GICRBaseAddress", 8, "0x%llx", NULL
},
56 { "MPIDR", 8, "0x%llx", NULL
},
57 { "ProcessorPowerEfficiencyClass", 1, "0x%x", NULL
},
58 { "SpeOverflowInterrupt", 2, "0x%x", NULL
},
59 { "ProximityDomain", 4, "0x%x", NULL
},
60 { "ClockDomain", 4, "0x%x", NULL
},
61 { "AffinityFlags", 4, "0x%x", NULL
},
62 { "CpcToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
}
65 /** A parser for EArmObjGicDInfo.
67 STATIC CONST CM_OBJ_PARSER CmArmGicDInfoParser
[] = {
68 { "PhysicalBaseAddress", 8, "0x%llx", NULL
},
69 { "SystemVectorBase", 4, "0x%x", NULL
},
70 { "GicVersion", 1, "0x%x", NULL
},
73 /** A parser for EArmObjGicMsiFrameInfo.
75 STATIC CONST CM_OBJ_PARSER CmArmGicMsiFrameInfoParser
[] = {
76 { "GicMsiFrameId", 4, "0x%x", NULL
},
77 { "PhysicalBaseAddress", 8, "0x%llx", NULL
},
78 { "Flags", 4, "0x%x", NULL
},
79 { "SPICount", 2, "0x%x", NULL
},
80 { "SPIBase", 2, "0x%x", NULL
}
83 /** A parser for EArmObjGicRedistributorInfo.
85 STATIC CONST CM_OBJ_PARSER CmArmGicRedistInfoParser
[] = {
86 { "DiscoveryRangeBaseAddress", 8, "0x%llx", NULL
},
87 { "DiscoveryRangeLength", 4, "0x%x", NULL
}
90 /** A parser for EArmObjGicItsInfo.
92 STATIC CONST CM_OBJ_PARSER CmArmGicItsInfoParser
[] = {
93 { "GicItsId", 4, "0x%x", NULL
},
94 { "PhysicalBaseAddress", 8, "0x%llx", NULL
},
95 { "ProximityDomain", 4, "0x%x", NULL
}
98 /** A parser for EArmObjSerialConsolePortInfo,
99 EArmObjSerialDebugPortInfo and EArmObjSerialPortInfo.
101 STATIC CONST CM_OBJ_PARSER CmArmSerialPortInfoParser
[] = {
102 { "BaseAddress", 8, "0x%llx", NULL
},
103 { "Interrupt", 4, "0x%x", NULL
},
104 { "BaudRate", 8, "0x%llx", NULL
},
105 { "Clock", 4, "0x%x", NULL
},
106 { "PortSubtype", 2, "0x%x", NULL
},
107 { "BaseAddressLength", 8, "0x%llx", NULL
},
108 { "AccessSize", 1, "0x%d", NULL
}
111 /** A parser for EArmObjGenericTimerInfo.
113 STATIC CONST CM_OBJ_PARSER CmArmGenericTimerInfoParser
[] = {
114 { "CounterControlBaseAddress", 8, "0x%llx", NULL
},
115 { "CounterReadBaseAddress", 8, "0x%llx", NULL
},
116 { "SecurePL1TimerGSIV", 4, "0x%x", NULL
},
117 { "SecurePL1TimerFlags", 4, "0x%x", NULL
},
118 { "NonSecurePL1TimerGSIV", 4, "0x%x", NULL
},
119 { "NonSecurePL1TimerFlags", 4, "0x%x", NULL
},
120 { "VirtualTimerGSIV", 4, "0x%x", NULL
},
121 { "VirtualTimerFlags", 4, "0x%x", NULL
},
122 { "NonSecurePL2TimerGSIV", 4, "0x%x", NULL
},
123 { "NonSecurePL2TimerFlags", 4, "0x%x", NULL
},
124 { "VirtualPL2TimerGSIV", 4, "0x%x", NULL
},
125 { "VirtualPL2TimerFlags", 4, "0x%x", NULL
}
128 /** A parser for EArmObjPlatformGTBlockInfo.
130 STATIC CONST CM_OBJ_PARSER CmArmGTBlockInfoParser
[] = {
131 { "GTBlockPhysicalAddress", 8, "0x%llx", NULL
},
132 { "GTBlockTimerFrameCount", 4, "0x%x", NULL
},
133 { "GTBlockTimerFrameToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
}
136 /** A parser for EArmObjGTBlockTimerFrameInfo.
138 STATIC CONST CM_OBJ_PARSER CmArmGTBlockTimerFrameInfoParser
[] = {
139 { "FrameNumber", 1, "0x%x", NULL
},
140 { "PhysicalAddressCntBase", 8, "0x%llx", NULL
},
141 { "PhysicalAddressCntEL0Base", 8, "0x%llx", NULL
},
142 { "PhysicalTimerGSIV", 4, "0x%x", NULL
},
143 { "PhysicalTimerFlags", 4, "0x%x", NULL
},
144 { "VirtualTimerGSIV", 4, "0x%x", NULL
},
145 { "VirtualTimerFlags", 4, "0x%x", NULL
},
146 { "CommonFlags", 4, "0x%x", NULL
}
149 /** A parser for EArmObjPlatformGenericWatchdogInfo.
151 STATIC CONST CM_OBJ_PARSER CmArmGenericWatchdogInfoParser
[] = {
152 { "ControlFrameAddress", 8, "0x%llx", NULL
},
153 { "RefreshFrameAddress", 8, "0x%llx", NULL
},
154 { "TimerGSIV", 4, "0x%x", NULL
},
155 { "Flags", 4, "0x%x", NULL
}
158 /** A parser for EArmObjPciConfigSpaceInfo.
160 STATIC CONST CM_OBJ_PARSER CmArmPciConfigSpaceInfoParser
[] = {
161 { "BaseAddress", 8, "0x%llx", NULL
},
162 { "PciSegmentGroupNumber", 2, "0x%x", NULL
},
163 { "StartBusNumber", 1, "0x%x", NULL
},
164 { "EndBusNumber", 1, "0x%x", NULL
},
165 { "AddressMapToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
166 { "InterruptMapToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
169 /** A parser for EArmObjHypervisorVendorIdentity.
171 STATIC CONST CM_OBJ_PARSER CmArmHypervisorVendorIdParser
[] = {
172 { "HypervisorVendorId", 8, "0x%llx", NULL
}
175 /** A parser for EArmObjFixedFeatureFlags.
177 STATIC CONST CM_OBJ_PARSER CmArmFixedFeatureFlagsParser
[] = {
178 { "Flags", 4, "0x%x", NULL
}
181 /** A parser for EArmObjItsGroup.
183 STATIC CONST CM_OBJ_PARSER CmArmItsGroupNodeParser
[] = {
184 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
185 { "ItsIdCount", 4, "0x%x", NULL
},
186 { "ItsIdToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
187 { "Identifier", 4, "0x%x", NULL
},
190 /** A parser for EArmObjNamedComponent.
192 STATIC CONST CM_OBJ_PARSER CmArmNamedComponentNodeParser
[] = {
193 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
194 { "IdMappingCount", 4, "0x%x", NULL
},
195 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
196 { "Flags", 4, "0x%x", NULL
},
197 { "CacheCoherent", 4, "0x%x", NULL
},
198 { "AllocationHints", 1, "0x%x", NULL
},
199 { "MemoryAccessFlags", 1, "0x%x", NULL
},
200 { "AddressSizeLimit", 1, "0x%x", NULL
},
201 { "ObjectName", sizeof (CHAR8
*), NULL
, PrintString
},
202 { "Identifier", 4, "0x%x", NULL
},
205 /** A parser for EArmObjRootComplex.
207 STATIC CONST CM_OBJ_PARSER CmArmRootComplexNodeParser
[] = {
208 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
209 { "IdMappingCount", 4, "0x%x", NULL
},
210 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
211 { "CacheCoherent", 4, "0x%x", NULL
},
212 { "AllocationHints", 1, "0x%x", NULL
},
213 { "MemoryAccessFlags", 1, "0x%x", NULL
},
214 { "AtsAttribute", 4, "0x%x", NULL
},
215 { "PciSegmentNumber", 4, "0x%x", NULL
},
216 { "MemoryAddressSize", 1, "0x%x", NULL
},
217 { "PasidCapabilities", 2, "0x%x", NULL
},
218 { "Flags", 4, "0x%x", NULL
},
219 { "Identifier", 4, "0x%x", NULL
},
222 /** A parser for EArmObjSmmuV1SmmuV2.
224 STATIC CONST CM_OBJ_PARSER CmArmSmmuV1SmmuV2NodeParser
[] = {
225 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
226 { "IdMappingCount", 4, "0x%x", NULL
},
227 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
228 { "BaseAddress", 8, "0x%llx", NULL
},
229 { "Span", 8, "0x%llx", NULL
},
230 { "Model", 4, "0x%x", NULL
},
231 { "Flags", 4, "0x%x", NULL
},
232 { "ContextInterruptCount", 4, "0x%x", NULL
},
233 { "ContextInterruptToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
234 { "PmuInterruptCount", 4, "0x%x", NULL
},
235 { "PmuInterruptToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
236 { "SMMU_NSgIrpt", 4, "0x%x", NULL
},
237 { "SMMU_NSgIrptFlags", 4, "0x%x", NULL
},
238 { "SMMU_NSgCfgIrpt", 4, "0x%x", NULL
},
239 { "SMMU_NSgCfgIrptFlags", 4, "0x%x", NULL
},
240 { "Identifier", 4, "0x%x", NULL
},
243 /** A parser for EArmObjSmmuV3.
245 STATIC CONST CM_OBJ_PARSER CmArmSmmuV3NodeParser
[] = {
246 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
247 { "IdMappingCount", 4, "0x%x", NULL
},
248 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
249 { "BaseAddress", 8, "0x%llx", NULL
},
250 { "Flags", 4, "0x%x", NULL
},
251 { "VatosAddress", 8, "0x%llx", NULL
},
252 { "Model", 4, "0x%x", NULL
},
253 { "EventInterrupt", 4, "0x%x", NULL
},
254 { "PriInterrupt", 4, "0x%x", NULL
},
255 { "GerrInterrupt", 4, "0x%x", NULL
},
256 { "SyncInterrupt", 4, "0x%x", NULL
},
257 { "ProximityDomain", 4, "0x%x", NULL
},
258 { "DeviceIdMappingIndex", 4, "0x%x", NULL
},
259 { "Identifier", 4, "0x%x", NULL
},
262 /** A parser for EArmObjPmcg.
264 STATIC CONST CM_OBJ_PARSER CmArmPmcgNodeParser
[] = {
265 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
266 { "IdMappingCount", 4, "0x%x", NULL
},
267 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
268 { "BaseAddress", 8, "0x%llx", NULL
},
269 { "OverflowInterrupt", 4, "0x%x", NULL
},
270 { "Page1BaseAddress", 8, "0x%llx", NULL
},
271 { "ReferenceToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
272 { "Identifier", 4, "0x%x", NULL
},
275 /** A parser for EArmObjGicItsIdentifierArray.
277 STATIC CONST CM_OBJ_PARSER CmArmGicItsIdentifierParser
[] = {
278 { "ItsId", 4, "0x%x", NULL
}
281 /** A parser for EArmObjIdMappingArray.
283 STATIC CONST CM_OBJ_PARSER CmArmIdMappingParser
[] = {
284 { "InputBase", 4, "0x%x", NULL
},
285 { "NumIds", 4, "0x%x", NULL
},
286 { "OutputBase", 4, "0x%x", NULL
},
287 { "OutputReferenceToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
288 { "Flags", 4, "0x%x", NULL
}
291 /** A parser for EArmObjSmmuInterruptArray.
293 STATIC CONST CM_OBJ_PARSER CmArmGenericInterruptParser
[] = {
294 { "Interrupt", 4, "0x%x", NULL
},
295 { "Flags", 4, "0x%x", NULL
}
298 /** A parser for EArmObjProcHierarchyInfo.
300 STATIC CONST CM_OBJ_PARSER CmArmProcHierarchyInfoParser
[] = {
301 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
302 { "Flags", 4, "0x%x", NULL
},
303 { "ParentToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
304 { "GicCToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
305 { "NoOfPrivateResources", 4, "0x%x", NULL
},
306 { "PrivateResourcesArrayToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
}
309 /** A parser for EArmObjCacheInfo.
311 STATIC CONST CM_OBJ_PARSER CmArmCacheInfoParser
[] = {
312 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
313 { "NextLevelOfCacheToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
314 { "Size", 4, "0x%x", NULL
},
315 { "NumberOfSets", 4, "0x%x", NULL
},
316 { "Associativity", 4, "0x%x", NULL
},
317 { "Attributes", 1, "0x%x", NULL
},
318 { "LineSize", 2, "0x%x", NULL
}
321 /** A parser for EArmObjProcNodeIdInfo.
323 STATIC CONST CM_OBJ_PARSER CmArmProcNodeIdInfoParser
[] = {
324 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
325 { "VendorId", 4, "0x%p", NULL
},
326 { "Level1Id", 8, "0x%x", NULL
},
327 { "Level2Id", 8, "0x%x", NULL
},
328 { "MajorRev", 2, "0x%x", NULL
},
329 { "MinorRev", 2, "0x%x", NULL
},
330 { "SpinRev", 2, "0x%x", NULL
}
333 /** A parser for EArmObjCmRef.
335 STATIC CONST CM_OBJ_PARSER CmArmObjRefParser
[] = {
336 { "ReferenceToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
}
339 /** A parser for EArmObjMemoryAffinityInfo.
341 STATIC CONST CM_OBJ_PARSER CmArmMemoryAffinityInfoParser
[] = {
342 { "ProximityDomain", 4, "0x%x", NULL
},
343 { "BaseAddress", 8, "0x%llx", NULL
},
344 { "Length", 8, "0x%llx", NULL
},
345 { "Flags", 4, "0x%x", NULL
}
348 /** A parser for EArmObjDeviceHandleAcpi.
350 STATIC CONST CM_OBJ_PARSER CmArmDeviceHandleAcpiParser
[] = {
351 { "Hid", 8, "0x%llx", NULL
},
352 { "Uid", 4, "0x%x", NULL
}
355 /** A parser for EArmObjDeviceHandlePci.
357 STATIC CONST CM_OBJ_PARSER CmArmDeviceHandlePciParser
[] = {
358 { "SegmentNumber", 2, "0x%x", NULL
},
359 { "BusNumber", 1, "0x%x", NULL
},
360 { "DeviceNumber", 1, "0x%x", NULL
},
361 { "FunctionNumber", 1, "0x%x", NULL
}
364 /** A parser for EArmObjGenericInitiatorAffinityInfo.
366 STATIC CONST CM_OBJ_PARSER CmArmGenericInitiatorAffinityInfoParser
[] = {
367 { "ProximityDomain", 4, "0x%x", NULL
},
368 { "Flags", 4, "0x%x", NULL
},
369 { "DeviceHandleType", 1, "0x%x", NULL
},
370 { "DeviceHandleToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
}
373 /** A parser for EArmObjCmn600Info.
375 STATIC CONST CM_OBJ_PARSER CmArmCmn600InfoParser
[] = {
376 { "PeriphBaseAddress", 8, "0x%llx", NULL
},
377 { "PeriphBaseAddressLength", 8, "0x%llx", NULL
},
378 { "RootNodeBaseAddress", 8, "0x%llx", NULL
},
379 { "DtcCount", 1, "0x%x", NULL
},
380 { "DtcInterrupt[0]", 4, "0x%x", NULL
},
381 { "DtcFlags[0]", 4, "0x%x", NULL
},
382 { "DtcInterrupt[1]", 4, "0x%x", NULL
},
383 { "DtcFlags[1]", 4, "0x%x", NULL
},
384 { "DtcInterrupt[2]", 4, "0x%x", NULL
},
385 { "DtcFlags[2]", 4, "0x%x", NULL
},
386 { "DtcInterrupt[3]", 4, "0x%x", NULL
},
387 { "DtcFlags[3]", 4, "0x%x", NULL
}
390 /** A parser for the EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE structure.
392 STATIC CONST CM_OBJ_PARSER AcpiGenericAddressParser
[] = {
393 { "AddressSpaceId", 1, "%d", NULL
},
394 { "RegisterBitWidth", 1, "%d", NULL
},
395 { "RegisterBitOffset", 1, "%d", NULL
},
396 { "AccessSize", 1, "%d", NULL
},
397 { "Address", 8, "0x%llx", NULL
},
400 /** A parser for EArmObjLpiInfo.
402 STATIC CONST CM_OBJ_PARSER CmArmLpiInfoParser
[] = {
403 { "MinResidency", 4, "0x%x", NULL
},
404 { "WorstCaseWakeLatency", 4, "0x%x", NULL
},
405 { "Flags", 4, "0x%x", NULL
},
406 { "ArchFlags", 4, "0x%x", NULL
},
407 { "ResCntFreq", 4, "0x%x", NULL
},
408 { "EnableParentState", 4, "0x%x", NULL
},
409 { "IsInteger", 1, "%d", NULL
},
410 { "IntegerEntryMethod", 8, "0x%llx", NULL
},
411 { "RegisterEntryMethod", sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE
),
412 NULL
, NULL
, AcpiGenericAddressParser
,
413 ARRAY_SIZE (AcpiGenericAddressParser
) },
414 { "ResidencyCounterRegister", sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE
),
415 NULL
, NULL
, AcpiGenericAddressParser
,
416 ARRAY_SIZE (AcpiGenericAddressParser
) },
417 { "UsageCounterRegister", sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE
),
418 NULL
, NULL
, AcpiGenericAddressParser
,
419 ARRAY_SIZE (AcpiGenericAddressParser
) },
420 { "StateName", 16, "0x%a", NULL
},
423 /** A parser for EArmObjPciAddressMapInfo.
425 STATIC CONST CM_OBJ_PARSER CmArmPciAddressMapInfoParser
[] = {
426 { "SpaceCode", 1, "%d", NULL
},
427 { "PciAddress", 8, "0x%llx", NULL
},
428 { "CpuAddress", 8, "0x%llx", NULL
},
429 { "AddressSize", 8, "0x%llx", NULL
},
432 /** A parser for EArmObjPciInterruptMapInfo.
434 STATIC CONST CM_OBJ_PARSER CmPciInterruptMapInfoParser
[] = {
435 { "PciBus", 1, "0x%x", NULL
},
436 { "PciDevice", 1, "0x%x", NULL
},
437 { "PciInterrupt", 1, "0x%x", NULL
},
438 { "IntcInterrupt", sizeof (CM_ARM_GENERIC_INTERRUPT
),
439 NULL
, NULL
, CmArmGenericInterruptParser
,
440 ARRAY_SIZE (CmArmGenericInterruptParser
) },
443 /** A parser for EArmObjRmr.
445 STATIC CONST CM_OBJ_PARSER CmArmRmrInfoParser
[] = {
446 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
447 { "IdMappingCount", 4, "0x%x", NULL
},
448 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
449 { "Identifier", 4, "0x%x", NULL
},
450 { "Flags", 4, "0x%x", NULL
},
451 { "MemRangeDescCount", 4, "0x%x", NULL
},
452 { "MemRangeDescToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
455 /** A parser for EArmObjMemoryRangeDescriptor.
457 STATIC CONST CM_OBJ_PARSER CmArmMemoryRangeDescriptorInfoParser
[] = {
458 { "BaseAddress", 8, "0x%llx", NULL
},
459 { "Length", 8, "0x%llx", NULL
},
462 /** A parser for EArmObjCpcInfo.
464 STATIC CONST CM_OBJ_PARSER CmArmCpcInfoParser
[] = {
465 { "Revision", 4, "0x%lx", NULL
},
466 { "HighestPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
467 NULL
, NULL
, AcpiGenericAddressParser
,
468 ARRAY_SIZE (AcpiGenericAddressParser
) },
469 { "HighestPerformanceInteger", 4, "0x%lx", NULL
},
470 { "NominalPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
471 NULL
, NULL
, AcpiGenericAddressParser
,
472 ARRAY_SIZE (AcpiGenericAddressParser
) },
473 { "NominalPerformanceInteger", 4, "0x%lx", NULL
},
474 { "LowestNonlinearPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
475 NULL
, NULL
, AcpiGenericAddressParser
,
476 ARRAY_SIZE (AcpiGenericAddressParser
) },
477 { "LowestNonlinearPerformanceInteger", 4, "0x%lx", NULL
},
478 { "LowestPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
479 NULL
, NULL
, AcpiGenericAddressParser
,
480 ARRAY_SIZE (AcpiGenericAddressParser
) },
481 { "LowestPerformanceInteger", 4, "0x%lx", NULL
},
482 { "GuaranteedPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
483 NULL
, NULL
, AcpiGenericAddressParser
,
484 ARRAY_SIZE (AcpiGenericAddressParser
) },
485 { "DesiredPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
486 NULL
, NULL
, AcpiGenericAddressParser
,
487 ARRAY_SIZE (AcpiGenericAddressParser
) },
488 { "MinimumPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
489 NULL
, NULL
, AcpiGenericAddressParser
,
490 ARRAY_SIZE (AcpiGenericAddressParser
) },
491 { "MaximumPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
492 NULL
, NULL
, AcpiGenericAddressParser
,
493 ARRAY_SIZE (AcpiGenericAddressParser
) },
494 { "PerformanceReductionToleranceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
495 NULL
, NULL
, AcpiGenericAddressParser
,
496 ARRAY_SIZE (AcpiGenericAddressParser
) },
497 { "TimeWindowRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
498 NULL
, NULL
, AcpiGenericAddressParser
,
499 ARRAY_SIZE (AcpiGenericAddressParser
) },
500 { "CounterWraparoundTimeBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
501 NULL
, NULL
, AcpiGenericAddressParser
,
502 ARRAY_SIZE (AcpiGenericAddressParser
) },
503 { "CounterWraparoundTimeInteger", 4, "0x%lx", NULL
},
504 { "ReferencePerformanceCounterRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
505 NULL
, NULL
, AcpiGenericAddressParser
,
506 ARRAY_SIZE (AcpiGenericAddressParser
) },
507 { "DeliveredPerformanceCounterRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
508 NULL
, NULL
, AcpiGenericAddressParser
,
509 ARRAY_SIZE (AcpiGenericAddressParser
) },
510 { "PerformanceLimitedRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
511 NULL
, NULL
, AcpiGenericAddressParser
,
512 ARRAY_SIZE (AcpiGenericAddressParser
) },
513 { "CPPCEnableRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
514 NULL
, NULL
, AcpiGenericAddressParser
,
515 ARRAY_SIZE (AcpiGenericAddressParser
) },
516 { "AutonomousSelectionEnableBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
517 NULL
, NULL
, AcpiGenericAddressParser
,
518 ARRAY_SIZE (AcpiGenericAddressParser
) },
519 { "AutonomousSelectionEnableInteger", 4, "0x%lx", NULL
},
520 { "AutonomousActivityWindowRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
521 NULL
, NULL
, AcpiGenericAddressParser
,
522 ARRAY_SIZE (AcpiGenericAddressParser
) },
523 { "EnergyPerformancePreferenceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
524 NULL
, NULL
, AcpiGenericAddressParser
,
525 ARRAY_SIZE (AcpiGenericAddressParser
) },
526 { "ReferencePerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
527 NULL
, NULL
, AcpiGenericAddressParser
,
528 ARRAY_SIZE (AcpiGenericAddressParser
) },
529 { "ReferencePerformanceInteger", 4, "0x%lx", NULL
},
530 { "LowestFrequencyBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
531 NULL
, NULL
, AcpiGenericAddressParser
,
532 ARRAY_SIZE (AcpiGenericAddressParser
) },
533 { "LowestFrequencyInteger", 4, "0x%lx", NULL
},
534 { "NominalFrequencyBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
535 NULL
, NULL
, AcpiGenericAddressParser
,
536 ARRAY_SIZE (AcpiGenericAddressParser
) },
537 { "NominalFrequencyInteger", 4, "0x%lx", NULL
},
540 /** A parser for Arm namespace objects.
542 STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser
[] = {
543 { "EArmObjReserved", NULL
, 0 },
544 { "EArmObjBootArchInfo", CmArmBootArchInfoParser
,
545 ARRAY_SIZE (CmArmBootArchInfoParser
) },
546 { "EArmObjCpuInfo", NULL
, 0 },
547 { "EArmObjPowerManagementProfileInfo", CmArmPowerManagementProfileInfoParser
,
548 ARRAY_SIZE (CmArmPowerManagementProfileInfoParser
) },
549 { "EArmObjGicCInfo", CmArmGicCInfoParser
, ARRAY_SIZE (CmArmGicCInfoParser
) },
550 { "EArmObjGicDInfo", CmArmGicDInfoParser
, ARRAY_SIZE (CmArmGicDInfoParser
) },
551 { "EArmObjGicMsiFrameInfo", CmArmGicMsiFrameInfoParser
,
552 ARRAY_SIZE (CmArmGicMsiFrameInfoParser
) },
553 { "EArmObjGicRedistributorInfo", CmArmGicRedistInfoParser
,
554 ARRAY_SIZE (CmArmGicRedistInfoParser
) },
555 { "EArmObjGicItsInfo", CmArmGicItsInfoParser
,
556 ARRAY_SIZE (CmArmGicItsInfoParser
) },
557 { "EArmObjSerialConsolePortInfo", CmArmSerialPortInfoParser
,
558 ARRAY_SIZE (CmArmSerialPortInfoParser
) },
559 { "EArmObjSerialDebugPortInfo", CmArmSerialPortInfoParser
,
560 ARRAY_SIZE (CmArmSerialPortInfoParser
) },
561 { "EArmObjGenericTimerInfo", CmArmGenericTimerInfoParser
,
562 ARRAY_SIZE (CmArmGenericTimerInfoParser
) },
563 { "EArmObjPlatformGTBlockInfo", CmArmGTBlockInfoParser
,
564 ARRAY_SIZE (CmArmGTBlockInfoParser
) },
565 { "EArmObjGTBlockTimerFrameInfo", CmArmGTBlockTimerFrameInfoParser
,
566 ARRAY_SIZE (CmArmGTBlockTimerFrameInfoParser
) },
567 { "EArmObjPlatformGenericWatchdogInfo", CmArmGenericWatchdogInfoParser
,
568 ARRAY_SIZE (CmArmGenericWatchdogInfoParser
) },
569 { "EArmObjPciConfigSpaceInfo", CmArmPciConfigSpaceInfoParser
,
570 ARRAY_SIZE (CmArmPciConfigSpaceInfoParser
) },
571 { "EArmObjHypervisorVendorIdentity", CmArmHypervisorVendorIdParser
,
572 ARRAY_SIZE (CmArmHypervisorVendorIdParser
) },
573 { "EArmObjFixedFeatureFlags", CmArmFixedFeatureFlagsParser
,
574 ARRAY_SIZE (CmArmFixedFeatureFlagsParser
) },
575 { "EArmObjItsGroup", CmArmItsGroupNodeParser
,
576 ARRAY_SIZE (CmArmItsGroupNodeParser
) },
577 { "EArmObjNamedComponent", CmArmNamedComponentNodeParser
,
578 ARRAY_SIZE (CmArmNamedComponentNodeParser
) },
579 { "EArmObjRootComplex", CmArmRootComplexNodeParser
,
580 ARRAY_SIZE (CmArmRootComplexNodeParser
) },
581 { "EArmObjSmmuV1SmmuV2", CmArmSmmuV1SmmuV2NodeParser
,
582 ARRAY_SIZE (CmArmSmmuV1SmmuV2NodeParser
) },
583 { "EArmObjSmmuV3", CmArmSmmuV3NodeParser
,
584 ARRAY_SIZE (CmArmSmmuV3NodeParser
) },
585 { "EArmObjPmcg", CmArmPmcgNodeParser
, ARRAY_SIZE (CmArmPmcgNodeParser
) },
586 { "EArmObjGicItsIdentifierArray", CmArmGicItsIdentifierParser
,
587 ARRAY_SIZE (CmArmGicItsIdentifierParser
) },
588 { "EArmObjIdMappingArray", CmArmIdMappingParser
,
589 ARRAY_SIZE (CmArmIdMappingParser
) },
590 { "EArmObjSmmuInterruptArray", CmArmGenericInterruptParser
,
591 ARRAY_SIZE (CmArmGenericInterruptParser
) },
592 { "EArmObjProcHierarchyInfo", CmArmProcHierarchyInfoParser
,
593 ARRAY_SIZE (CmArmProcHierarchyInfoParser
) },
594 { "EArmObjCacheInfo", CmArmCacheInfoParser
,
595 ARRAY_SIZE (CmArmCacheInfoParser
) },
596 { "EArmObjProcNodeIdInfo", CmArmProcNodeIdInfoParser
,
597 ARRAY_SIZE (CmArmProcNodeIdInfoParser
) },
598 { "EArmObjCmRef", CmArmObjRefParser
, ARRAY_SIZE (CmArmObjRefParser
) },
599 { "EArmObjMemoryAffinityInfo", CmArmMemoryAffinityInfoParser
,
600 ARRAY_SIZE (CmArmMemoryAffinityInfoParser
) },
601 { "EArmObjDeviceHandleAcpi", CmArmDeviceHandleAcpiParser
,
602 ARRAY_SIZE (CmArmDeviceHandleAcpiParser
) },
603 { "EArmObjDeviceHandlePci", CmArmDeviceHandlePciParser
,
604 ARRAY_SIZE (CmArmDeviceHandlePciParser
) },
605 { "EArmObjGenericInitiatorAffinityInfo",
606 CmArmGenericInitiatorAffinityInfoParser
,
607 ARRAY_SIZE (CmArmGenericInitiatorAffinityInfoParser
) },
608 { "EArmObjSerialPortInfo", CmArmSerialPortInfoParser
,
609 ARRAY_SIZE (CmArmSerialPortInfoParser
) },
610 { "EArmObjCmn600Info", CmArmCmn600InfoParser
,
611 ARRAY_SIZE (CmArmCmn600InfoParser
) },
612 { "EArmObjLpiInfo", CmArmLpiInfoParser
,
613 ARRAY_SIZE (CmArmLpiInfoParser
) },
614 { "EArmObjPciAddressMapInfo", CmArmPciAddressMapInfoParser
,
615 ARRAY_SIZE (CmArmPciAddressMapInfoParser
) },
616 { "EArmObjPciInterruptMapInfo", CmPciInterruptMapInfoParser
,
617 ARRAY_SIZE (CmPciInterruptMapInfoParser
) },
618 { "EArmObjRmr", CmArmRmrInfoParser
,
619 ARRAY_SIZE (CmArmRmrInfoParser
) },
620 { "EArmObjMemoryRangeDescriptor", CmArmMemoryRangeDescriptorInfoParser
,
621 ARRAY_SIZE (CmArmMemoryRangeDescriptorInfoParser
) },
622 { "EArmObjCpcInfo", CmArmCpcInfoParser
,
623 ARRAY_SIZE (CmArmCpcInfoParser
) },
624 { "EArmObjMax", NULL
, 0 },
627 /** A parser for EStdObjCfgMgrInfo.
629 STATIC CONST CM_OBJ_PARSER StdObjCfgMgrInfoParser
[] = {
630 { "Revision", 4, "0x%x", NULL
},
631 { "OemId[6]", 6, "%C%C%C%C%C%C", PrintOemId
}
634 /** A parser for EStdObjAcpiTableList.
636 STATIC CONST CM_OBJ_PARSER StdObjAcpiTableInfoParser
[] = {
637 { "AcpiTableSignature", 4, "0x%x", NULL
},
638 { "AcpiTableRevision", 1, "%d", NULL
},
639 { "TableGeneratorId", sizeof (ACPI_TABLE_GENERATOR_ID
), "0x%x", NULL
},
640 { "AcpiTableData", sizeof (EFI_ACPI_DESCRIPTION_HEADER
*), "0x%p", NULL
},
641 { "OemTableId", 8, "0x%LLX", NULL
},
642 { "OemRevision", 4, "0x%x", NULL
},
643 { "MinorRevision", 1, "0x%x", NULL
},
646 /** A parser for EStdObjSmbiosTableList.
648 STATIC CONST CM_OBJ_PARSER StdObjSmbiosTableInfoParser
[] = {
649 { "TableGeneratorId", sizeof (SMBIOS_TABLE_GENERATOR_ID
), "0x%x", NULL
},
650 { "SmbiosTableData", sizeof (SMBIOS_STRUCTURE
*), "0x%p", NULL
}
653 /** A parser for Standard namespace objects.
655 STATIC CONST CM_OBJ_PARSER_ARRAY StdNamespaceObjectParser
[] = {
656 { "EStdObjCfgMgrInfo", StdObjCfgMgrInfoParser
,
657 ARRAY_SIZE (StdObjCfgMgrInfoParser
) },
658 { "EStdObjAcpiTableList", StdObjAcpiTableInfoParser
,
659 ARRAY_SIZE (StdObjAcpiTableInfoParser
) },
660 { "EStdObjSmbiosTableList", StdObjSmbiosTableInfoParser
,
661 ARRAY_SIZE (StdObjSmbiosTableInfoParser
) },
666 @param [in] Format Format to print the Ptr.
667 @param [in] Ptr Pointer to the OEM Id.
673 IN CONST CHAR8
*Format
,
679 (Format
!= NULL
) ? Format
: "%C%C%C%C%C%C",
691 The string must be NULL terminated.
693 @param [in] Format Format to print the Ptr.
694 @param [in] Ptr Pointer to the string.
704 DEBUG ((DEBUG_ERROR
, "%a", Ptr
));
707 /** Print fields of the objects.
709 @param [in] Data Pointer to the object to print.
710 @param [in] Parser Parser containing the object fields.
711 @param [in] ItemCount Number of entries/fields in the Parser.
712 @param [in] RemainingSize Parse at most *RemainingSize bytes.
713 This function decrements the value
714 from the number bytes consumed.
715 @param [in] IndentLevel Indentation to use when printing.
721 IN CONST CM_OBJ_PARSER
*Parser
,
723 IN INTN
*RemainingSize
,
724 IN UINT32 IndentLevel
731 if ((Data
== NULL
) ||
734 (RemainingSize
== NULL
))
741 for (Index
= 0; Index
< ItemCount
; Index
++) {
742 // Check there is enough space in left.
743 *RemainingSize
-= Parser
[Index
].Length
;
744 if (*RemainingSize
< 0) {
747 "\nERROR: %a: Buffer overrun\n",
748 Parser
[Index
].NameStr
755 for (IndentIndex
= 0; IndentIndex
< IndentLevel
; IndentIndex
++) {
756 DEBUG ((DEBUG_ERROR
, " "));
762 OUTPUT_FIELD_COLUMN_WIDTH
- 2 * IndentLevel
,
763 Parser
[Index
].NameStr
765 if (Parser
[Index
].PrintFormatter
!= NULL
) {
766 Parser
[Index
].PrintFormatter (Parser
[Index
].Format
, Data
);
767 } else if (Parser
[Index
].Format
!= NULL
) {
768 switch (Parser
[Index
].Length
) {
770 DEBUG ((DEBUG_ERROR
, Parser
[Index
].Format
, *(UINT8
*)Data
));
773 DEBUG ((DEBUG_ERROR
, Parser
[Index
].Format
, *(UINT16
*)Data
));
776 DEBUG ((DEBUG_ERROR
, Parser
[Index
].Format
, *(UINT32
*)Data
));
779 DEBUG ((DEBUG_ERROR
, Parser
[Index
].Format
, ReadUnaligned64 (Data
)));
784 "\nERROR: %a: CANNOT PARSE THIS FIELD, Field Length = %d\n",
785 Parser
[Index
].NameStr
,
789 } else if (Parser
[Index
].SubObjParser
!= NULL
) {
790 SubStructSize
= Parser
[Index
].Length
;
792 DEBUG ((DEBUG_ERROR
, "\n"));
795 Parser
[Index
].SubObjParser
,
796 Parser
[Index
].SubObjItemCount
,
804 "\nERROR: %a: CANNOT PARSE THIS FIELD, Field Length = %d\n",
805 Parser
[Index
].NameStr
,
810 DEBUG ((DEBUG_ERROR
, "\n"));
811 Data
= (UINT8
*)Data
+ Parser
[Index
].Length
;
815 /** Parse and print a CmObjDesc.
817 @param [in] CmObjDesc The CmObjDesc to parse and print.
822 IN CONST CM_OBJ_DESCRIPTOR
*CmObjDesc
831 CONST CM_OBJ_PARSER_ARRAY
*ParserArray
;
833 if ((CmObjDesc
== NULL
) || (CmObjDesc
->Data
== NULL
)) {
837 NameSpaceId
= GET_CM_NAMESPACE_ID (CmObjDesc
->ObjectId
);
838 ObjId
= GET_CM_OBJECT_ID (CmObjDesc
->ObjectId
);
840 switch (NameSpaceId
) {
841 case EObjNameSpaceStandard
:
842 if (ObjId
>= EStdObjMax
) {
847 ParserArray
= &StdNamespaceObjectParser
[ObjId
];
849 case EObjNameSpaceArm
:
850 if (ObjId
>= EArmObjMax
) {
855 ParserArray
= &ArmNamespaceObjectParser
[ObjId
];
863 ObjectCount
= CmObjDesc
->Count
;
864 RemainingSize
= CmObjDesc
->Size
;
867 for (ObjIndex
= 0; ObjIndex
< ObjectCount
; ObjIndex
++) {
871 OUTPUT_FIELD_COLUMN_WIDTH
,
872 ParserArray
->ObjectName
,
877 (VOID
*)((UINTN
)CmObjDesc
->Data
+ Offset
),
879 ParserArray
->ItemCount
,
883 if ((RemainingSize
> CmObjDesc
->Size
) ||
890 Offset
= CmObjDesc
->Size
- RemainingSize
;
893 ASSERT (RemainingSize
== 0);