]> git.proxmox.com Git - mirror_edk2.git/blame - DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c
DynamicTablesPkg: Add PCCT related objects
[mirror_edk2.git] / DynamicTablesPkg / Library / Common / TableHelperLib / ConfigurationManagerObjectParser.c
CommitLineData
96e006b3
SM
1/** @file\r
2 Configuration Manager Object parser.\r
3\r
020891f1 4 Copyright (c) 2021 - 2022, ARM Limited. All rights reserved.<BR>\r
96e006b3
SM
5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
6\r
7**/\r
8\r
9#include <Library/BaseLib.h>\r
10#include <Library/DebugLib.h>\r
11#include <ConfigurationManagerObject.h>\r
12#include "ConfigurationManagerObjectParser.h"\r
13\r
14STATIC\r
15VOID\r
16EFIAPI\r
17PrintOemId (\r
731c67e1
MK
18 CONST CHAR8 *Format,\r
19 UINT8 *Ptr\r
96e006b3
SM
20 );\r
21\r
48c6e7db
PG
22STATIC\r
23VOID\r
24EFIAPI\r
25PrintString (\r
26 CONST CHAR8 *Format,\r
27 UINT8 *Ptr\r
28 );\r
29\r
96e006b3
SM
30/** A parser for EArmObjBootArchInfo.\r
31*/\r
731c67e1
MK
32STATIC CONST CM_OBJ_PARSER CmArmBootArchInfoParser[] = {\r
33 { "BootArchFlags", 2, "0x%x", NULL }\r
96e006b3
SM
34};\r
35\r
36/** A parser for EArmObjPowerManagementProfileInfo.\r
37*/\r
731c67e1
MK
38STATIC CONST CM_OBJ_PARSER CmArmPowerManagementProfileInfoParser[] = {\r
39 { "PowerManagementProfile", 1, "0x%x", NULL }\r
96e006b3
SM
40};\r
41\r
42/** A parser for EArmObjGicCInfo.\r
43*/\r
731c67e1 44STATIC CONST CM_OBJ_PARSER CmArmGicCInfoParser[] = {\r
09c90532
JB
45 { "CPUInterfaceNumber", 4, "0x%x", NULL },\r
46 { "AcpiProcessorUid", 4, "0x%x", NULL },\r
47 { "Flags", 4, "0x%x", NULL },\r
48 { "ParkingProtocolVersion", 4, "0x%x", NULL },\r
49 { "PerformanceInterruptGsiv", 4, "0x%x", NULL },\r
50 { "ParkedAddress", 8, "0x%llx", NULL },\r
51 { "PhysicalBaseAddress", 8, "0x%llx", NULL },\r
52 { "GICV", 8, "0x%llx", NULL },\r
53 { "GICH", 8, "0x%llx", NULL },\r
54 { "VGICMaintenanceInterrupt", 4, "0x%x", NULL },\r
55 { "GICRBaseAddress", 8, "0x%llx", NULL },\r
56 { "MPIDR", 8, "0x%llx", NULL },\r
57 { "ProcessorPowerEfficiencyClass", 1, "0x%x", NULL },\r
58 { "SpeOverflowInterrupt", 2, "0x%x", NULL },\r
59 { "ProximityDomain", 4, "0x%x", NULL },\r
60 { "ClockDomain", 4, "0x%x", NULL },\r
61 { "AffinityFlags", 4, "0x%x", NULL },\r
62 { "CpcToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }\r
96e006b3
SM
63};\r
64\r
65/** A parser for EArmObjGicDInfo.\r
66*/\r
731c67e1
MK
67STATIC CONST CM_OBJ_PARSER CmArmGicDInfoParser[] = {\r
68 { "PhysicalBaseAddress", 8, "0x%llx", NULL },\r
69 { "SystemVectorBase", 4, "0x%x", NULL },\r
70 { "GicVersion", 1, "0x%x", NULL },\r
96e006b3
SM
71};\r
72\r
73/** A parser for EArmObjGicMsiFrameInfo.\r
74*/\r
731c67e1
MK
75STATIC CONST CM_OBJ_PARSER CmArmGicMsiFrameInfoParser[] = {\r
76 { "GicMsiFrameId", 4, "0x%x", NULL },\r
77 { "PhysicalBaseAddress", 8, "0x%llx", NULL },\r
78 { "Flags", 4, "0x%x", NULL },\r
79 { "SPICount", 2, "0x%x", NULL },\r
80 { "SPIBase", 2, "0x%x", NULL }\r
96e006b3
SM
81};\r
82\r
83/** A parser for EArmObjGicRedistributorInfo.\r
84*/\r
731c67e1
MK
85STATIC CONST CM_OBJ_PARSER CmArmGicRedistInfoParser[] = {\r
86 { "DiscoveryRangeBaseAddress", 8, "0x%llx", NULL },\r
87 { "DiscoveryRangeLength", 4, "0x%x", NULL }\r
96e006b3
SM
88};\r
89\r
90/** A parser for EArmObjGicItsInfo.\r
91*/\r
731c67e1
MK
92STATIC CONST CM_OBJ_PARSER CmArmGicItsInfoParser[] = {\r
93 { "GicItsId", 4, "0x%x", NULL },\r
94 { "PhysicalBaseAddress", 8, "0x%llx", NULL },\r
95 { "ProximityDomain", 4, "0x%x", NULL }\r
96e006b3
SM
96};\r
97\r
98/** A parser for EArmObjSerialConsolePortInfo,\r
99 EArmObjSerialDebugPortInfo and EArmObjSerialPortInfo.\r
100*/\r
731c67e1
MK
101STATIC CONST CM_OBJ_PARSER CmArmSerialPortInfoParser[] = {\r
102 { "BaseAddress", 8, "0x%llx", NULL },\r
103 { "Interrupt", 4, "0x%x", NULL },\r
104 { "BaudRate", 8, "0x%llx", NULL },\r
105 { "Clock", 4, "0x%x", NULL },\r
106 { "PortSubtype", 2, "0x%x", NULL },\r
107 { "BaseAddressLength", 8, "0x%llx", NULL },\r
108 { "AccessSize", 1, "0x%d", NULL }\r
96e006b3
SM
109};\r
110\r
111/** A parser for EArmObjGenericTimerInfo.\r
112*/\r
731c67e1
MK
113STATIC CONST CM_OBJ_PARSER CmArmGenericTimerInfoParser[] = {\r
114 { "CounterControlBaseAddress", 8, "0x%llx", NULL },\r
115 { "CounterReadBaseAddress", 8, "0x%llx", NULL },\r
116 { "SecurePL1TimerGSIV", 4, "0x%x", NULL },\r
117 { "SecurePL1TimerFlags", 4, "0x%x", NULL },\r
118 { "NonSecurePL1TimerGSIV", 4, "0x%x", NULL },\r
119 { "NonSecurePL1TimerFlags", 4, "0x%x", NULL },\r
120 { "VirtualTimerGSIV", 4, "0x%x", NULL },\r
121 { "VirtualTimerFlags", 4, "0x%x", NULL },\r
122 { "NonSecurePL2TimerGSIV", 4, "0x%x", NULL },\r
123 { "NonSecurePL2TimerFlags", 4, "0x%x", NULL },\r
124 { "VirtualPL2TimerGSIV", 4, "0x%x", NULL },\r
125 { "VirtualPL2TimerFlags", 4, "0x%x", NULL }\r
96e006b3
SM
126};\r
127\r
128/** A parser for EArmObjPlatformGTBlockInfo.\r
129*/\r
a64cc435
PG
130STATIC CONST CM_OBJ_PARSER CmArmGTBlockInfoParser[] = {\r
131 { "GTBlockPhysicalAddress", 8, "0x%llx", NULL },\r
132 { "GTBlockTimerFrameCount", 4, "0x%x", NULL },\r
133 { "GTBlockTimerFrameToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }\r
134};\r
135\r
136/** A parser for EArmObjGTBlockTimerFrameInfo.\r
137*/\r
731c67e1
MK
138STATIC CONST CM_OBJ_PARSER CmArmGTBlockTimerFrameInfoParser[] = {\r
139 { "FrameNumber", 1, "0x%x", NULL },\r
140 { "PhysicalAddressCntBase", 8, "0x%llx", NULL },\r
141 { "PhysicalAddressCntEL0Base", 8, "0x%llx", NULL },\r
142 { "PhysicalTimerGSIV", 4, "0x%x", NULL },\r
143 { "PhysicalTimerFlags", 4, "0x%x", NULL },\r
144 { "VirtualTimerGSIV", 4, "0x%x", NULL },\r
145 { "VirtualTimerFlags", 4, "0x%x", NULL },\r
146 { "CommonFlags", 4, "0x%x", NULL }\r
96e006b3
SM
147};\r
148\r
96e006b3
SM
149/** A parser for EArmObjPlatformGenericWatchdogInfo.\r
150*/\r
731c67e1
MK
151STATIC CONST CM_OBJ_PARSER CmArmGenericWatchdogInfoParser[] = {\r
152 { "ControlFrameAddress", 8, "0x%llx", NULL },\r
153 { "RefreshFrameAddress", 8, "0x%llx", NULL },\r
154 { "TimerGSIV", 4, "0x%x", NULL },\r
155 { "Flags", 4, "0x%x", NULL }\r
96e006b3
SM
156};\r
157\r
158/** A parser for EArmObjPciConfigSpaceInfo.\r
159*/\r
731c67e1 160STATIC CONST CM_OBJ_PARSER CmArmPciConfigSpaceInfoParser[] = {\r
ce306e48
PG
161 { "BaseAddress", 8, "0x%llx", NULL },\r
162 { "PciSegmentGroupNumber", 2, "0x%x", NULL },\r
163 { "StartBusNumber", 1, "0x%x", NULL },\r
164 { "EndBusNumber", 1, "0x%x", NULL },\r
165 { "AddressMapToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
166 { "InterruptMapToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
96e006b3
SM
167};\r
168\r
169/** A parser for EArmObjHypervisorVendorIdentity.\r
170*/\r
731c67e1
MK
171STATIC CONST CM_OBJ_PARSER CmArmHypervisorVendorIdParser[] = {\r
172 { "HypervisorVendorId", 8, "0x%llx", NULL }\r
96e006b3
SM
173};\r
174\r
175/** A parser for EArmObjFixedFeatureFlags.\r
176*/\r
731c67e1
MK
177STATIC CONST CM_OBJ_PARSER CmArmFixedFeatureFlagsParser[] = {\r
178 { "Flags", 4, "0x%x", NULL }\r
96e006b3
SM
179};\r
180\r
181/** A parser for EArmObjItsGroup.\r
182*/\r
731c67e1
MK
183STATIC CONST CM_OBJ_PARSER CmArmItsGroupNodeParser[] = {\r
184 { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
185 { "ItsIdCount", 4, "0x%x", NULL },\r
44b7a856
PG
186 { "ItsIdToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
187 { "Identifier", 4, "0x%x", NULL },\r
96e006b3
SM
188};\r
189\r
190/** A parser for EArmObjNamedComponent.\r
191*/\r
731c67e1 192STATIC CONST CM_OBJ_PARSER CmArmNamedComponentNodeParser[] = {\r
44b7a856
PG
193 { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
194 { "IdMappingCount", 4, "0x%x", NULL },\r
195 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
196 { "Flags", 4, "0x%x", NULL },\r
197 { "CacheCoherent", 4, "0x%x", NULL },\r
198 { "AllocationHints", 1, "0x%x", NULL },\r
199 { "MemoryAccessFlags", 1, "0x%x", NULL },\r
200 { "AddressSizeLimit", 1, "0x%x", NULL },\r
201 { "ObjectName", sizeof (CHAR8 *), NULL, PrintString },\r
202 { "Identifier", 4, "0x%x", NULL },\r
96e006b3
SM
203};\r
204\r
205/** A parser for EArmObjRootComplex.\r
206*/\r
731c67e1
MK
207STATIC CONST CM_OBJ_PARSER CmArmRootComplexNodeParser[] = {\r
208 { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
209 { "IdMappingCount", 4, "0x%x", NULL },\r
210 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
211 { "CacheCoherent", 4, "0x%x", NULL },\r
212 { "AllocationHints", 1, "0x%x", NULL },\r
213 { "MemoryAccessFlags", 1, "0x%x", NULL },\r
214 { "AtsAttribute", 4, "0x%x", NULL },\r
215 { "PciSegmentNumber", 4, "0x%x", NULL },\r
44b7a856
PG
216 { "MemoryAddressSize", 1, "0x%x", NULL },\r
217 { "PasidCapabilities", 2, "0x%x", NULL },\r
218 { "Flags", 4, "0x%x", NULL },\r
219 { "Identifier", 4, "0x%x", NULL },\r
96e006b3
SM
220};\r
221\r
222/** A parser for EArmObjSmmuV1SmmuV2.\r
223*/\r
731c67e1
MK
224STATIC CONST CM_OBJ_PARSER CmArmSmmuV1SmmuV2NodeParser[] = {\r
225 { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
226 { "IdMappingCount", 4, "0x%x", NULL },\r
227 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
228 { "BaseAddress", 8, "0x%llx", NULL },\r
229 { "Span", 8, "0x%llx", NULL },\r
230 { "Model", 4, "0x%x", NULL },\r
231 { "Flags", 4, "0x%x", NULL },\r
232 { "ContextInterruptCount", 4, "0x%x", NULL },\r
233 { "ContextInterruptToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
234 { "PmuInterruptCount", 4, "0x%x", NULL },\r
235 { "PmuInterruptToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
236 { "SMMU_NSgIrpt", 4, "0x%x", NULL },\r
237 { "SMMU_NSgIrptFlags", 4, "0x%x", NULL },\r
238 { "SMMU_NSgCfgIrpt", 4, "0x%x", NULL },\r
44b7a856
PG
239 { "SMMU_NSgCfgIrptFlags", 4, "0x%x", NULL },\r
240 { "Identifier", 4, "0x%x", NULL },\r
96e006b3
SM
241};\r
242\r
243/** A parser for EArmObjSmmuV3.\r
244*/\r
731c67e1
MK
245STATIC CONST CM_OBJ_PARSER CmArmSmmuV3NodeParser[] = {\r
246 { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
247 { "IdMappingCount", 4, "0x%x", NULL },\r
248 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
249 { "BaseAddress", 8, "0x%llx", NULL },\r
250 { "Flags", 4, "0x%x", NULL },\r
251 { "VatosAddress", 8, "0x%llx", NULL },\r
252 { "Model", 4, "0x%x", NULL },\r
253 { "EventInterrupt", 4, "0x%x", NULL },\r
254 { "PriInterrupt", 4, "0x%x", NULL },\r
255 { "GerrInterrupt", 4, "0x%x", NULL },\r
256 { "SyncInterrupt", 4, "0x%x", NULL },\r
257 { "ProximityDomain", 4, "0x%x", NULL },\r
44b7a856
PG
258 { "DeviceIdMappingIndex", 4, "0x%x", NULL },\r
259 { "Identifier", 4, "0x%x", NULL },\r
96e006b3
SM
260};\r
261\r
262/** A parser for EArmObjPmcg.\r
263*/\r
731c67e1
MK
264STATIC CONST CM_OBJ_PARSER CmArmPmcgNodeParser[] = {\r
265 { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
266 { "IdMappingCount", 4, "0x%x", NULL },\r
267 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
268 { "BaseAddress", 8, "0x%llx", NULL },\r
269 { "OverflowInterrupt", 4, "0x%x", NULL },\r
270 { "Page1BaseAddress", 8, "0x%llx", NULL },\r
44b7a856
PG
271 { "ReferenceToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
272 { "Identifier", 4, "0x%x", NULL },\r
96e006b3
SM
273};\r
274\r
275/** A parser for EArmObjGicItsIdentifierArray.\r
276*/\r
731c67e1
MK
277STATIC CONST CM_OBJ_PARSER CmArmGicItsIdentifierParser[] = {\r
278 { "ItsId", 4, "0x%x", NULL }\r
96e006b3
SM
279};\r
280\r
281/** A parser for EArmObjIdMappingArray.\r
282*/\r
731c67e1
MK
283STATIC CONST CM_OBJ_PARSER CmArmIdMappingParser[] = {\r
284 { "InputBase", 4, "0x%x", NULL },\r
285 { "NumIds", 4, "0x%x", NULL },\r
286 { "OutputBase", 4, "0x%x", NULL },\r
287 { "OutputReferenceToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
288 { "Flags", 4, "0x%x", NULL }\r
96e006b3
SM
289};\r
290\r
291/** A parser for EArmObjSmmuInterruptArray.\r
292*/\r
731c67e1
MK
293STATIC CONST CM_OBJ_PARSER CmArmGenericInterruptParser[] = {\r
294 { "Interrupt", 4, "0x%x", NULL },\r
295 { "Flags", 4, "0x%x", NULL }\r
96e006b3
SM
296};\r
297\r
298/** A parser for EArmObjProcHierarchyInfo.\r
299*/\r
731c67e1
MK
300STATIC CONST CM_OBJ_PARSER CmArmProcHierarchyInfoParser[] = {\r
301 { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
302 { "Flags", 4, "0x%x", NULL },\r
303 { "ParentToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
304 { "GicCToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
305 { "NoOfPrivateResources", 4, "0x%x", NULL },\r
2ef32f91
PG
306 { "PrivateResourcesArrayToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
307 { "LpiToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
96e006b3
SM
308};\r
309\r
310/** A parser for EArmObjCacheInfo.\r
311*/\r
731c67e1
MK
312STATIC CONST CM_OBJ_PARSER CmArmCacheInfoParser[] = {\r
313 { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
314 { "NextLevelOfCacheToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
315 { "Size", 4, "0x%x", NULL },\r
316 { "NumberOfSets", 4, "0x%x", NULL },\r
317 { "Associativity", 4, "0x%x", NULL },\r
318 { "Attributes", 1, "0x%x", NULL },\r
2ef32f91
PG
319 { "LineSize", 2, "0x%x", NULL },\r
320 { "CacheId", 4, "0x%x", NULL },\r
96e006b3
SM
321};\r
322\r
323/** A parser for EArmObjProcNodeIdInfo.\r
324*/\r
731c67e1
MK
325STATIC CONST CM_OBJ_PARSER CmArmProcNodeIdInfoParser[] = {\r
326 { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
327 { "VendorId", 4, "0x%p", NULL },\r
328 { "Level1Id", 8, "0x%x", NULL },\r
329 { "Level2Id", 8, "0x%x", NULL },\r
330 { "MajorRev", 2, "0x%x", NULL },\r
331 { "MinorRev", 2, "0x%x", NULL },\r
332 { "SpinRev", 2, "0x%x", NULL }\r
96e006b3
SM
333};\r
334\r
335/** A parser for EArmObjCmRef.\r
336*/\r
731c67e1
MK
337STATIC CONST CM_OBJ_PARSER CmArmObjRefParser[] = {\r
338 { "ReferenceToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }\r
96e006b3
SM
339};\r
340\r
341/** A parser for EArmObjMemoryAffinityInfo.\r
342*/\r
731c67e1
MK
343STATIC CONST CM_OBJ_PARSER CmArmMemoryAffinityInfoParser[] = {\r
344 { "ProximityDomain", 4, "0x%x", NULL },\r
345 { "BaseAddress", 8, "0x%llx", NULL },\r
346 { "Length", 8, "0x%llx", NULL },\r
347 { "Flags", 4, "0x%x", NULL }\r
96e006b3
SM
348};\r
349\r
350/** A parser for EArmObjDeviceHandleAcpi.\r
351*/\r
731c67e1
MK
352STATIC CONST CM_OBJ_PARSER CmArmDeviceHandleAcpiParser[] = {\r
353 { "Hid", 8, "0x%llx", NULL },\r
354 { "Uid", 4, "0x%x", NULL }\r
96e006b3
SM
355};\r
356\r
357/** A parser for EArmObjDeviceHandlePci.\r
358*/\r
731c67e1
MK
359STATIC CONST CM_OBJ_PARSER CmArmDeviceHandlePciParser[] = {\r
360 { "SegmentNumber", 2, "0x%x", NULL },\r
361 { "BusNumber", 1, "0x%x", NULL },\r
362 { "DeviceNumber", 1, "0x%x", NULL },\r
363 { "FunctionNumber", 1, "0x%x", NULL }\r
96e006b3
SM
364};\r
365\r
366/** A parser for EArmObjGenericInitiatorAffinityInfo.\r
367*/\r
731c67e1
MK
368STATIC CONST CM_OBJ_PARSER CmArmGenericInitiatorAffinityInfoParser[] = {\r
369 { "ProximityDomain", 4, "0x%x", NULL },\r
370 { "Flags", 4, "0x%x", NULL },\r
371 { "DeviceHandleType", 1, "0x%x", NULL },\r
372 { "DeviceHandleToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }\r
96e006b3
SM
373};\r
374\r
375/** A parser for EArmObjCmn600Info.\r
376*/\r
731c67e1
MK
377STATIC CONST CM_OBJ_PARSER CmArmCmn600InfoParser[] = {\r
378 { "PeriphBaseAddress", 8, "0x%llx", NULL },\r
379 { "PeriphBaseAddressLength", 8, "0x%llx", NULL },\r
380 { "RootNodeBaseAddress", 8, "0x%llx", NULL },\r
381 { "DtcCount", 1, "0x%x", NULL },\r
382 { "DtcInterrupt[0]", 4, "0x%x", NULL },\r
383 { "DtcFlags[0]", 4, "0x%x", NULL },\r
384 { "DtcInterrupt[1]", 4, "0x%x", NULL },\r
385 { "DtcFlags[1]", 4, "0x%x", NULL },\r
386 { "DtcInterrupt[2]", 4, "0x%x", NULL },\r
387 { "DtcFlags[2]", 4, "0x%x", NULL },\r
388 { "DtcInterrupt[3]", 4, "0x%x", NULL },\r
389 { "DtcFlags[3]", 4, "0x%x", NULL }\r
96e006b3
SM
390};\r
391\r
f17ef10e
PG
392/** A parser for the EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE structure.\r
393*/\r
731c67e1
MK
394STATIC CONST CM_OBJ_PARSER AcpiGenericAddressParser[] = {\r
395 { "AddressSpaceId", 1, "%d", NULL },\r
396 { "RegisterBitWidth", 1, "%d", NULL },\r
397 { "RegisterBitOffset", 1, "%d", NULL },\r
398 { "AccessSize", 1, "%d", NULL },\r
399 { "Address", 8, "0x%llx", NULL },\r
f17ef10e
PG
400};\r
401\r
402/** A parser for EArmObjLpiInfo.\r
403*/\r
731c67e1 404STATIC CONST CM_OBJ_PARSER CmArmLpiInfoParser[] = {\r
2ef32f91
PG
405 { "MinResidency", 4, "0x%x", NULL },\r
406 { "WorstCaseWakeLatency", 4, "0x%x", NULL },\r
407 { "Flags", 4, "0x%x", NULL },\r
408 { "ArchFlags", 4, "0x%x", NULL },\r
409 { "ResCntFreq", 4, "0x%x", NULL },\r
410 { "EnableParentState", 4, "0x%x", NULL },\r
411 { "IsInteger", 1, "%d", NULL },\r
412 { "IntegerEntryMethod", 8, "0x%llx", NULL },\r
731c67e1 413 { "RegisterEntryMethod", sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE),\r
f17ef10e 414 NULL, NULL, AcpiGenericAddressParser,\r
731c67e1
MK
415 ARRAY_SIZE (AcpiGenericAddressParser) },\r
416 { "ResidencyCounterRegister", sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE),\r
f17ef10e 417 NULL, NULL, AcpiGenericAddressParser,\r
731c67e1
MK
418 ARRAY_SIZE (AcpiGenericAddressParser) },\r
419 { "UsageCounterRegister", sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE),\r
f17ef10e 420 NULL, NULL, AcpiGenericAddressParser,\r
731c67e1 421 ARRAY_SIZE (AcpiGenericAddressParser) },\r
2ef32f91 422 { "StateName", 16, NULL, PrintString },\r
f17ef10e
PG
423};\r
424\r
ce306e48
PG
425/** A parser for EArmObjPciAddressMapInfo.\r
426*/\r
427STATIC CONST CM_OBJ_PARSER CmArmPciAddressMapInfoParser[] = {\r
428 { "SpaceCode", 1, "%d", NULL },\r
429 { "PciAddress", 8, "0x%llx", NULL },\r
430 { "CpuAddress", 8, "0x%llx", NULL },\r
431 { "AddressSize", 8, "0x%llx", NULL },\r
432};\r
433\r
434/** A parser for EArmObjPciInterruptMapInfo.\r
435*/\r
436STATIC CONST CM_OBJ_PARSER CmPciInterruptMapInfoParser[] = {\r
437 { "PciBus", 1, "0x%x", NULL },\r
438 { "PciDevice", 1, "0x%x", NULL },\r
439 { "PciInterrupt", 1, "0x%x", NULL },\r
440 { "IntcInterrupt", sizeof (CM_ARM_GENERIC_INTERRUPT),\r
441 NULL, NULL, CmArmGenericInterruptParser,\r
442 ARRAY_SIZE (CmArmGenericInterruptParser) },\r
443};\r
444\r
44b7a856
PG
445/** A parser for EArmObjRmr.\r
446*/\r
447STATIC CONST CM_OBJ_PARSER CmArmRmrInfoParser[] = {\r
448 { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
449 { "IdMappingCount", 4, "0x%x", NULL },\r
450 { "IdMappingToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
451 { "Identifier", 4, "0x%x", NULL },\r
452 { "Flags", 4, "0x%x", NULL },\r
453 { "MemRangeDescCount", 4, "0x%x", NULL },\r
454 { "MemRangeDescToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },\r
455};\r
456\r
457/** A parser for EArmObjMemoryRangeDescriptor.\r
458*/\r
459STATIC CONST CM_OBJ_PARSER CmArmMemoryRangeDescriptorInfoParser[] = {\r
460 { "BaseAddress", 8, "0x%llx", NULL },\r
461 { "Length", 8, "0x%llx", NULL },\r
462};\r
463\r
09c90532
JB
464/** A parser for EArmObjCpcInfo.\r
465*/\r
466STATIC CONST CM_OBJ_PARSER CmArmCpcInfoParser[] = {\r
467 { "Revision", 4, "0x%lx", NULL },\r
468 { "HighestPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
469 NULL, NULL, AcpiGenericAddressParser,\r
470 ARRAY_SIZE (AcpiGenericAddressParser) },\r
471 { "HighestPerformanceInteger", 4, "0x%lx", NULL },\r
472 { "NominalPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
473 NULL, NULL, AcpiGenericAddressParser,\r
474 ARRAY_SIZE (AcpiGenericAddressParser) },\r
475 { "NominalPerformanceInteger", 4, "0x%lx", NULL },\r
476 { "LowestNonlinearPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
477 NULL, NULL, AcpiGenericAddressParser,\r
478 ARRAY_SIZE (AcpiGenericAddressParser) },\r
479 { "LowestNonlinearPerformanceInteger", 4, "0x%lx", NULL },\r
480 { "LowestPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
481 NULL, NULL, AcpiGenericAddressParser,\r
482 ARRAY_SIZE (AcpiGenericAddressParser) },\r
483 { "LowestPerformanceInteger", 4, "0x%lx", NULL },\r
484 { "GuaranteedPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
485 NULL, NULL, AcpiGenericAddressParser,\r
486 ARRAY_SIZE (AcpiGenericAddressParser) },\r
487 { "DesiredPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
488 NULL, NULL, AcpiGenericAddressParser,\r
489 ARRAY_SIZE (AcpiGenericAddressParser) },\r
490 { "MinimumPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
491 NULL, NULL, AcpiGenericAddressParser,\r
492 ARRAY_SIZE (AcpiGenericAddressParser) },\r
493 { "MaximumPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
494 NULL, NULL, AcpiGenericAddressParser,\r
495 ARRAY_SIZE (AcpiGenericAddressParser) },\r
496 { "PerformanceReductionToleranceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
497 NULL, NULL, AcpiGenericAddressParser,\r
498 ARRAY_SIZE (AcpiGenericAddressParser) },\r
499 { "TimeWindowRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
500 NULL, NULL, AcpiGenericAddressParser,\r
501 ARRAY_SIZE (AcpiGenericAddressParser) },\r
502 { "CounterWraparoundTimeBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
503 NULL, NULL, AcpiGenericAddressParser,\r
504 ARRAY_SIZE (AcpiGenericAddressParser) },\r
505 { "CounterWraparoundTimeInteger", 4, "0x%lx", NULL },\r
506 { "ReferencePerformanceCounterRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
507 NULL, NULL, AcpiGenericAddressParser,\r
508 ARRAY_SIZE (AcpiGenericAddressParser) },\r
509 { "DeliveredPerformanceCounterRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
510 NULL, NULL, AcpiGenericAddressParser,\r
511 ARRAY_SIZE (AcpiGenericAddressParser) },\r
512 { "PerformanceLimitedRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
513 NULL, NULL, AcpiGenericAddressParser,\r
514 ARRAY_SIZE (AcpiGenericAddressParser) },\r
515 { "CPPCEnableRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
516 NULL, NULL, AcpiGenericAddressParser,\r
517 ARRAY_SIZE (AcpiGenericAddressParser) },\r
518 { "AutonomousSelectionEnableBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
519 NULL, NULL, AcpiGenericAddressParser,\r
520 ARRAY_SIZE (AcpiGenericAddressParser) },\r
521 { "AutonomousSelectionEnableInteger", 4, "0x%lx", NULL },\r
522 { "AutonomousActivityWindowRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
523 NULL, NULL, AcpiGenericAddressParser,\r
524 ARRAY_SIZE (AcpiGenericAddressParser) },\r
525 { "EnergyPerformancePreferenceRegister", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
526 NULL, NULL, AcpiGenericAddressParser,\r
527 ARRAY_SIZE (AcpiGenericAddressParser) },\r
528 { "ReferencePerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
529 NULL, NULL, AcpiGenericAddressParser,\r
530 ARRAY_SIZE (AcpiGenericAddressParser) },\r
531 { "ReferencePerformanceInteger", 4, "0x%lx", NULL },\r
532 { "LowestFrequencyBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
533 NULL, NULL, AcpiGenericAddressParser,\r
534 ARRAY_SIZE (AcpiGenericAddressParser) },\r
535 { "LowestFrequencyInteger", 4, "0x%lx", NULL },\r
536 { "NominalFrequencyBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE),\r
537 NULL, NULL, AcpiGenericAddressParser,\r
538 ARRAY_SIZE (AcpiGenericAddressParser) },\r
539 { "NominalFrequencyInteger", 4, "0x%lx", NULL },\r
540};\r
541\r
dab7bac9
PG
542/** A parser for the PCC_MAILBOX_REGISTER_INFO struct.\r
543*/\r
544STATIC CONST CM_OBJ_PARSER CmArmMailboxRegisterInfoParser[] = {\r
545 { "Register", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE), NULL, NULL,\r
546 AcpiGenericAddressParser, ARRAY_SIZE (AcpiGenericAddressParser) },\r
547 { "PreserveMask", 8, "0x%llx", NULL },\r
548 { "WriteMask", 8, "0x%llx", NULL },\r
549};\r
550\r
551/** A parser for the PCC_SUBSPACE_CHANNEL_TIMING_INFO struct.\r
552*/\r
553STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceChannelTimingInfoParser[] = {\r
554 { "NominalLatency", 4, "0x%x", NULL },\r
555 { "MaxPeriodicAccessRate", 4, "0x%x", NULL },\r
556 { "MinRequestTurnaroundTime", 2, "0x%x", NULL },\r
557};\r
558\r
559/** A parser for EArmObjPccSubspaceType0Info.\r
560*/\r
561STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType0InfoParser[] = {\r
562 { "SubspaceId", 1, "0x%x", NULL },\r
563 { "Type", 1, "0x%x", NULL },\r
564 { "BaseAddress", 8, "0x%llx", NULL },\r
565 { "AddressLength", 8, "0x%llx", NULL },\r
566 { "DoorbellReg", sizeof (PCC_MAILBOX_REGISTER_INFO),\r
567 NULL, NULL, CmArmMailboxRegisterInfoParser,\r
568 ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },\r
569 { "ChannelTiming", sizeof (PCC_SUBSPACE_CHANNEL_TIMING_INFO),\r
570 NULL, NULL, CmArmPccSubspaceChannelTimingInfoParser,\r
571 ARRAY_SIZE (CmArmPccSubspaceChannelTimingInfoParser) },\r
572};\r
573\r
574/** A parser for EArmObjPccSubspaceType1Info.\r
575*/\r
576STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType1InfoParser[] = {\r
577 { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO),\r
578 NULL, NULL, CmArmPccSubspaceType0InfoParser,\r
579 ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },\r
580 { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT),\r
581 NULL, NULL, CmArmGenericInterruptParser,\r
582 ARRAY_SIZE (CmArmGenericInterruptParser) },\r
583};\r
584\r
585/** A parser for EArmObjPccSubspaceType2Info.\r
586*/\r
587STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType2InfoParser[] = {\r
588 { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO),\r
589 NULL, NULL, CmArmPccSubspaceType0InfoParser,\r
590 ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },\r
591 { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT), NULL,NULL,\r
592 CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) },\r
593 { "PlatIrqAckReg", sizeof (PCC_MAILBOX_REGISTER_INFO),\r
594 NULL, NULL, CmArmMailboxRegisterInfoParser,\r
595 ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },\r
596};\r
597\r
598/** A parser for EArmObjPccSubspaceType3Info or EArmObjPccSubspaceType4Info.\r
599*/\r
600STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType34InfoParser[] = {\r
601 { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO),\r
602 NULL, NULL, CmArmPccSubspaceType0InfoParser,\r
603 ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },\r
604 { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT), NULL,NULL,\r
605 CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) },\r
606 { "PlatIrqAckReg", sizeof (PCC_MAILBOX_REGISTER_INFO),\r
607 NULL, NULL, CmArmMailboxRegisterInfoParser,\r
608 ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },\r
609 { "CmdCompleteCheckReg", sizeof (PCC_MAILBOX_REGISTER_INFO),\r
610 NULL, NULL, CmArmMailboxRegisterInfoParser,\r
611 ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },\r
612 { "CmdCompleteUpdateReg", sizeof (PCC_MAILBOX_REGISTER_INFO),\r
613 NULL, NULL, CmArmMailboxRegisterInfoParser,\r
614 ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },\r
615 { "ErrorStatusReg", sizeof (PCC_MAILBOX_REGISTER_INFO),\r
616 NULL, NULL, CmArmMailboxRegisterInfoParser,\r
617 ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },\r
618};\r
619\r
620/** A parser for EArmObjPccSubspaceType5Info.\r
621*/\r
622STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType5InfoParser[] = {\r
623 { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO),\r
624 NULL, NULL, CmArmPccSubspaceType0InfoParser,\r
625 ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },\r
626 { "Version", 2, "0x%x",NULL },\r
627 { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT), NULL, NULL,\r
628 CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) },\r
629 { "CmdCompleteCheckReg", sizeof (PCC_MAILBOX_REGISTER_INFO),\r
630 NULL, NULL, CmArmMailboxRegisterInfoParser,\r
631 ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },\r
632 { "ErrorStatusReg", sizeof (PCC_MAILBOX_REGISTER_INFO),\r
633 NULL, NULL, CmArmMailboxRegisterInfoParser,\r
634 ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },\r
635};\r
636\r
96e006b3
SM
637/** A parser for Arm namespace objects.\r
638*/\r
731c67e1
MK
639STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = {\r
640 { "EArmObjReserved", NULL, 0 },\r
641 { "EArmObjBootArchInfo", CmArmBootArchInfoParser,\r
642 ARRAY_SIZE (CmArmBootArchInfoParser) },\r
643 { "EArmObjCpuInfo", NULL, 0 },\r
644 { "EArmObjPowerManagementProfileInfo", CmArmPowerManagementProfileInfoParser,\r
645 ARRAY_SIZE (CmArmPowerManagementProfileInfoParser) },\r
646 { "EArmObjGicCInfo", CmArmGicCInfoParser, ARRAY_SIZE (CmArmGicCInfoParser) },\r
647 { "EArmObjGicDInfo", CmArmGicDInfoParser, ARRAY_SIZE (CmArmGicDInfoParser) },\r
648 { "EArmObjGicMsiFrameInfo", CmArmGicMsiFrameInfoParser,\r
649 ARRAY_SIZE (CmArmGicMsiFrameInfoParser) },\r
650 { "EArmObjGicRedistributorInfo", CmArmGicRedistInfoParser,\r
651 ARRAY_SIZE (CmArmGicRedistInfoParser) },\r
652 { "EArmObjGicItsInfo", CmArmGicItsInfoParser,\r
653 ARRAY_SIZE (CmArmGicItsInfoParser) },\r
654 { "EArmObjSerialConsolePortInfo", CmArmSerialPortInfoParser,\r
655 ARRAY_SIZE (CmArmSerialPortInfoParser) },\r
656 { "EArmObjSerialDebugPortInfo", CmArmSerialPortInfoParser,\r
657 ARRAY_SIZE (CmArmSerialPortInfoParser) },\r
658 { "EArmObjGenericTimerInfo", CmArmGenericTimerInfoParser,\r
659 ARRAY_SIZE (CmArmGenericTimerInfoParser) },\r
a64cc435 660 { "EArmObjPlatformGTBlockInfo", CmArmGTBlockInfoParser,\r
731c67e1 661 ARRAY_SIZE (CmArmGTBlockInfoParser) },\r
a64cc435
PG
662 { "EArmObjGTBlockTimerFrameInfo", CmArmGTBlockTimerFrameInfoParser,\r
663 ARRAY_SIZE (CmArmGTBlockTimerFrameInfoParser) },\r
731c67e1
MK
664 { "EArmObjPlatformGenericWatchdogInfo", CmArmGenericWatchdogInfoParser,\r
665 ARRAY_SIZE (CmArmGenericWatchdogInfoParser) },\r
666 { "EArmObjPciConfigSpaceInfo", CmArmPciConfigSpaceInfoParser,\r
667 ARRAY_SIZE (CmArmPciConfigSpaceInfoParser) },\r
668 { "EArmObjHypervisorVendorIdentity", CmArmHypervisorVendorIdParser,\r
669 ARRAY_SIZE (CmArmHypervisorVendorIdParser) },\r
670 { "EArmObjFixedFeatureFlags", CmArmFixedFeatureFlagsParser,\r
671 ARRAY_SIZE (CmArmFixedFeatureFlagsParser) },\r
672 { "EArmObjItsGroup", CmArmItsGroupNodeParser,\r
673 ARRAY_SIZE (CmArmItsGroupNodeParser) },\r
674 { "EArmObjNamedComponent", CmArmNamedComponentNodeParser,\r
675 ARRAY_SIZE (CmArmNamedComponentNodeParser) },\r
676 { "EArmObjRootComplex", CmArmRootComplexNodeParser,\r
677 ARRAY_SIZE (CmArmRootComplexNodeParser) },\r
678 { "EArmObjSmmuV1SmmuV2", CmArmSmmuV1SmmuV2NodeParser,\r
679 ARRAY_SIZE (CmArmSmmuV1SmmuV2NodeParser) },\r
680 { "EArmObjSmmuV3", CmArmSmmuV3NodeParser,\r
681 ARRAY_SIZE (CmArmSmmuV3NodeParser) },\r
682 { "EArmObjPmcg", CmArmPmcgNodeParser, ARRAY_SIZE (CmArmPmcgNodeParser) },\r
683 { "EArmObjGicItsIdentifierArray", CmArmGicItsIdentifierParser,\r
684 ARRAY_SIZE (CmArmGicItsIdentifierParser) },\r
685 { "EArmObjIdMappingArray", CmArmIdMappingParser,\r
686 ARRAY_SIZE (CmArmIdMappingParser) },\r
687 { "EArmObjSmmuInterruptArray", CmArmGenericInterruptParser,\r
688 ARRAY_SIZE (CmArmGenericInterruptParser) },\r
689 { "EArmObjProcHierarchyInfo", CmArmProcHierarchyInfoParser,\r
690 ARRAY_SIZE (CmArmProcHierarchyInfoParser) },\r
691 { "EArmObjCacheInfo", CmArmCacheInfoParser,\r
692 ARRAY_SIZE (CmArmCacheInfoParser) },\r
693 { "EArmObjProcNodeIdInfo", CmArmProcNodeIdInfoParser,\r
694 ARRAY_SIZE (CmArmProcNodeIdInfoParser) },\r
695 { "EArmObjCmRef", CmArmObjRefParser, ARRAY_SIZE (CmArmObjRefParser) },\r
696 { "EArmObjMemoryAffinityInfo", CmArmMemoryAffinityInfoParser,\r
697 ARRAY_SIZE (CmArmMemoryAffinityInfoParser) },\r
698 { "EArmObjDeviceHandleAcpi", CmArmDeviceHandleAcpiParser,\r
699 ARRAY_SIZE (CmArmDeviceHandleAcpiParser) },\r
700 { "EArmObjDeviceHandlePci", CmArmDeviceHandlePciParser,\r
701 ARRAY_SIZE (CmArmDeviceHandlePciParser) },\r
702 { "EArmObjGenericInitiatorAffinityInfo",\r
96e006b3 703 CmArmGenericInitiatorAffinityInfoParser,\r
731c67e1
MK
704 ARRAY_SIZE (CmArmGenericInitiatorAffinityInfoParser) },\r
705 { "EArmObjSerialPortInfo", CmArmSerialPortInfoParser,\r
706 ARRAY_SIZE (CmArmSerialPortInfoParser) },\r
707 { "EArmObjCmn600Info", CmArmCmn600InfoParser,\r
708 ARRAY_SIZE (CmArmCmn600InfoParser) },\r
709 { "EArmObjLpiInfo", CmArmLpiInfoParser,\r
710 ARRAY_SIZE (CmArmLpiInfoParser) },\r
ce306e48
PG
711 { "EArmObjPciAddressMapInfo", CmArmPciAddressMapInfoParser,\r
712 ARRAY_SIZE (CmArmPciAddressMapInfoParser) },\r
713 { "EArmObjPciInterruptMapInfo", CmPciInterruptMapInfoParser,\r
714 ARRAY_SIZE (CmPciInterruptMapInfoParser) },\r
44b7a856
PG
715 { "EArmObjRmr", CmArmRmrInfoParser,\r
716 ARRAY_SIZE (CmArmRmrInfoParser) },\r
717 { "EArmObjMemoryRangeDescriptor", CmArmMemoryRangeDescriptorInfoParser,\r
718 ARRAY_SIZE (CmArmMemoryRangeDescriptorInfoParser) },\r
09c90532
JB
719 { "EArmObjCpcInfo", CmArmCpcInfoParser,\r
720 ARRAY_SIZE (CmArmCpcInfoParser) },\r
dab7bac9
PG
721 { "EArmObjPccSubspaceType0Info", CmArmPccSubspaceType0InfoParser,\r
722 ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },\r
723 { "EArmObjPccSubspaceType1Info", CmArmPccSubspaceType1InfoParser,\r
724 ARRAY_SIZE (CmArmPccSubspaceType1InfoParser) },\r
725 { "EArmObjPccSubspaceType2Info", CmArmPccSubspaceType2InfoParser,\r
726 ARRAY_SIZE (CmArmPccSubspaceType2InfoParser) },\r
727 { "EArmObjPccSubspaceType3Info", CmArmPccSubspaceType34InfoParser,\r
728 ARRAY_SIZE (CmArmPccSubspaceType34InfoParser) },\r
729 { "EArmObjPccSubspaceType4Info", CmArmPccSubspaceType34InfoParser,\r
730 ARRAY_SIZE (CmArmPccSubspaceType34InfoParser) },\r
731 { "EArmObjPccSubspaceType5Info", CmArmPccSubspaceType5InfoParser,\r
732 ARRAY_SIZE (CmArmPccSubspaceType5InfoParser) },\r
731c67e1 733 { "EArmObjMax", NULL, 0 },\r
96e006b3
SM
734};\r
735\r
736/** A parser for EStdObjCfgMgrInfo.\r
737*/\r
731c67e1
MK
738STATIC CONST CM_OBJ_PARSER StdObjCfgMgrInfoParser[] = {\r
739 { "Revision", 4, "0x%x", NULL },\r
740 { "OemId[6]", 6, "%C%C%C%C%C%C", PrintOemId }\r
96e006b3
SM
741};\r
742\r
743/** A parser for EStdObjAcpiTableList.\r
744*/\r
731c67e1
MK
745STATIC CONST CM_OBJ_PARSER StdObjAcpiTableInfoParser[] = {\r
746 { "AcpiTableSignature", 4, "0x%x", NULL },\r
747 { "AcpiTableRevision", 1, "%d", NULL },\r
748 { "TableGeneratorId", sizeof (ACPI_TABLE_GENERATOR_ID), "0x%x", NULL },\r
749 { "AcpiTableData", sizeof (EFI_ACPI_DESCRIPTION_HEADER *), "0x%p", NULL },\r
750 { "OemTableId", 8, "0x%LLX", NULL },\r
3bcc2e22
PG
751 { "OemRevision", 4, "0x%x", NULL },\r
752 { "MinorRevision", 1, "0x%x", NULL },\r
96e006b3
SM
753};\r
754\r
755/** A parser for EStdObjSmbiosTableList.\r
756*/\r
731c67e1
MK
757STATIC CONST CM_OBJ_PARSER StdObjSmbiosTableInfoParser[] = {\r
758 { "TableGeneratorId", sizeof (SMBIOS_TABLE_GENERATOR_ID), "0x%x", NULL },\r
759 { "SmbiosTableData", sizeof (SMBIOS_STRUCTURE *), "0x%p", NULL }\r
96e006b3
SM
760};\r
761\r
762/** A parser for Standard namespace objects.\r
763*/\r
731c67e1
MK
764STATIC CONST CM_OBJ_PARSER_ARRAY StdNamespaceObjectParser[] = {\r
765 { "EStdObjCfgMgrInfo", StdObjCfgMgrInfoParser,\r
766 ARRAY_SIZE (StdObjCfgMgrInfoParser) },\r
767 { "EStdObjAcpiTableList", StdObjAcpiTableInfoParser,\r
768 ARRAY_SIZE (StdObjAcpiTableInfoParser) },\r
769 { "EStdObjSmbiosTableList", StdObjSmbiosTableInfoParser,\r
770 ARRAY_SIZE (StdObjSmbiosTableInfoParser) },\r
96e006b3
SM
771};\r
772\r
773/** Print OEM Id.\r
774\r
775 @param [in] Format Format to print the Ptr.\r
776 @param [in] Ptr Pointer to the OEM Id.\r
777**/\r
778STATIC\r
779VOID\r
780EFIAPI\r
781PrintOemId (\r
731c67e1
MK
782 IN CONST CHAR8 *Format,\r
783 IN UINT8 *Ptr\r
96e006b3
SM
784 )\r
785{\r
786 DEBUG ((\r
787 DEBUG_ERROR,\r
788 (Format != NULL) ? Format : "%C%C%C%C%C%C",\r
789 Ptr[0],\r
790 Ptr[1],\r
791 Ptr[2],\r
792 Ptr[3],\r
793 Ptr[4],\r
794 Ptr[5]\r
795 ));\r
796}\r
797\r
48c6e7db
PG
798/** Print string.\r
799\r
800 The string must be NULL terminated.\r
801\r
802 @param [in] Format Format to print the Ptr.\r
803 @param [in] Ptr Pointer to the string.\r
804**/\r
805STATIC\r
806VOID\r
807EFIAPI\r
808PrintString (\r
809 CONST CHAR8 *Format,\r
810 UINT8 *Ptr\r
811 )\r
812{\r
813 DEBUG ((DEBUG_ERROR, "%a", Ptr));\r
814}\r
815\r
96e006b3
SM
816/** Print fields of the objects.\r
817\r
818 @param [in] Data Pointer to the object to print.\r
819 @param [in] Parser Parser containing the object fields.\r
820 @param [in] ItemCount Number of entries/fields in the Parser.\r
821 @param [in] RemainingSize Parse at most *RemainingSize bytes.\r
822 This function decrements the value\r
823 from the number bytes consumed.\r
824 @param [in] IndentLevel Indentation to use when printing.\r
825**/\r
826STATIC\r
827VOID\r
828PrintCmObjDesc (\r
731c67e1
MK
829 IN VOID *Data,\r
830 IN CONST CM_OBJ_PARSER *Parser,\r
831 IN UINTN ItemCount,\r
832 IN INTN *RemainingSize,\r
833 IN UINT32 IndentLevel\r
96e006b3
SM
834 )\r
835{\r
836 UINT32 Index;\r
837 UINT32 IndentIndex;\r
838 INTN SubStructSize;\r
839\r
840 if ((Data == NULL) ||\r
841 (Parser == NULL) ||\r
842 (ItemCount == 0) ||\r
731c67e1
MK
843 (RemainingSize == NULL))\r
844 {\r
96e006b3
SM
845 ASSERT (0);\r
846 return;\r
847 }\r
848\r
849 // Print each field.\r
850 for (Index = 0; Index < ItemCount; Index++) {\r
851 // Check there is enough space in left.\r
852 *RemainingSize -= Parser[Index].Length;\r
853 if (*RemainingSize < 0) {\r
854 DEBUG ((\r
855 DEBUG_ERROR,\r
856 "\nERROR: %a: Buffer overrun\n",\r
857 Parser[Index].NameStr\r
858 ));\r
859 ASSERT (0);\r
860 return;\r
861 }\r
862\r
863 // Indentation\r
864 for (IndentIndex = 0; IndentIndex < IndentLevel; IndentIndex++) {\r
865 DEBUG ((DEBUG_ERROR, " "));\r
866 }\r
867\r
868 DEBUG ((\r
869 DEBUG_ERROR,\r
870 "%-*a :",\r
871 OUTPUT_FIELD_COLUMN_WIDTH - 2 * IndentLevel,\r
872 Parser[Index].NameStr\r
873 ));\r
874 if (Parser[Index].PrintFormatter != NULL) {\r
875 Parser[Index].PrintFormatter (Parser[Index].Format, Data);\r
876 } else if (Parser[Index].Format != NULL) {\r
877 switch (Parser[Index].Length) {\r
878 case 1:\r
731c67e1 879 DEBUG ((DEBUG_ERROR, Parser[Index].Format, *(UINT8 *)Data));\r
96e006b3
SM
880 break;\r
881 case 2:\r
731c67e1 882 DEBUG ((DEBUG_ERROR, Parser[Index].Format, *(UINT16 *)Data));\r
96e006b3
SM
883 break;\r
884 case 4:\r
731c67e1 885 DEBUG ((DEBUG_ERROR, Parser[Index].Format, *(UINT32 *)Data));\r
96e006b3
SM
886 break;\r
887 case 8:\r
731c67e1 888 DEBUG ((DEBUG_ERROR, Parser[Index].Format, ReadUnaligned64 (Data)));\r
96e006b3
SM
889 break;\r
890 default:\r
891 DEBUG ((\r
892 DEBUG_ERROR,\r
893 "\nERROR: %a: CANNOT PARSE THIS FIELD, Field Length = %d\n",\r
894 Parser[Index].NameStr,\r
895 Parser[Index].Length\r
896 ));\r
897 } // switch\r
898 } else if (Parser[Index].SubObjParser != NULL) {\r
899 SubStructSize = Parser[Index].Length;\r
900\r
901 DEBUG ((DEBUG_ERROR, "\n"));\r
902 PrintCmObjDesc (\r
903 Data,\r
904 Parser[Index].SubObjParser,\r
905 Parser[Index].SubObjItemCount,\r
906 &SubStructSize,\r
907 IndentLevel + 1\r
908 );\r
909 } else {\r
910 ASSERT (0);\r
911 DEBUG ((\r
912 DEBUG_ERROR,\r
913 "\nERROR: %a: CANNOT PARSE THIS FIELD, Field Length = %d\n",\r
914 Parser[Index].NameStr,\r
915 Parser[Index].Length\r
916 ));\r
917 }\r
731c67e1 918\r
96e006b3 919 DEBUG ((DEBUG_ERROR, "\n"));\r
731c67e1 920 Data = (UINT8 *)Data + Parser[Index].Length;\r
96e006b3
SM
921 } // for\r
922}\r
923\r
924/** Parse and print a CmObjDesc.\r
925\r
926 @param [in] CmObjDesc The CmObjDesc to parse and print.\r
927**/\r
928VOID\r
929EFIAPI\r
930ParseCmObjDesc (\r
731c67e1 931 IN CONST CM_OBJ_DESCRIPTOR *CmObjDesc\r
96e006b3
SM
932 )\r
933{\r
731c67e1
MK
934 UINTN ObjId;\r
935 UINTN NameSpaceId;\r
936 UINT32 ObjIndex;\r
937 UINT32 ObjectCount;\r
938 INTN RemainingSize;\r
ec37fd9c 939 INTN Offset;\r
731c67e1 940 CONST CM_OBJ_PARSER_ARRAY *ParserArray;\r
96e006b3
SM
941\r
942 if ((CmObjDesc == NULL) || (CmObjDesc->Data == NULL)) {\r
943 return;\r
944 }\r
945\r
946 NameSpaceId = GET_CM_NAMESPACE_ID (CmObjDesc->ObjectId);\r
731c67e1 947 ObjId = GET_CM_OBJECT_ID (CmObjDesc->ObjectId);\r
96e006b3
SM
948\r
949 switch (NameSpaceId) {\r
950 case EObjNameSpaceStandard:\r
951 if (ObjId >= EStdObjMax) {\r
952 ASSERT (0);\r
953 return;\r
954 }\r
731c67e1 955\r
96e006b3
SM
956 ParserArray = &StdNamespaceObjectParser[ObjId];\r
957 break;\r
958 case EObjNameSpaceArm:\r
959 if (ObjId >= EArmObjMax) {\r
960 ASSERT (0);\r
961 return;\r
962 }\r
731c67e1 963\r
96e006b3
SM
964 ParserArray = &ArmNamespaceObjectParser[ObjId];\r
965 break;\r
966 default:\r
967 // Not supported\r
968 ASSERT (0);\r
969 return;\r
970 } // switch\r
971\r
731c67e1 972 ObjectCount = CmObjDesc->Count;\r
96e006b3 973 RemainingSize = CmObjDesc->Size;\r
ec37fd9c 974 Offset = 0;\r
96e006b3
SM
975\r
976 for (ObjIndex = 0; ObjIndex < ObjectCount; ObjIndex++) {\r
977 DEBUG ((\r
978 DEBUG_ERROR,\r
979 "\n%-*a [%d/%d]:\n",\r
980 OUTPUT_FIELD_COLUMN_WIDTH,\r
981 ParserArray->ObjectName,\r
982 ObjIndex + 1,\r
983 ObjectCount\r
984 ));\r
985 PrintCmObjDesc (\r
ec37fd9c 986 (VOID *)((UINTN)CmObjDesc->Data + Offset),\r
96e006b3
SM
987 ParserArray->Parser,\r
988 ParserArray->ItemCount,\r
989 &RemainingSize,\r
990 1\r
991 );\r
ec37fd9c
PG
992 if ((RemainingSize > CmObjDesc->Size) ||\r
993 (RemainingSize < 0))\r
994 {\r
995 ASSERT (0);\r
996 return;\r
997 }\r
998\r
999 Offset = CmObjDesc->Size - RemainingSize;\r
96e006b3 1000 } // for\r
ec37fd9c
PG
1001\r
1002 ASSERT (RemainingSize == 0);\r
96e006b3 1003}\r