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
},
307 { "LpiToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
308 { "OverrideNameUidEnabled", 1, "%d", NULL
},
309 { "OverrideName", 2, "0x%x", NULL
},
310 { "OverrideUid", 4, "0x%x", NULL
}
313 /** A parser for EArmObjCacheInfo.
315 STATIC CONST CM_OBJ_PARSER CmArmCacheInfoParser
[] = {
316 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
317 { "NextLevelOfCacheToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
318 { "Size", 4, "0x%x", NULL
},
319 { "NumberOfSets", 4, "0x%x", NULL
},
320 { "Associativity", 4, "0x%x", NULL
},
321 { "Attributes", 1, "0x%x", NULL
},
322 { "LineSize", 2, "0x%x", NULL
},
323 { "CacheId", 4, "0x%x", NULL
},
326 /** A parser for EArmObjProcNodeIdInfo.
328 STATIC CONST CM_OBJ_PARSER CmArmProcNodeIdInfoParser
[] = {
329 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
330 { "VendorId", 4, "0x%p", NULL
},
331 { "Level1Id", 8, "0x%x", NULL
},
332 { "Level2Id", 8, "0x%x", NULL
},
333 { "MajorRev", 2, "0x%x", NULL
},
334 { "MinorRev", 2, "0x%x", NULL
},
335 { "SpinRev", 2, "0x%x", NULL
}
338 /** A parser for EArmObjCmRef.
340 STATIC CONST CM_OBJ_PARSER CmArmObjRefParser
[] = {
341 { "ReferenceToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
}
344 /** A parser for EArmObjMemoryAffinityInfo.
346 STATIC CONST CM_OBJ_PARSER CmArmMemoryAffinityInfoParser
[] = {
347 { "ProximityDomain", 4, "0x%x", NULL
},
348 { "BaseAddress", 8, "0x%llx", NULL
},
349 { "Length", 8, "0x%llx", NULL
},
350 { "Flags", 4, "0x%x", NULL
}
353 /** A parser for EArmObjDeviceHandleAcpi.
355 STATIC CONST CM_OBJ_PARSER CmArmDeviceHandleAcpiParser
[] = {
356 { "Hid", 8, "0x%llx", NULL
},
357 { "Uid", 4, "0x%x", NULL
}
360 /** A parser for EArmObjDeviceHandlePci.
362 STATIC CONST CM_OBJ_PARSER CmArmDeviceHandlePciParser
[] = {
363 { "SegmentNumber", 2, "0x%x", NULL
},
364 { "BusNumber", 1, "0x%x", NULL
},
365 { "DeviceNumber", 1, "0x%x", NULL
},
366 { "FunctionNumber", 1, "0x%x", NULL
}
369 /** A parser for EArmObjGenericInitiatorAffinityInfo.
371 STATIC CONST CM_OBJ_PARSER CmArmGenericInitiatorAffinityInfoParser
[] = {
372 { "ProximityDomain", 4, "0x%x", NULL
},
373 { "Flags", 4, "0x%x", NULL
},
374 { "DeviceHandleType", 1, "0x%x", NULL
},
375 { "DeviceHandleToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
}
378 /** A parser for EArmObjCmn600Info.
380 STATIC CONST CM_OBJ_PARSER CmArmCmn600InfoParser
[] = {
381 { "PeriphBaseAddress", 8, "0x%llx", NULL
},
382 { "PeriphBaseAddressLength", 8, "0x%llx", NULL
},
383 { "RootNodeBaseAddress", 8, "0x%llx", NULL
},
384 { "DtcCount", 1, "0x%x", NULL
},
385 { "DtcInterrupt[0]", 4, "0x%x", NULL
},
386 { "DtcFlags[0]", 4, "0x%x", NULL
},
387 { "DtcInterrupt[1]", 4, "0x%x", NULL
},
388 { "DtcFlags[1]", 4, "0x%x", NULL
},
389 { "DtcInterrupt[2]", 4, "0x%x", NULL
},
390 { "DtcFlags[2]", 4, "0x%x", NULL
},
391 { "DtcInterrupt[3]", 4, "0x%x", NULL
},
392 { "DtcFlags[3]", 4, "0x%x", NULL
}
395 /** A parser for the EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE structure.
397 STATIC CONST CM_OBJ_PARSER AcpiGenericAddressParser
[] = {
398 { "AddressSpaceId", 1, "%d", NULL
},
399 { "RegisterBitWidth", 1, "%d", NULL
},
400 { "RegisterBitOffset", 1, "%d", NULL
},
401 { "AccessSize", 1, "%d", NULL
},
402 { "Address", 8, "0x%llx", NULL
},
405 /** A parser for EArmObjLpiInfo.
407 STATIC CONST CM_OBJ_PARSER CmArmLpiInfoParser
[] = {
408 { "MinResidency", 4, "0x%x", NULL
},
409 { "WorstCaseWakeLatency", 4, "0x%x", NULL
},
410 { "Flags", 4, "0x%x", NULL
},
411 { "ArchFlags", 4, "0x%x", NULL
},
412 { "ResCntFreq", 4, "0x%x", NULL
},
413 { "EnableParentState", 4, "0x%x", NULL
},
414 { "IsInteger", 1, "%d", NULL
},
415 { "IntegerEntryMethod", 8, "0x%llx", NULL
},
416 { "RegisterEntryMethod", sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE
),
417 NULL
, NULL
, AcpiGenericAddressParser
,
418 ARRAY_SIZE (AcpiGenericAddressParser
) },
419 { "ResidencyCounterRegister", sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE
),
420 NULL
, NULL
, AcpiGenericAddressParser
,
421 ARRAY_SIZE (AcpiGenericAddressParser
) },
422 { "UsageCounterRegister", sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE
),
423 NULL
, NULL
, AcpiGenericAddressParser
,
424 ARRAY_SIZE (AcpiGenericAddressParser
) },
425 { "StateName", 16, NULL
, PrintString
},
428 /** A parser for EArmObjPciAddressMapInfo.
430 STATIC CONST CM_OBJ_PARSER CmArmPciAddressMapInfoParser
[] = {
431 { "SpaceCode", 1, "%d", NULL
},
432 { "PciAddress", 8, "0x%llx", NULL
},
433 { "CpuAddress", 8, "0x%llx", NULL
},
434 { "AddressSize", 8, "0x%llx", NULL
},
437 /** A parser for EArmObjPciInterruptMapInfo.
439 STATIC CONST CM_OBJ_PARSER CmPciInterruptMapInfoParser
[] = {
440 { "PciBus", 1, "0x%x", NULL
},
441 { "PciDevice", 1, "0x%x", NULL
},
442 { "PciInterrupt", 1, "0x%x", NULL
},
443 { "IntcInterrupt", sizeof (CM_ARM_GENERIC_INTERRUPT
),
444 NULL
, NULL
, CmArmGenericInterruptParser
,
445 ARRAY_SIZE (CmArmGenericInterruptParser
) },
448 /** A parser for EArmObjRmr.
450 STATIC CONST CM_OBJ_PARSER CmArmRmrInfoParser
[] = {
451 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
452 { "IdMappingCount", 4, "0x%x", NULL
},
453 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
454 { "Identifier", 4, "0x%x", NULL
},
455 { "Flags", 4, "0x%x", NULL
},
456 { "MemRangeDescCount", 4, "0x%x", NULL
},
457 { "MemRangeDescToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
460 /** A parser for EArmObjMemoryRangeDescriptor.
462 STATIC CONST CM_OBJ_PARSER CmArmMemoryRangeDescriptorInfoParser
[] = {
463 { "BaseAddress", 8, "0x%llx", NULL
},
464 { "Length", 8, "0x%llx", NULL
},
467 /** A parser for EArmObjCpcInfo.
469 STATIC CONST CM_OBJ_PARSER CmArmCpcInfoParser
[] = {
470 { "Revision", 4, "0x%lx", NULL
},
471 { "HighestPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
472 NULL
, NULL
, AcpiGenericAddressParser
,
473 ARRAY_SIZE (AcpiGenericAddressParser
) },
474 { "HighestPerformanceInteger", 4, "0x%lx", NULL
},
475 { "NominalPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
476 NULL
, NULL
, AcpiGenericAddressParser
,
477 ARRAY_SIZE (AcpiGenericAddressParser
) },
478 { "NominalPerformanceInteger", 4, "0x%lx", NULL
},
479 { "LowestNonlinearPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
480 NULL
, NULL
, AcpiGenericAddressParser
,
481 ARRAY_SIZE (AcpiGenericAddressParser
) },
482 { "LowestNonlinearPerformanceInteger", 4, "0x%lx", NULL
},
483 { "LowestPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
484 NULL
, NULL
, AcpiGenericAddressParser
,
485 ARRAY_SIZE (AcpiGenericAddressParser
) },
486 { "LowestPerformanceInteger", 4, "0x%lx", NULL
},
487 { "GuaranteedPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
488 NULL
, NULL
, AcpiGenericAddressParser
,
489 ARRAY_SIZE (AcpiGenericAddressParser
) },
490 { "DesiredPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
491 NULL
, NULL
, AcpiGenericAddressParser
,
492 ARRAY_SIZE (AcpiGenericAddressParser
) },
493 { "MinimumPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
494 NULL
, NULL
, AcpiGenericAddressParser
,
495 ARRAY_SIZE (AcpiGenericAddressParser
) },
496 { "MaximumPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
497 NULL
, NULL
, AcpiGenericAddressParser
,
498 ARRAY_SIZE (AcpiGenericAddressParser
) },
499 { "PerformanceReductionToleranceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
500 NULL
, NULL
, AcpiGenericAddressParser
,
501 ARRAY_SIZE (AcpiGenericAddressParser
) },
502 { "TimeWindowRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
503 NULL
, NULL
, AcpiGenericAddressParser
,
504 ARRAY_SIZE (AcpiGenericAddressParser
) },
505 { "CounterWraparoundTimeBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
506 NULL
, NULL
, AcpiGenericAddressParser
,
507 ARRAY_SIZE (AcpiGenericAddressParser
) },
508 { "CounterWraparoundTimeInteger", 4, "0x%lx", NULL
},
509 { "ReferencePerformanceCounterRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
510 NULL
, NULL
, AcpiGenericAddressParser
,
511 ARRAY_SIZE (AcpiGenericAddressParser
) },
512 { "DeliveredPerformanceCounterRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
513 NULL
, NULL
, AcpiGenericAddressParser
,
514 ARRAY_SIZE (AcpiGenericAddressParser
) },
515 { "PerformanceLimitedRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
516 NULL
, NULL
, AcpiGenericAddressParser
,
517 ARRAY_SIZE (AcpiGenericAddressParser
) },
518 { "CPPCEnableRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
519 NULL
, NULL
, AcpiGenericAddressParser
,
520 ARRAY_SIZE (AcpiGenericAddressParser
) },
521 { "AutonomousSelectionEnableBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
522 NULL
, NULL
, AcpiGenericAddressParser
,
523 ARRAY_SIZE (AcpiGenericAddressParser
) },
524 { "AutonomousSelectionEnableInteger", 4, "0x%lx", NULL
},
525 { "AutonomousActivityWindowRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
526 NULL
, NULL
, AcpiGenericAddressParser
,
527 ARRAY_SIZE (AcpiGenericAddressParser
) },
528 { "EnergyPerformancePreferenceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
529 NULL
, NULL
, AcpiGenericAddressParser
,
530 ARRAY_SIZE (AcpiGenericAddressParser
) },
531 { "ReferencePerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
532 NULL
, NULL
, AcpiGenericAddressParser
,
533 ARRAY_SIZE (AcpiGenericAddressParser
) },
534 { "ReferencePerformanceInteger", 4, "0x%lx", NULL
},
535 { "LowestFrequencyBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
536 NULL
, NULL
, AcpiGenericAddressParser
,
537 ARRAY_SIZE (AcpiGenericAddressParser
) },
538 { "LowestFrequencyInteger", 4, "0x%lx", NULL
},
539 { "NominalFrequencyBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
),
540 NULL
, NULL
, AcpiGenericAddressParser
,
541 ARRAY_SIZE (AcpiGenericAddressParser
) },
542 { "NominalFrequencyInteger", 4, "0x%lx", NULL
},
545 /** A parser for the PCC_MAILBOX_REGISTER_INFO struct.
547 STATIC CONST CM_OBJ_PARSER CmArmMailboxRegisterInfoParser
[] = {
548 { "Register", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE
), NULL
, NULL
,
549 AcpiGenericAddressParser
, ARRAY_SIZE (AcpiGenericAddressParser
) },
550 { "PreserveMask", 8, "0x%llx", NULL
},
551 { "WriteMask", 8, "0x%llx", NULL
},
554 /** A parser for the PCC_SUBSPACE_CHANNEL_TIMING_INFO struct.
556 STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceChannelTimingInfoParser
[] = {
557 { "NominalLatency", 4, "0x%x", NULL
},
558 { "MaxPeriodicAccessRate", 4, "0x%x", NULL
},
559 { "MinRequestTurnaroundTime", 2, "0x%x", NULL
},
562 /** A parser for EArmObjPccSubspaceType0Info.
564 STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType0InfoParser
[] = {
565 { "SubspaceId", 1, "0x%x", NULL
},
566 { "Type", 1, "0x%x", NULL
},
567 { "BaseAddress", 8, "0x%llx", NULL
},
568 { "AddressLength", 8, "0x%llx", NULL
},
569 { "DoorbellReg", sizeof (PCC_MAILBOX_REGISTER_INFO
),
570 NULL
, NULL
, CmArmMailboxRegisterInfoParser
,
571 ARRAY_SIZE (CmArmMailboxRegisterInfoParser
) },
572 { "ChannelTiming", sizeof (PCC_SUBSPACE_CHANNEL_TIMING_INFO
),
573 NULL
, NULL
, CmArmPccSubspaceChannelTimingInfoParser
,
574 ARRAY_SIZE (CmArmPccSubspaceChannelTimingInfoParser
) },
577 /** A parser for EArmObjPccSubspaceType1Info.
579 STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType1InfoParser
[] = {
580 { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO
),
581 NULL
, NULL
, CmArmPccSubspaceType0InfoParser
,
582 ARRAY_SIZE (CmArmPccSubspaceType0InfoParser
) },
583 { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT
),
584 NULL
, NULL
, CmArmGenericInterruptParser
,
585 ARRAY_SIZE (CmArmGenericInterruptParser
) },
588 /** A parser for EArmObjPccSubspaceType2Info.
590 STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType2InfoParser
[] = {
591 { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO
),
592 NULL
, NULL
, CmArmPccSubspaceType0InfoParser
,
593 ARRAY_SIZE (CmArmPccSubspaceType0InfoParser
) },
594 { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT
), NULL
,NULL
,
595 CmArmGenericInterruptParser
, ARRAY_SIZE (CmArmGenericInterruptParser
) },
596 { "PlatIrqAckReg", sizeof (PCC_MAILBOX_REGISTER_INFO
),
597 NULL
, NULL
, CmArmMailboxRegisterInfoParser
,
598 ARRAY_SIZE (CmArmMailboxRegisterInfoParser
) },
601 /** A parser for EArmObjPccSubspaceType3Info or EArmObjPccSubspaceType4Info.
603 STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType34InfoParser
[] = {
604 { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO
),
605 NULL
, NULL
, CmArmPccSubspaceType0InfoParser
,
606 ARRAY_SIZE (CmArmPccSubspaceType0InfoParser
) },
607 { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT
), NULL
,NULL
,
608 CmArmGenericInterruptParser
, ARRAY_SIZE (CmArmGenericInterruptParser
) },
609 { "PlatIrqAckReg", sizeof (PCC_MAILBOX_REGISTER_INFO
),
610 NULL
, NULL
, CmArmMailboxRegisterInfoParser
,
611 ARRAY_SIZE (CmArmMailboxRegisterInfoParser
) },
612 { "CmdCompleteCheckReg", sizeof (PCC_MAILBOX_REGISTER_INFO
),
613 NULL
, NULL
, CmArmMailboxRegisterInfoParser
,
614 ARRAY_SIZE (CmArmMailboxRegisterInfoParser
) },
615 { "CmdCompleteUpdateReg", sizeof (PCC_MAILBOX_REGISTER_INFO
),
616 NULL
, NULL
, CmArmMailboxRegisterInfoParser
,
617 ARRAY_SIZE (CmArmMailboxRegisterInfoParser
) },
618 { "ErrorStatusReg", sizeof (PCC_MAILBOX_REGISTER_INFO
),
619 NULL
, NULL
, CmArmMailboxRegisterInfoParser
,
620 ARRAY_SIZE (CmArmMailboxRegisterInfoParser
) },
623 /** A parser for EArmObjPccSubspaceType5Info.
625 STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType5InfoParser
[] = {
626 { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO
),
627 NULL
, NULL
, CmArmPccSubspaceType0InfoParser
,
628 ARRAY_SIZE (CmArmPccSubspaceType0InfoParser
) },
629 { "Version", 2, "0x%x",NULL
},
630 { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT
), NULL
, NULL
,
631 CmArmGenericInterruptParser
, ARRAY_SIZE (CmArmGenericInterruptParser
) },
632 { "CmdCompleteCheckReg", sizeof (PCC_MAILBOX_REGISTER_INFO
),
633 NULL
, NULL
, CmArmMailboxRegisterInfoParser
,
634 ARRAY_SIZE (CmArmMailboxRegisterInfoParser
) },
635 { "ErrorStatusReg", sizeof (PCC_MAILBOX_REGISTER_INFO
),
636 NULL
, NULL
, CmArmMailboxRegisterInfoParser
,
637 ARRAY_SIZE (CmArmMailboxRegisterInfoParser
) },
640 /** A parser for Arm namespace objects.
642 STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser
[] = {
643 { "EArmObjReserved", NULL
, 0 },
644 { "EArmObjBootArchInfo", CmArmBootArchInfoParser
,
645 ARRAY_SIZE (CmArmBootArchInfoParser
) },
646 { "EArmObjCpuInfo", NULL
, 0 },
647 { "EArmObjPowerManagementProfileInfo", CmArmPowerManagementProfileInfoParser
,
648 ARRAY_SIZE (CmArmPowerManagementProfileInfoParser
) },
649 { "EArmObjGicCInfo", CmArmGicCInfoParser
, ARRAY_SIZE (CmArmGicCInfoParser
) },
650 { "EArmObjGicDInfo", CmArmGicDInfoParser
, ARRAY_SIZE (CmArmGicDInfoParser
) },
651 { "EArmObjGicMsiFrameInfo", CmArmGicMsiFrameInfoParser
,
652 ARRAY_SIZE (CmArmGicMsiFrameInfoParser
) },
653 { "EArmObjGicRedistributorInfo", CmArmGicRedistInfoParser
,
654 ARRAY_SIZE (CmArmGicRedistInfoParser
) },
655 { "EArmObjGicItsInfo", CmArmGicItsInfoParser
,
656 ARRAY_SIZE (CmArmGicItsInfoParser
) },
657 { "EArmObjSerialConsolePortInfo", CmArmSerialPortInfoParser
,
658 ARRAY_SIZE (CmArmSerialPortInfoParser
) },
659 { "EArmObjSerialDebugPortInfo", CmArmSerialPortInfoParser
,
660 ARRAY_SIZE (CmArmSerialPortInfoParser
) },
661 { "EArmObjGenericTimerInfo", CmArmGenericTimerInfoParser
,
662 ARRAY_SIZE (CmArmGenericTimerInfoParser
) },
663 { "EArmObjPlatformGTBlockInfo", CmArmGTBlockInfoParser
,
664 ARRAY_SIZE (CmArmGTBlockInfoParser
) },
665 { "EArmObjGTBlockTimerFrameInfo", CmArmGTBlockTimerFrameInfoParser
,
666 ARRAY_SIZE (CmArmGTBlockTimerFrameInfoParser
) },
667 { "EArmObjPlatformGenericWatchdogInfo", CmArmGenericWatchdogInfoParser
,
668 ARRAY_SIZE (CmArmGenericWatchdogInfoParser
) },
669 { "EArmObjPciConfigSpaceInfo", CmArmPciConfigSpaceInfoParser
,
670 ARRAY_SIZE (CmArmPciConfigSpaceInfoParser
) },
671 { "EArmObjHypervisorVendorIdentity", CmArmHypervisorVendorIdParser
,
672 ARRAY_SIZE (CmArmHypervisorVendorIdParser
) },
673 { "EArmObjFixedFeatureFlags", CmArmFixedFeatureFlagsParser
,
674 ARRAY_SIZE (CmArmFixedFeatureFlagsParser
) },
675 { "EArmObjItsGroup", CmArmItsGroupNodeParser
,
676 ARRAY_SIZE (CmArmItsGroupNodeParser
) },
677 { "EArmObjNamedComponent", CmArmNamedComponentNodeParser
,
678 ARRAY_SIZE (CmArmNamedComponentNodeParser
) },
679 { "EArmObjRootComplex", CmArmRootComplexNodeParser
,
680 ARRAY_SIZE (CmArmRootComplexNodeParser
) },
681 { "EArmObjSmmuV1SmmuV2", CmArmSmmuV1SmmuV2NodeParser
,
682 ARRAY_SIZE (CmArmSmmuV1SmmuV2NodeParser
) },
683 { "EArmObjSmmuV3", CmArmSmmuV3NodeParser
,
684 ARRAY_SIZE (CmArmSmmuV3NodeParser
) },
685 { "EArmObjPmcg", CmArmPmcgNodeParser
, ARRAY_SIZE (CmArmPmcgNodeParser
) },
686 { "EArmObjGicItsIdentifierArray", CmArmGicItsIdentifierParser
,
687 ARRAY_SIZE (CmArmGicItsIdentifierParser
) },
688 { "EArmObjIdMappingArray", CmArmIdMappingParser
,
689 ARRAY_SIZE (CmArmIdMappingParser
) },
690 { "EArmObjSmmuInterruptArray", CmArmGenericInterruptParser
,
691 ARRAY_SIZE (CmArmGenericInterruptParser
) },
692 { "EArmObjProcHierarchyInfo", CmArmProcHierarchyInfoParser
,
693 ARRAY_SIZE (CmArmProcHierarchyInfoParser
) },
694 { "EArmObjCacheInfo", CmArmCacheInfoParser
,
695 ARRAY_SIZE (CmArmCacheInfoParser
) },
696 { "EArmObjProcNodeIdInfo", CmArmProcNodeIdInfoParser
,
697 ARRAY_SIZE (CmArmProcNodeIdInfoParser
) },
698 { "EArmObjCmRef", CmArmObjRefParser
, ARRAY_SIZE (CmArmObjRefParser
) },
699 { "EArmObjMemoryAffinityInfo", CmArmMemoryAffinityInfoParser
,
700 ARRAY_SIZE (CmArmMemoryAffinityInfoParser
) },
701 { "EArmObjDeviceHandleAcpi", CmArmDeviceHandleAcpiParser
,
702 ARRAY_SIZE (CmArmDeviceHandleAcpiParser
) },
703 { "EArmObjDeviceHandlePci", CmArmDeviceHandlePciParser
,
704 ARRAY_SIZE (CmArmDeviceHandlePciParser
) },
705 { "EArmObjGenericInitiatorAffinityInfo",
706 CmArmGenericInitiatorAffinityInfoParser
,
707 ARRAY_SIZE (CmArmGenericInitiatorAffinityInfoParser
) },
708 { "EArmObjSerialPortInfo", CmArmSerialPortInfoParser
,
709 ARRAY_SIZE (CmArmSerialPortInfoParser
) },
710 { "EArmObjCmn600Info", CmArmCmn600InfoParser
,
711 ARRAY_SIZE (CmArmCmn600InfoParser
) },
712 { "EArmObjLpiInfo", CmArmLpiInfoParser
,
713 ARRAY_SIZE (CmArmLpiInfoParser
) },
714 { "EArmObjPciAddressMapInfo", CmArmPciAddressMapInfoParser
,
715 ARRAY_SIZE (CmArmPciAddressMapInfoParser
) },
716 { "EArmObjPciInterruptMapInfo", CmPciInterruptMapInfoParser
,
717 ARRAY_SIZE (CmPciInterruptMapInfoParser
) },
718 { "EArmObjRmr", CmArmRmrInfoParser
,
719 ARRAY_SIZE (CmArmRmrInfoParser
) },
720 { "EArmObjMemoryRangeDescriptor", CmArmMemoryRangeDescriptorInfoParser
,
721 ARRAY_SIZE (CmArmMemoryRangeDescriptorInfoParser
) },
722 { "EArmObjCpcInfo", CmArmCpcInfoParser
,
723 ARRAY_SIZE (CmArmCpcInfoParser
) },
724 { "EArmObjPccSubspaceType0Info", CmArmPccSubspaceType0InfoParser
,
725 ARRAY_SIZE (CmArmPccSubspaceType0InfoParser
) },
726 { "EArmObjPccSubspaceType1Info", CmArmPccSubspaceType1InfoParser
,
727 ARRAY_SIZE (CmArmPccSubspaceType1InfoParser
) },
728 { "EArmObjPccSubspaceType2Info", CmArmPccSubspaceType2InfoParser
,
729 ARRAY_SIZE (CmArmPccSubspaceType2InfoParser
) },
730 { "EArmObjPccSubspaceType3Info", CmArmPccSubspaceType34InfoParser
,
731 ARRAY_SIZE (CmArmPccSubspaceType34InfoParser
) },
732 { "EArmObjPccSubspaceType4Info", CmArmPccSubspaceType34InfoParser
,
733 ARRAY_SIZE (CmArmPccSubspaceType34InfoParser
) },
734 { "EArmObjPccSubspaceType5Info", CmArmPccSubspaceType5InfoParser
,
735 ARRAY_SIZE (CmArmPccSubspaceType5InfoParser
) },
736 { "EArmObjMax", NULL
, 0 },
739 /** A parser for EStdObjCfgMgrInfo.
741 STATIC CONST CM_OBJ_PARSER StdObjCfgMgrInfoParser
[] = {
742 { "Revision", 4, "0x%x", NULL
},
743 { "OemId[6]", 6, "%C%C%C%C%C%C", PrintOemId
}
746 /** A parser for EStdObjAcpiTableList.
748 STATIC CONST CM_OBJ_PARSER StdObjAcpiTableInfoParser
[] = {
749 { "AcpiTableSignature", 4, "0x%x", NULL
},
750 { "AcpiTableRevision", 1, "%d", NULL
},
751 { "TableGeneratorId", sizeof (ACPI_TABLE_GENERATOR_ID
), "0x%x", NULL
},
752 { "AcpiTableData", sizeof (EFI_ACPI_DESCRIPTION_HEADER
*), "0x%p", NULL
},
753 { "OemTableId", 8, "0x%LLX", NULL
},
754 { "OemRevision", 4, "0x%x", NULL
},
755 { "MinorRevision", 1, "0x%x", NULL
},
758 /** A parser for EStdObjSmbiosTableList.
760 STATIC CONST CM_OBJ_PARSER StdObjSmbiosTableInfoParser
[] = {
761 { "TableGeneratorId", sizeof (SMBIOS_TABLE_GENERATOR_ID
), "0x%x", NULL
},
762 { "SmbiosTableData", sizeof (SMBIOS_STRUCTURE
*), "0x%p", NULL
}
765 /** A parser for Standard namespace objects.
767 STATIC CONST CM_OBJ_PARSER_ARRAY StdNamespaceObjectParser
[] = {
768 { "EStdObjCfgMgrInfo", StdObjCfgMgrInfoParser
,
769 ARRAY_SIZE (StdObjCfgMgrInfoParser
) },
770 { "EStdObjAcpiTableList", StdObjAcpiTableInfoParser
,
771 ARRAY_SIZE (StdObjAcpiTableInfoParser
) },
772 { "EStdObjSmbiosTableList", StdObjSmbiosTableInfoParser
,
773 ARRAY_SIZE (StdObjSmbiosTableInfoParser
) },
778 @param [in] Format Format to print the Ptr.
779 @param [in] Ptr Pointer to the OEM Id.
785 IN CONST CHAR8
*Format
,
791 (Format
!= NULL
) ? Format
: "%C%C%C%C%C%C",
803 The string must be NULL terminated.
805 @param [in] Format Format to print the Ptr.
806 @param [in] Ptr Pointer to the string.
816 DEBUG ((DEBUG_ERROR
, "%a", Ptr
));
819 /** Print fields of the objects.
821 @param [in] Data Pointer to the object to print.
822 @param [in] Parser Parser containing the object fields.
823 @param [in] ItemCount Number of entries/fields in the Parser.
824 @param [in] RemainingSize Parse at most *RemainingSize bytes.
825 This function decrements the value
826 from the number bytes consumed.
827 @param [in] IndentLevel Indentation to use when printing.
833 IN CONST CM_OBJ_PARSER
*Parser
,
835 IN INTN
*RemainingSize
,
836 IN UINT32 IndentLevel
843 if ((Data
== NULL
) ||
846 (RemainingSize
== NULL
))
853 for (Index
= 0; Index
< ItemCount
; Index
++) {
854 // Check there is enough space in left.
855 *RemainingSize
-= Parser
[Index
].Length
;
856 if (*RemainingSize
< 0) {
859 "\nERROR: %a: Buffer overrun\n",
860 Parser
[Index
].NameStr
867 for (IndentIndex
= 0; IndentIndex
< IndentLevel
; IndentIndex
++) {
868 DEBUG ((DEBUG_ERROR
, " "));
874 OUTPUT_FIELD_COLUMN_WIDTH
- 2 * IndentLevel
,
875 Parser
[Index
].NameStr
877 if (Parser
[Index
].PrintFormatter
!= NULL
) {
878 Parser
[Index
].PrintFormatter (Parser
[Index
].Format
, Data
);
879 } else if (Parser
[Index
].Format
!= NULL
) {
880 switch (Parser
[Index
].Length
) {
882 DEBUG ((DEBUG_ERROR
, Parser
[Index
].Format
, *(UINT8
*)Data
));
885 DEBUG ((DEBUG_ERROR
, Parser
[Index
].Format
, *(UINT16
*)Data
));
888 DEBUG ((DEBUG_ERROR
, Parser
[Index
].Format
, *(UINT32
*)Data
));
891 DEBUG ((DEBUG_ERROR
, Parser
[Index
].Format
, ReadUnaligned64 (Data
)));
896 "\nERROR: %a: CANNOT PARSE THIS FIELD, Field Length = %d\n",
897 Parser
[Index
].NameStr
,
901 } else if (Parser
[Index
].SubObjParser
!= NULL
) {
902 SubStructSize
= Parser
[Index
].Length
;
904 DEBUG ((DEBUG_ERROR
, "\n"));
907 Parser
[Index
].SubObjParser
,
908 Parser
[Index
].SubObjItemCount
,
916 "\nERROR: %a: CANNOT PARSE THIS FIELD, Field Length = %d\n",
917 Parser
[Index
].NameStr
,
922 DEBUG ((DEBUG_ERROR
, "\n"));
923 Data
= (UINT8
*)Data
+ Parser
[Index
].Length
;
927 /** Parse and print a CmObjDesc.
929 @param [in] CmObjDesc The CmObjDesc to parse and print.
934 IN CONST CM_OBJ_DESCRIPTOR
*CmObjDesc
943 CONST CM_OBJ_PARSER_ARRAY
*ParserArray
;
945 if ((CmObjDesc
== NULL
) || (CmObjDesc
->Data
== NULL
)) {
949 NameSpaceId
= GET_CM_NAMESPACE_ID (CmObjDesc
->ObjectId
);
950 ObjId
= GET_CM_OBJECT_ID (CmObjDesc
->ObjectId
);
952 switch (NameSpaceId
) {
953 case EObjNameSpaceStandard
:
954 if (ObjId
>= EStdObjMax
) {
959 ParserArray
= &StdNamespaceObjectParser
[ObjId
];
961 case EObjNameSpaceArm
:
962 if (ObjId
>= EArmObjMax
) {
967 ParserArray
= &ArmNamespaceObjectParser
[ObjId
];
975 ObjectCount
= CmObjDesc
->Count
;
976 RemainingSize
= CmObjDesc
->Size
;
979 for (ObjIndex
= 0; ObjIndex
< ObjectCount
; ObjIndex
++) {
983 OUTPUT_FIELD_COLUMN_WIDTH
,
984 ParserArray
->ObjectName
,
989 (VOID
*)((UINTN
)CmObjDesc
->Data
+ Offset
),
991 ParserArray
->ItemCount
,
995 if ((RemainingSize
> CmObjDesc
->Size
) ||
1002 Offset
= CmObjDesc
->Size
- RemainingSize
;
1005 ASSERT (RemainingSize
== 0);