2 Configuration Manager Object parser.
4 Copyright (c) 2021, 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"
22 /** A parser for EArmObjBootArchInfo.
24 STATIC CONST CM_OBJ_PARSER CmArmBootArchInfoParser
[] = {
25 { "BootArchFlags", 2, "0x%x", NULL
}
28 /** A parser for EArmObjPowerManagementProfileInfo.
30 STATIC CONST CM_OBJ_PARSER CmArmPowerManagementProfileInfoParser
[] = {
31 { "PowerManagementProfile", 1, "0x%x", NULL
}
34 /** A parser for EArmObjGicCInfo.
36 STATIC CONST CM_OBJ_PARSER CmArmGicCInfoParser
[] = {
37 { "CPUInterfaceNumber", 4, "0x%x", NULL
},
38 { "AcpiProcessorUid", 4, "0x%x", NULL
},
39 { "Flags", 4, "0x%x", NULL
},
40 { "ParkingProtocolVersion", 4, "0x%x", NULL
},
41 { "PerformanceInterruptGsiv", 4, "0x%x", NULL
},
42 { "ParkedAddress", 8, "0x%llx", NULL
},
43 { "PhysicalBaseAddress", 8, "0x%llx", NULL
},
44 { "GICV", 8, "0x%llx", NULL
},
45 { "GICH", 8, "0x%llx", NULL
},
46 { "VGICMaintenanceInterrupt", 4, "0x%x", NULL
},
47 { "GICRBaseAddress", 8, "0x%llx", NULL
},
48 { "MPIDR", 8, "0x%llx", NULL
},
49 { "ProcessorPowerEfficiencyClass", 1, "0x%x", NULL
},
50 { "SpeOverflowInterrupt", 2, "0x%x", NULL
},
51 { "ProximityDomain", 4, "0x%x", NULL
},
52 { "ClockDomain", 4, "0x%x", NULL
},
53 { "AffinityFlags", 4, "0x%x", NULL
}
56 /** A parser for EArmObjGicDInfo.
58 STATIC CONST CM_OBJ_PARSER CmArmGicDInfoParser
[] = {
59 { "PhysicalBaseAddress", 8, "0x%llx", NULL
},
60 { "SystemVectorBase", 4, "0x%x", NULL
},
61 { "GicVersion", 1, "0x%x", NULL
},
64 /** A parser for EArmObjGicMsiFrameInfo.
66 STATIC CONST CM_OBJ_PARSER CmArmGicMsiFrameInfoParser
[] = {
67 { "GicMsiFrameId", 4, "0x%x", NULL
},
68 { "PhysicalBaseAddress", 8, "0x%llx", NULL
},
69 { "Flags", 4, "0x%x", NULL
},
70 { "SPICount", 2, "0x%x", NULL
},
71 { "SPIBase", 2, "0x%x", NULL
}
74 /** A parser for EArmObjGicRedistributorInfo.
76 STATIC CONST CM_OBJ_PARSER CmArmGicRedistInfoParser
[] = {
77 { "DiscoveryRangeBaseAddress", 8, "0x%llx", NULL
},
78 { "DiscoveryRangeLength", 4, "0x%x", NULL
}
81 /** A parser for EArmObjGicItsInfo.
83 STATIC CONST CM_OBJ_PARSER CmArmGicItsInfoParser
[] = {
84 { "GicItsId", 4, "0x%x", NULL
},
85 { "PhysicalBaseAddress", 8, "0x%llx", NULL
},
86 { "ProximityDomain", 4, "0x%x", NULL
}
89 /** A parser for EArmObjSerialConsolePortInfo,
90 EArmObjSerialDebugPortInfo and EArmObjSerialPortInfo.
92 STATIC CONST CM_OBJ_PARSER CmArmSerialPortInfoParser
[] = {
93 { "BaseAddress", 8, "0x%llx", NULL
},
94 { "Interrupt", 4, "0x%x", NULL
},
95 { "BaudRate", 8, "0x%llx", NULL
},
96 { "Clock", 4, "0x%x", NULL
},
97 { "PortSubtype", 2, "0x%x", NULL
},
98 { "BaseAddressLength", 8, "0x%llx", NULL
},
99 { "AccessSize", 1, "0x%d", NULL
}
102 /** A parser for EArmObjGenericTimerInfo.
104 STATIC CONST CM_OBJ_PARSER CmArmGenericTimerInfoParser
[] = {
105 { "CounterControlBaseAddress", 8, "0x%llx", NULL
},
106 { "CounterReadBaseAddress", 8, "0x%llx", NULL
},
107 { "SecurePL1TimerGSIV", 4, "0x%x", NULL
},
108 { "SecurePL1TimerFlags", 4, "0x%x", NULL
},
109 { "NonSecurePL1TimerGSIV", 4, "0x%x", NULL
},
110 { "NonSecurePL1TimerFlags", 4, "0x%x", NULL
},
111 { "VirtualTimerGSIV", 4, "0x%x", NULL
},
112 { "VirtualTimerFlags", 4, "0x%x", NULL
},
113 { "NonSecurePL2TimerGSIV", 4, "0x%x", NULL
},
114 { "NonSecurePL2TimerFlags", 4, "0x%x", NULL
},
115 { "VirtualPL2TimerGSIV", 4, "0x%x", NULL
},
116 { "VirtualPL2TimerFlags", 4, "0x%x", NULL
}
119 /** A parser for EArmObjPlatformGTBlockInfo.
121 STATIC CONST CM_OBJ_PARSER CmArmGTBlockTimerFrameInfoParser
[] = {
122 { "FrameNumber", 1, "0x%x", NULL
},
123 { "PhysicalAddressCntBase", 8, "0x%llx", NULL
},
124 { "PhysicalAddressCntEL0Base", 8, "0x%llx", NULL
},
125 { "PhysicalTimerGSIV", 4, "0x%x", NULL
},
126 { "PhysicalTimerFlags", 4, "0x%x", NULL
},
127 { "VirtualTimerGSIV", 4, "0x%x", NULL
},
128 { "VirtualTimerFlags", 4, "0x%x", NULL
},
129 { "CommonFlags", 4, "0x%x", NULL
}
132 /** A parser for EArmObjGTBlockTimerFrameInfo.
134 STATIC CONST CM_OBJ_PARSER CmArmGTBlockInfoParser
[] = {
135 { "GTBlockPhysicalAddress", 8, "0x%llx", NULL
},
136 { "GTBlockTimerFrameCount", 4, "0x%x", NULL
},
137 { "GTBlockTimerFrameToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
}
140 /** A parser for EArmObjPlatformGenericWatchdogInfo.
142 STATIC CONST CM_OBJ_PARSER CmArmGenericWatchdogInfoParser
[] = {
143 { "ControlFrameAddress", 8, "0x%llx", NULL
},
144 { "RefreshFrameAddress", 8, "0x%llx", NULL
},
145 { "TimerGSIV", 4, "0x%x", NULL
},
146 { "Flags", 4, "0x%x", NULL
}
149 /** A parser for EArmObjPciConfigSpaceInfo.
151 STATIC CONST CM_OBJ_PARSER CmArmPciConfigSpaceInfoParser
[] = {
152 { "BaseAddress", 8, "0x%llx", NULL
},
153 { "PciSegmentGroupNumber", 2, "0x%x", NULL
},
154 { "StartBusNumber", 1, "0x%x", NULL
},
155 { "EndBusNumber", 1, "0x%x", NULL
}
158 /** A parser for EArmObjHypervisorVendorIdentity.
160 STATIC CONST CM_OBJ_PARSER CmArmHypervisorVendorIdParser
[] = {
161 { "HypervisorVendorId", 8, "0x%llx", NULL
}
164 /** A parser for EArmObjFixedFeatureFlags.
166 STATIC CONST CM_OBJ_PARSER CmArmFixedFeatureFlagsParser
[] = {
167 { "Flags", 4, "0x%x", NULL
}
170 /** A parser for EArmObjItsGroup.
172 STATIC CONST CM_OBJ_PARSER CmArmItsGroupNodeParser
[] = {
173 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
174 { "ItsIdCount", 4, "0x%x", NULL
},
175 { "ItsIdToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
}
178 /** A parser for EArmObjNamedComponent.
180 STATIC CONST CM_OBJ_PARSER CmArmNamedComponentNodeParser
[] = {
181 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
182 { "IdMappingCount", 4, "0x%x", NULL
},
183 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
184 { "Flags", 4, "0x%x", NULL
},
185 { "CacheCoherent", 4, "0x%x", NULL
},
186 { "AllocationHints", 1, "0x%x", NULL
},
187 { "MemoryAccessFlags", 1, "0x%x", NULL
},
188 { "AddressSizeLimit", 1, "0x%x", NULL
},
189 { "ObjectName", sizeof (CHAR8
*), "%a", NULL
}
192 /** A parser for EArmObjRootComplex.
194 STATIC CONST CM_OBJ_PARSER CmArmRootComplexNodeParser
[] = {
195 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
196 { "IdMappingCount", 4, "0x%x", NULL
},
197 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
198 { "CacheCoherent", 4, "0x%x", NULL
},
199 { "AllocationHints", 1, "0x%x", NULL
},
200 { "MemoryAccessFlags", 1, "0x%x", NULL
},
201 { "AtsAttribute", 4, "0x%x", NULL
},
202 { "PciSegmentNumber", 4, "0x%x", NULL
},
203 { "MemoryAddressSize", 1, "0x%x", NULL
}
206 /** A parser for EArmObjSmmuV1SmmuV2.
208 STATIC CONST CM_OBJ_PARSER CmArmSmmuV1SmmuV2NodeParser
[] = {
209 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
210 { "IdMappingCount", 4, "0x%x", NULL
},
211 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
212 { "BaseAddress", 8, "0x%llx", NULL
},
213 { "Span", 8, "0x%llx", NULL
},
214 { "Model", 4, "0x%x", NULL
},
215 { "Flags", 4, "0x%x", NULL
},
216 { "ContextInterruptCount", 4, "0x%x", NULL
},
217 { "ContextInterruptToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
218 { "PmuInterruptCount", 4, "0x%x", NULL
},
219 { "PmuInterruptToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
220 { "SMMU_NSgIrpt", 4, "0x%x", NULL
},
221 { "SMMU_NSgIrptFlags", 4, "0x%x", NULL
},
222 { "SMMU_NSgCfgIrpt", 4, "0x%x", NULL
},
223 { "SMMU_NSgCfgIrptFlags", 4, "0x%x", NULL
}
226 /** A parser for EArmObjSmmuV3.
228 STATIC CONST CM_OBJ_PARSER CmArmSmmuV3NodeParser
[] = {
229 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
230 { "IdMappingCount", 4, "0x%x", NULL
},
231 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
232 { "BaseAddress", 8, "0x%llx", NULL
},
233 { "Flags", 4, "0x%x", NULL
},
234 { "VatosAddress", 8, "0x%llx", NULL
},
235 { "Model", 4, "0x%x", NULL
},
236 { "EventInterrupt", 4, "0x%x", NULL
},
237 { "PriInterrupt", 4, "0x%x", NULL
},
238 { "GerrInterrupt", 4, "0x%x", NULL
},
239 { "SyncInterrupt", 4, "0x%x", NULL
},
240 { "ProximityDomain", 4, "0x%x", NULL
},
241 { "DeviceIdMappingIndex", 4, "0x%x", NULL
}
244 /** A parser for EArmObjPmcg.
246 STATIC CONST CM_OBJ_PARSER CmArmPmcgNodeParser
[] = {
247 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
248 { "IdMappingCount", 4, "0x%x", NULL
},
249 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
250 { "BaseAddress", 8, "0x%llx", NULL
},
251 { "OverflowInterrupt", 4, "0x%x", NULL
},
252 { "Page1BaseAddress", 8, "0x%llx", NULL
},
253 { "ReferenceToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
}
256 /** A parser for EArmObjGicItsIdentifierArray.
258 STATIC CONST CM_OBJ_PARSER CmArmGicItsIdentifierParser
[] = {
259 { "ItsId", 4, "0x%x", NULL
}
262 /** A parser for EArmObjIdMappingArray.
264 STATIC CONST CM_OBJ_PARSER CmArmIdMappingParser
[] = {
265 { "InputBase", 4, "0x%x", NULL
},
266 { "NumIds", 4, "0x%x", NULL
},
267 { "OutputBase", 4, "0x%x", NULL
},
268 { "OutputReferenceToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
269 { "Flags", 4, "0x%x", NULL
}
272 /** A parser for EArmObjSmmuInterruptArray.
274 STATIC CONST CM_OBJ_PARSER CmArmGenericInterruptParser
[] = {
275 { "Interrupt", 4, "0x%x", NULL
},
276 { "Flags", 4, "0x%x", NULL
}
279 /** A parser for EArmObjProcHierarchyInfo.
281 STATIC CONST CM_OBJ_PARSER CmArmProcHierarchyInfoParser
[] = {
282 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
283 { "Flags", 4, "0x%x", NULL
},
284 { "ParentToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
285 { "GicCToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
286 { "NoOfPrivateResources", 4, "0x%x", NULL
},
287 { "PrivateResourcesArrayToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
}
290 /** A parser for EArmObjCacheInfo.
292 STATIC CONST CM_OBJ_PARSER CmArmCacheInfoParser
[] = {
293 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
294 { "NextLevelOfCacheToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
295 { "Size", 4, "0x%x", NULL
},
296 { "NumberOfSets", 4, "0x%x", NULL
},
297 { "Associativity", 4, "0x%x", NULL
},
298 { "Attributes", 1, "0x%x", NULL
},
299 { "LineSize", 2, "0x%x", NULL
}
302 /** A parser for EArmObjProcNodeIdInfo.
304 STATIC CONST CM_OBJ_PARSER CmArmProcNodeIdInfoParser
[] = {
305 { "Token", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
},
306 { "VendorId", 4, "0x%p", NULL
},
307 { "Level1Id", 8, "0x%x", NULL
},
308 { "Level2Id", 8, "0x%x", NULL
},
309 { "MajorRev", 2, "0x%x", NULL
},
310 { "MinorRev", 2, "0x%x", NULL
},
311 { "SpinRev", 2, "0x%x", NULL
}
314 /** A parser for EArmObjCmRef.
316 STATIC CONST CM_OBJ_PARSER CmArmObjRefParser
[] = {
317 { "ReferenceToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
}
320 /** A parser for EArmObjMemoryAffinityInfo.
322 STATIC CONST CM_OBJ_PARSER CmArmMemoryAffinityInfoParser
[] = {
323 { "ProximityDomain", 4, "0x%x", NULL
},
324 { "BaseAddress", 8, "0x%llx", NULL
},
325 { "Length", 8, "0x%llx", NULL
},
326 { "Flags", 4, "0x%x", NULL
}
329 /** A parser for EArmObjDeviceHandleAcpi.
331 STATIC CONST CM_OBJ_PARSER CmArmDeviceHandleAcpiParser
[] = {
332 { "Hid", 8, "0x%llx", NULL
},
333 { "Uid", 4, "0x%x", NULL
}
336 /** A parser for EArmObjDeviceHandlePci.
338 STATIC CONST CM_OBJ_PARSER CmArmDeviceHandlePciParser
[] = {
339 { "SegmentNumber", 2, "0x%x", NULL
},
340 { "BusNumber", 1, "0x%x", NULL
},
341 { "DeviceNumber", 1, "0x%x", NULL
},
342 { "FunctionNumber", 1, "0x%x", NULL
}
345 /** A parser for EArmObjGenericInitiatorAffinityInfo.
347 STATIC CONST CM_OBJ_PARSER CmArmGenericInitiatorAffinityInfoParser
[] = {
348 { "ProximityDomain", 4, "0x%x", NULL
},
349 { "Flags", 4, "0x%x", NULL
},
350 { "DeviceHandleType", 1, "0x%x", NULL
},
351 { "DeviceHandleToken", sizeof (CM_OBJECT_TOKEN
), "0x%p", NULL
}
354 /** A parser for EArmObjCmn600Info.
356 STATIC CONST CM_OBJ_PARSER CmArmCmn600InfoParser
[] = {
357 { "PeriphBaseAddress", 8, "0x%llx", NULL
},
358 { "PeriphBaseAddressLength", 8, "0x%llx", NULL
},
359 { "RootNodeBaseAddress", 8, "0x%llx", NULL
},
360 { "DtcCount", 1, "0x%x", NULL
},
361 { "DtcInterrupt[0]", 4, "0x%x", NULL
},
362 { "DtcFlags[0]", 4, "0x%x", NULL
},
363 { "DtcInterrupt[1]", 4, "0x%x", NULL
},
364 { "DtcFlags[1]", 4, "0x%x", NULL
},
365 { "DtcInterrupt[2]", 4, "0x%x", NULL
},
366 { "DtcFlags[2]", 4, "0x%x", NULL
},
367 { "DtcInterrupt[3]", 4, "0x%x", NULL
},
368 { "DtcFlags[3]", 4, "0x%x", NULL
}
371 /** A parser for the EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE structure.
373 STATIC CONST CM_OBJ_PARSER AcpiGenericAddressParser
[] = {
374 { "AddressSpaceId", 1, "%d", NULL
},
375 { "RegisterBitWidth", 1, "%d", NULL
},
376 { "RegisterBitOffset", 1, "%d", NULL
},
377 { "AccessSize", 1, "%d", NULL
},
378 { "Address", 8, "0x%llx", NULL
},
381 /** A parser for EArmObjLpiInfo.
383 STATIC CONST CM_OBJ_PARSER CmArmLpiInfoParser
[] = {
384 { "MinResidency", 4, "0x%llx", NULL
},
385 { "WorstCaseWakeLatency", 4, "0x%llx", NULL
},
386 { "Flags", 4, "0x%llx", NULL
},
387 { "ArchFlags", 4, "0x%llx", NULL
},
388 { "ResCntFreq", 4, "0x%llx", NULL
},
389 { "EnableParentState", 4, "0x%llx", NULL
},
390 { "IsInteger", 1, "%d", NULL
},
391 { "IntegerEntryMethod", 8, "0x%llx", NULL
},
392 { "RegisterEntryMethod", sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE
),
393 NULL
, NULL
, AcpiGenericAddressParser
,
394 ARRAY_SIZE (AcpiGenericAddressParser
) },
395 { "ResidencyCounterRegister", sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE
),
396 NULL
, NULL
, AcpiGenericAddressParser
,
397 ARRAY_SIZE (AcpiGenericAddressParser
) },
398 { "UsageCounterRegister", sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE
),
399 NULL
, NULL
, AcpiGenericAddressParser
,
400 ARRAY_SIZE (AcpiGenericAddressParser
) },
401 { "StateName", 16, "0x%a", NULL
},
404 /** A parser for Arm namespace objects.
406 STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser
[] = {
407 { "EArmObjReserved", NULL
, 0 },
408 { "EArmObjBootArchInfo", CmArmBootArchInfoParser
,
409 ARRAY_SIZE (CmArmBootArchInfoParser
) },
410 { "EArmObjCpuInfo", NULL
, 0 },
411 { "EArmObjPowerManagementProfileInfo", CmArmPowerManagementProfileInfoParser
,
412 ARRAY_SIZE (CmArmPowerManagementProfileInfoParser
) },
413 { "EArmObjGicCInfo", CmArmGicCInfoParser
, ARRAY_SIZE (CmArmGicCInfoParser
) },
414 { "EArmObjGicDInfo", CmArmGicDInfoParser
, ARRAY_SIZE (CmArmGicDInfoParser
) },
415 { "EArmObjGicMsiFrameInfo", CmArmGicMsiFrameInfoParser
,
416 ARRAY_SIZE (CmArmGicMsiFrameInfoParser
) },
417 { "EArmObjGicRedistributorInfo", CmArmGicRedistInfoParser
,
418 ARRAY_SIZE (CmArmGicRedistInfoParser
) },
419 { "EArmObjGicItsInfo", CmArmGicItsInfoParser
,
420 ARRAY_SIZE (CmArmGicItsInfoParser
) },
421 { "EArmObjSerialConsolePortInfo", CmArmSerialPortInfoParser
,
422 ARRAY_SIZE (CmArmSerialPortInfoParser
) },
423 { "EArmObjSerialDebugPortInfo", CmArmSerialPortInfoParser
,
424 ARRAY_SIZE (CmArmSerialPortInfoParser
) },
425 { "EArmObjGenericTimerInfo", CmArmGenericTimerInfoParser
,
426 ARRAY_SIZE (CmArmGenericTimerInfoParser
) },
427 { "EArmObjPlatformGTBlockInfo", CmArmGTBlockTimerFrameInfoParser
,
428 ARRAY_SIZE (CmArmGTBlockTimerFrameInfoParser
) },
429 { "EArmObjGTBlockTimerFrameInfo", CmArmGTBlockInfoParser
,
430 ARRAY_SIZE (CmArmGTBlockInfoParser
) },
431 { "EArmObjPlatformGenericWatchdogInfo", CmArmGenericWatchdogInfoParser
,
432 ARRAY_SIZE (CmArmGenericWatchdogInfoParser
) },
433 { "EArmObjPciConfigSpaceInfo", CmArmPciConfigSpaceInfoParser
,
434 ARRAY_SIZE (CmArmPciConfigSpaceInfoParser
) },
435 { "EArmObjHypervisorVendorIdentity", CmArmHypervisorVendorIdParser
,
436 ARRAY_SIZE (CmArmHypervisorVendorIdParser
) },
437 { "EArmObjFixedFeatureFlags", CmArmFixedFeatureFlagsParser
,
438 ARRAY_SIZE (CmArmFixedFeatureFlagsParser
) },
439 { "EArmObjItsGroup", CmArmItsGroupNodeParser
,
440 ARRAY_SIZE (CmArmItsGroupNodeParser
) },
441 { "EArmObjNamedComponent", CmArmNamedComponentNodeParser
,
442 ARRAY_SIZE (CmArmNamedComponentNodeParser
) },
443 { "EArmObjRootComplex", CmArmRootComplexNodeParser
,
444 ARRAY_SIZE (CmArmRootComplexNodeParser
) },
445 { "EArmObjSmmuV1SmmuV2", CmArmSmmuV1SmmuV2NodeParser
,
446 ARRAY_SIZE (CmArmSmmuV1SmmuV2NodeParser
) },
447 { "EArmObjSmmuV3", CmArmSmmuV3NodeParser
,
448 ARRAY_SIZE (CmArmSmmuV3NodeParser
) },
449 { "EArmObjPmcg", CmArmPmcgNodeParser
, ARRAY_SIZE (CmArmPmcgNodeParser
) },
450 { "EArmObjGicItsIdentifierArray", CmArmGicItsIdentifierParser
,
451 ARRAY_SIZE (CmArmGicItsIdentifierParser
) },
452 { "EArmObjIdMappingArray", CmArmIdMappingParser
,
453 ARRAY_SIZE (CmArmIdMappingParser
) },
454 { "EArmObjSmmuInterruptArray", CmArmGenericInterruptParser
,
455 ARRAY_SIZE (CmArmGenericInterruptParser
) },
456 { "EArmObjProcHierarchyInfo", CmArmProcHierarchyInfoParser
,
457 ARRAY_SIZE (CmArmProcHierarchyInfoParser
) },
458 { "EArmObjCacheInfo", CmArmCacheInfoParser
,
459 ARRAY_SIZE (CmArmCacheInfoParser
) },
460 { "EArmObjProcNodeIdInfo", CmArmProcNodeIdInfoParser
,
461 ARRAY_SIZE (CmArmProcNodeIdInfoParser
) },
462 { "EArmObjCmRef", CmArmObjRefParser
, ARRAY_SIZE (CmArmObjRefParser
) },
463 { "EArmObjMemoryAffinityInfo", CmArmMemoryAffinityInfoParser
,
464 ARRAY_SIZE (CmArmMemoryAffinityInfoParser
) },
465 { "EArmObjDeviceHandleAcpi", CmArmDeviceHandleAcpiParser
,
466 ARRAY_SIZE (CmArmDeviceHandleAcpiParser
) },
467 { "EArmObjDeviceHandlePci", CmArmDeviceHandlePciParser
,
468 ARRAY_SIZE (CmArmDeviceHandlePciParser
) },
469 { "EArmObjGenericInitiatorAffinityInfo",
470 CmArmGenericInitiatorAffinityInfoParser
,
471 ARRAY_SIZE (CmArmGenericInitiatorAffinityInfoParser
) },
472 { "EArmObjSerialPortInfo", CmArmSerialPortInfoParser
,
473 ARRAY_SIZE (CmArmSerialPortInfoParser
) },
474 { "EArmObjCmn600Info", CmArmCmn600InfoParser
,
475 ARRAY_SIZE (CmArmCmn600InfoParser
) },
476 { "EArmObjLpiInfo", CmArmLpiInfoParser
,
477 ARRAY_SIZE (CmArmLpiInfoParser
) },
478 { "EArmObjMax", NULL
, 0 },
481 /** A parser for EStdObjCfgMgrInfo.
483 STATIC CONST CM_OBJ_PARSER StdObjCfgMgrInfoParser
[] = {
484 { "Revision", 4, "0x%x", NULL
},
485 { "OemId[6]", 6, "%C%C%C%C%C%C", PrintOemId
}
488 /** A parser for EStdObjAcpiTableList.
490 STATIC CONST CM_OBJ_PARSER StdObjAcpiTableInfoParser
[] = {
491 { "AcpiTableSignature", 4, "0x%x", NULL
},
492 { "AcpiTableRevision", 1, "%d", NULL
},
493 { "TableGeneratorId", sizeof (ACPI_TABLE_GENERATOR_ID
), "0x%x", NULL
},
494 { "AcpiTableData", sizeof (EFI_ACPI_DESCRIPTION_HEADER
*), "0x%p", NULL
},
495 { "OemTableId", 8, "0x%LLX", NULL
},
496 { "OemRevision", 4, "0x%x", NULL
}
499 /** A parser for EStdObjSmbiosTableList.
501 STATIC CONST CM_OBJ_PARSER StdObjSmbiosTableInfoParser
[] = {
502 { "TableGeneratorId", sizeof (SMBIOS_TABLE_GENERATOR_ID
), "0x%x", NULL
},
503 { "SmbiosTableData", sizeof (SMBIOS_STRUCTURE
*), "0x%p", NULL
}
506 /** A parser for Standard namespace objects.
508 STATIC CONST CM_OBJ_PARSER_ARRAY StdNamespaceObjectParser
[] = {
509 { "EStdObjCfgMgrInfo", StdObjCfgMgrInfoParser
,
510 ARRAY_SIZE (StdObjCfgMgrInfoParser
) },
511 { "EStdObjAcpiTableList", StdObjAcpiTableInfoParser
,
512 ARRAY_SIZE (StdObjAcpiTableInfoParser
) },
513 { "EStdObjSmbiosTableList", StdObjSmbiosTableInfoParser
,
514 ARRAY_SIZE (StdObjSmbiosTableInfoParser
) },
519 @param [in] Format Format to print the Ptr.
520 @param [in] Ptr Pointer to the OEM Id.
526 IN CONST CHAR8
*Format
,
532 (Format
!= NULL
) ? Format
: "%C%C%C%C%C%C",
542 /** Print fields of the objects.
544 @param [in] Data Pointer to the object to print.
545 @param [in] Parser Parser containing the object fields.
546 @param [in] ItemCount Number of entries/fields in the Parser.
547 @param [in] RemainingSize Parse at most *RemainingSize bytes.
548 This function decrements the value
549 from the number bytes consumed.
550 @param [in] IndentLevel Indentation to use when printing.
556 IN CONST CM_OBJ_PARSER
*Parser
,
558 IN INTN
*RemainingSize
,
559 IN UINT32 IndentLevel
566 if ((Data
== NULL
) ||
569 (RemainingSize
== NULL
))
576 for (Index
= 0; Index
< ItemCount
; Index
++) {
577 // Check there is enough space in left.
578 *RemainingSize
-= Parser
[Index
].Length
;
579 if (*RemainingSize
< 0) {
582 "\nERROR: %a: Buffer overrun\n",
583 Parser
[Index
].NameStr
590 for (IndentIndex
= 0; IndentIndex
< IndentLevel
; IndentIndex
++) {
591 DEBUG ((DEBUG_ERROR
, " "));
597 OUTPUT_FIELD_COLUMN_WIDTH
- 2 * IndentLevel
,
598 Parser
[Index
].NameStr
600 if (Parser
[Index
].PrintFormatter
!= NULL
) {
601 Parser
[Index
].PrintFormatter (Parser
[Index
].Format
, Data
);
602 } else if (Parser
[Index
].Format
!= NULL
) {
603 switch (Parser
[Index
].Length
) {
605 DEBUG ((DEBUG_ERROR
, Parser
[Index
].Format
, *(UINT8
*)Data
));
608 DEBUG ((DEBUG_ERROR
, Parser
[Index
].Format
, *(UINT16
*)Data
));
611 DEBUG ((DEBUG_ERROR
, Parser
[Index
].Format
, *(UINT32
*)Data
));
614 DEBUG ((DEBUG_ERROR
, Parser
[Index
].Format
, ReadUnaligned64 (Data
)));
619 "\nERROR: %a: CANNOT PARSE THIS FIELD, Field Length = %d\n",
620 Parser
[Index
].NameStr
,
624 } else if (Parser
[Index
].SubObjParser
!= NULL
) {
625 SubStructSize
= Parser
[Index
].Length
;
627 DEBUG ((DEBUG_ERROR
, "\n"));
630 Parser
[Index
].SubObjParser
,
631 Parser
[Index
].SubObjItemCount
,
639 "\nERROR: %a: CANNOT PARSE THIS FIELD, Field Length = %d\n",
640 Parser
[Index
].NameStr
,
645 DEBUG ((DEBUG_ERROR
, "\n"));
646 Data
= (UINT8
*)Data
+ Parser
[Index
].Length
;
650 /** Parse and print a CmObjDesc.
652 @param [in] CmObjDesc The CmObjDesc to parse and print.
657 IN CONST CM_OBJ_DESCRIPTOR
*CmObjDesc
665 CONST CM_OBJ_PARSER_ARRAY
*ParserArray
;
667 if ((CmObjDesc
== NULL
) || (CmObjDesc
->Data
== NULL
)) {
671 NameSpaceId
= GET_CM_NAMESPACE_ID (CmObjDesc
->ObjectId
);
672 ObjId
= GET_CM_OBJECT_ID (CmObjDesc
->ObjectId
);
674 switch (NameSpaceId
) {
675 case EObjNameSpaceStandard
:
676 if (ObjId
>= EStdObjMax
) {
681 ParserArray
= &StdNamespaceObjectParser
[ObjId
];
683 case EObjNameSpaceArm
:
684 if (ObjId
>= EArmObjMax
) {
689 ParserArray
= &ArmNamespaceObjectParser
[ObjId
];
697 ObjectCount
= CmObjDesc
->Count
;
698 RemainingSize
= CmObjDesc
->Size
;
700 for (ObjIndex
= 0; ObjIndex
< ObjectCount
; ObjIndex
++) {
704 OUTPUT_FIELD_COLUMN_WIDTH
,
705 ParserArray
->ObjectName
,
712 ParserArray
->ItemCount
,