]>
Commit | Line | Data |
---|---|---|
fda5226a ZL |
1 | /** @file\r |
2 | Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>\r | |
3 | SPDX-License-Identifier: BSD-2-Clause-Patent\r | |
4 | **/\r | |
5 | \r | |
6 | #include "UefiPayloadEntry.h"\r | |
7 | #include <UniversalPayload/AcpiTable.h>\r | |
8 | #include <UniversalPayload/SerialPortInfo.h>\r | |
9 | #include <UniversalPayload/PciRootBridges.h>\r | |
10 | #include <UniversalPayload/ExtraData.h>\r | |
11 | #include <Guid/MemoryTypeInformation.h>\r | |
12 | #include <Guid/AcpiBoardInfoGuid.h>\r | |
dcd3d63f | 13 | #include <Guid/BootManagerMenu.h>\r |
fda5226a | 14 | \r |
e5efcf8b | 15 | #define ROW_LIMITER 16\r |
fda5226a ZL |
16 | \r |
17 | typedef\r | |
18 | EFI_STATUS\r | |
19 | (*HOB_PRINT_HANDLER) (\r | |
e5efcf8b MK |
20 | IN VOID *Hob,\r |
21 | IN UINT16 HobLength\r | |
22 | );\r | |
fda5226a | 23 | \r |
e5efcf8b | 24 | typedef struct {\r |
fda5226a ZL |
25 | UINT16 Type;\r |
26 | CHAR8 *Name;\r | |
27 | HOB_PRINT_HANDLER PrintHandler;\r | |
28 | } HOB_PRINT_HANDLER_TABLE;\r | |
29 | \r | |
e5efcf8b | 30 | CHAR8 *mMemoryTypeStr[] = {\r |
fda5226a ZL |
31 | "EfiReservedMemoryType",\r |
32 | "EfiLoaderCode",\r | |
33 | "EfiLoaderData",\r | |
34 | "EfiBootServicesCode",\r | |
35 | "EfiBootServicesData",\r | |
36 | "EfiRuntimeServicesCode",\r | |
37 | "EfiRuntimeServicesData",\r | |
38 | "EfiConventionalMemory",\r | |
39 | "EfiUnusableMemory",\r | |
40 | "EfiACPIReclaimMemory",\r | |
41 | "EfiACPIMemoryNVS",\r | |
42 | "EfiMemoryMappedIO",\r | |
43 | "EfiMemoryMappedIOPortSpace",\r | |
44 | "EfiPalCode",\r | |
45 | "EfiPersistentMemory",\r | |
46 | "EfiMaxMemoryType"\r | |
47 | };\r | |
48 | \r | |
e5efcf8b MK |
49 | CHAR8 *mResource_Type_List[] = {\r |
50 | "EFI_RESOURCE_SYSTEM_MEMORY ", // 0x00000000\r | |
51 | "EFI_RESOURCE_MEMORY_MAPPED_IO ", // 0x00000001\r | |
52 | "EFI_RESOURCE_IO ", // 0x00000002\r | |
53 | "EFI_RESOURCE_FIRMWARE_DEVICE ", // 0x00000003\r | |
54 | "EFI_RESOURCE_MEMORY_MAPPED_IO_PORT ", // 0x00000004\r | |
55 | "EFI_RESOURCE_MEMORY_RESERVED ", // 0x00000005\r | |
56 | "EFI_RESOURCE_IO_RESERVED ", // 0x00000006\r | |
57 | "EFI_RESOURCE_MAX_MEMORY_TYPE " // 0x00000007\r | |
fda5226a ZL |
58 | };\r |
59 | \r | |
60 | typedef\r | |
61 | EFI_STATUS\r | |
62 | (*GUID_HOB_PRINT) (\r | |
e5efcf8b MK |
63 | IN UINT8 *HobRaw,\r |
64 | IN UINT16 HobLength\r | |
65 | );\r | |
fda5226a ZL |
66 | \r |
67 | typedef struct {\r | |
68 | EFI_GUID *Guid;\r | |
69 | GUID_HOB_PRINT PrintHandler;\r | |
70 | CHAR8 *GuidName;\r | |
71 | } GUID_HOB_PRINT_HANDLE;\r | |
72 | \r | |
e5efcf8b MK |
73 | typedef struct {\r |
74 | EFI_GUID *Guid;\r | |
75 | CHAR8 *Type;\r | |
fda5226a ZL |
76 | } PRINT_MEMORY_ALLOCCATION_HOB;\r |
77 | \r | |
fda5226a ZL |
78 | /**\r |
79 | Print the Hex value of a given range.\r | |
80 | @param[in] DataStart A pointer to the start of data to be printed.\r | |
81 | @param[in] DataSize The length of the data to be printed.\r | |
82 | @retval EFI_SUCCESS If it completed successfully.\r | |
83 | **/\r | |
84 | EFI_STATUS\r | |
85 | PrintHex (\r | |
e5efcf8b MK |
86 | IN UINT8 *DataStart,\r |
87 | IN UINT16 DataSize\r | |
fda5226a ZL |
88 | )\r |
89 | {\r | |
90 | UINTN Index1;\r | |
91 | UINTN Index2;\r | |
92 | UINT8 *StartAddr;\r | |
93 | \r | |
94 | StartAddr = DataStart;\r | |
95 | for (Index1 = 0; Index1 * ROW_LIMITER < DataSize; Index1++) {\r | |
96 | DEBUG ((DEBUG_VERBOSE, " 0x%04p:", (DataStart - StartAddr)));\r | |
e5efcf8b | 97 | for (Index2 = 0; (Index2 < ROW_LIMITER) && (Index1 * ROW_LIMITER + Index2 < DataSize); Index2++) {\r |
fda5226a ZL |
98 | DEBUG ((DEBUG_VERBOSE, " %02x", *DataStart));\r |
99 | DataStart++;\r | |
100 | }\r | |
e5efcf8b | 101 | \r |
fda5226a ZL |
102 | DEBUG ((DEBUG_VERBOSE, "\n"));\r |
103 | }\r | |
104 | \r | |
105 | return EFI_SUCCESS;\r | |
106 | }\r | |
107 | \r | |
108 | /**\r | |
109 | Print the information in HandOffHob.\r | |
110 | \r | |
111 | @param[in] HobStart A pointer to the HOB of type EFI_HOB_TYPE_HANDOFF.\r | |
112 | @param[in] HobLength The length in bytes of HOB of type EFI_HOB_TYPE_HANDOFF.\r | |
113 | @retval EFI_SUCCESS If it completed successfully.\r | |
114 | **/\r | |
115 | EFI_STATUS\r | |
e5efcf8b MK |
116 | PrintHandOffHob (\r |
117 | IN VOID *HobStart,\r | |
118 | IN UINT16 HobLength\r | |
fda5226a ZL |
119 | )\r |
120 | {\r | |
121 | EFI_PEI_HOB_POINTERS Hob;\r | |
e5efcf8b MK |
122 | \r |
123 | Hob.Raw = (UINT8 *)HobStart;\r | |
fda5226a | 124 | ASSERT (HobLength >= sizeof (*Hob.HandoffInformationTable));\r |
e5efcf8b | 125 | DEBUG ((DEBUG_INFO, " BootMode = 0x%x\n", Hob.HandoffInformationTable->BootMode));\r |
fda5226a ZL |
126 | DEBUG ((DEBUG_INFO, " EfiMemoryTop = 0x%lx\n", Hob.HandoffInformationTable->EfiMemoryTop));\r |
127 | DEBUG ((DEBUG_INFO, " EfiMemoryBottom = 0x%lx\n", Hob.HandoffInformationTable->EfiMemoryBottom));\r | |
128 | DEBUG ((DEBUG_INFO, " EfiFreeMemoryTop = 0x%lx\n", Hob.HandoffInformationTable->EfiFreeMemoryTop));\r | |
129 | DEBUG ((DEBUG_INFO, " EfiFreeMemoryBottom = 0x%lx\n", Hob.HandoffInformationTable->EfiFreeMemoryBottom));\r | |
130 | DEBUG ((DEBUG_INFO, " EfiEndOfHobList = 0x%lx\n", Hob.HandoffInformationTable->EfiEndOfHobList));\r | |
131 | return EFI_SUCCESS;\r | |
132 | }\r | |
133 | \r | |
134 | /**\r | |
135 | Print the information in Memory Allocation Hob.\r | |
136 | @param[in] HobStart A pointer to the HOB of type EFI_HOB_TYPE_MEMORY_ALLOCATION.\r | |
137 | @param[in] HobLength The length in bytes of HOB of type EFI_HOB_TYPE_MEMORY_ALLOCATION.\r | |
138 | @retval EFI_SUCCESS If it completed successfully.\r | |
139 | **/\r | |
140 | EFI_STATUS\r | |
141 | PrintMemoryAllocationHob (\r | |
e5efcf8b MK |
142 | IN VOID *HobStart,\r |
143 | IN UINT16 HobLength\r | |
fda5226a ZL |
144 | )\r |
145 | {\r | |
146 | EFI_PEI_HOB_POINTERS Hob;\r | |
147 | \r | |
e5efcf8b | 148 | Hob.Raw = (UINT8 *)HobStart;\r |
fda5226a | 149 | \r |
e5efcf8b | 150 | if (CompareGuid (&Hob.MemoryAllocation->AllocDescriptor.Name, &gEfiHobMemoryAllocStackGuid)) {\r |
fda5226a ZL |
151 | ASSERT (HobLength >= sizeof (*Hob.MemoryAllocationStack));\r |
152 | DEBUG ((DEBUG_INFO, " Type = EFI_HOB_MEMORY_ALLOCATION_STACK\n"));\r | |
153 | } else if (CompareGuid (&Hob.MemoryAllocation->AllocDescriptor.Name, &gEfiHobMemoryAllocBspStoreGuid)) {\r | |
154 | ASSERT (HobLength >= sizeof (*Hob.MemoryAllocationBspStore));\r | |
155 | DEBUG ((DEBUG_INFO, " Type = EFI_HOB_MEMORY_ALLOCATION_BSP_STORE\n"));\r | |
156 | } else if (CompareGuid (&Hob.MemoryAllocation->AllocDescriptor.Name, &gEfiHobMemoryAllocModuleGuid)) {\r | |
157 | ASSERT (HobLength >= sizeof (*Hob.MemoryAllocationModule));\r | |
158 | DEBUG ((DEBUG_INFO, " Type = EFI_HOB_MEMORY_ALLOCATION_MODULE\n"));\r | |
159 | DEBUG ((DEBUG_INFO, " Module Name = %g\n", Hob.MemoryAllocationModule->ModuleName));\r | |
160 | DEBUG ((DEBUG_INFO, " Physical Address = 0x%lx\n", Hob.MemoryAllocationModule->EntryPoint));\r | |
161 | } else {\r | |
162 | ASSERT (HobLength >= sizeof (*Hob.MemoryAllocation));\r | |
163 | DEBUG ((DEBUG_INFO, " Type = EFI_HOB_TYPE_MEMORY_ALLOCATION\n"));\r | |
164 | }\r | |
e5efcf8b | 165 | \r |
fda5226a ZL |
166 | DEBUG ((DEBUG_INFO, " MemoryBaseAddress = 0x%lx\n", Hob.MemoryAllocationStack->AllocDescriptor.MemoryBaseAddress));\r |
167 | DEBUG ((DEBUG_INFO, " MemoryLength = 0x%lx\n", Hob.MemoryAllocationStack->AllocDescriptor.MemoryLength));\r | |
e5efcf8b | 168 | DEBUG ((DEBUG_INFO, " MemoryType = %a \n", mMemoryTypeStr[Hob.MemoryAllocationStack->AllocDescriptor.MemoryType]));\r |
fda5226a ZL |
169 | return EFI_SUCCESS;\r |
170 | }\r | |
171 | \r | |
172 | /**\r | |
173 | Print the information in Resource Discriptor Hob.\r | |
174 | @param[in] HobStart A pointer to HOB of type EFI_HOB_TYPE_RESOURCE_DESCRIPTOR.\r | |
175 | @param[in] HobLength The Length in bytes of HOB of type EFI_HOB_TYPE_RESOURCE_DESCRIPTOR.\r | |
176 | @retval EFI_SUCCESS If it completed successfully.\r | |
177 | **/\r | |
178 | EFI_STATUS\r | |
179 | PrintResourceDiscriptorHob (\r | |
e5efcf8b MK |
180 | IN VOID *HobStart,\r |
181 | IN UINT16 HobLength\r | |
fda5226a ZL |
182 | )\r |
183 | {\r | |
184 | EFI_PEI_HOB_POINTERS Hob;\r | |
185 | \r | |
e5efcf8b | 186 | Hob.Raw = (UINT8 *)HobStart;\r |
fda5226a ZL |
187 | ASSERT (HobLength >= sizeof (*Hob.ResourceDescriptor));\r |
188 | \r | |
189 | DEBUG ((DEBUG_INFO, " ResourceType = %a\n", mResource_Type_List[Hob.ResourceDescriptor->ResourceType]));\r | |
e5efcf8b | 190 | if (!IsZeroGuid (&Hob.ResourceDescriptor->Owner)) {\r |
fda5226a ZL |
191 | DEBUG ((DEBUG_INFO, " Owner = %g\n", Hob.ResourceDescriptor->Owner));\r |
192 | }\r | |
e5efcf8b MK |
193 | \r |
194 | DEBUG ((DEBUG_INFO, " ResourceAttribute = 0x%x\n", Hob.ResourceDescriptor->ResourceAttribute));\r | |
fda5226a ZL |
195 | DEBUG ((DEBUG_INFO, " PhysicalStart = 0x%lx\n", Hob.ResourceDescriptor->PhysicalStart));\r |
196 | DEBUG ((DEBUG_INFO, " ResourceLength = 0x%lx\n", Hob.ResourceDescriptor->ResourceLength));\r | |
197 | return EFI_SUCCESS;\r | |
198 | }\r | |
199 | \r | |
200 | /**\r | |
201 | Print the information in Acpi Guid Hob.\r | |
6ef57974 | 202 | \r |
fda5226a | 203 | @param[in] HobRaw A pointer to the start of gUniversalPayloadAcpiTableGuid HOB.\r |
6ef57974 GD |
204 | @param[in] HobLength The size of the HOB data buffer.\r |
205 | \r | |
fda5226a ZL |
206 | @retval EFI_SUCCESS If it completed successfully.\r |
207 | **/\r | |
208 | EFI_STATUS\r | |
209 | PrintAcpiGuidHob (\r | |
e5efcf8b MK |
210 | IN UINT8 *HobRaw,\r |
211 | IN UINT16 HobLength\r | |
fda5226a ZL |
212 | )\r |
213 | {\r | |
e5efcf8b MK |
214 | UNIVERSAL_PAYLOAD_ACPI_TABLE *AcpiTableHob;\r |
215 | \r | |
216 | AcpiTableHob = (UNIVERSAL_PAYLOAD_ACPI_TABLE *)GET_GUID_HOB_DATA (HobRaw);\r | |
fda5226a | 217 | ASSERT (HobLength >= AcpiTableHob->Header.Length);\r |
e5efcf8b MK |
218 | DEBUG ((DEBUG_INFO, " Revision = 0x%x\n", AcpiTableHob->Header.Revision));\r |
219 | DEBUG ((DEBUG_INFO, " Length = 0x%x\n", AcpiTableHob->Header.Length));\r | |
220 | DEBUG ((DEBUG_INFO, " Rsdp = 0x%p\n", (UINT64)AcpiTableHob->Rsdp));\r | |
fda5226a ZL |
221 | return EFI_SUCCESS;\r |
222 | }\r | |
223 | \r | |
224 | /**\r | |
225 | Print the information in Serial Guid Hob.\r | |
226 | @param[in] HobRaw A pointer to the start of gUniversalPayloadSerialPortInfoGuid HOB.\r | |
6ef57974 GD |
227 | @param[in] HobLength The size of the HOB data buffer.\r |
228 | \r | |
fda5226a ZL |
229 | @retval EFI_SUCCESS If it completed successfully.\r |
230 | **/\r | |
231 | EFI_STATUS\r | |
232 | PrintSerialGuidHob (\r | |
e5efcf8b MK |
233 | IN UINT8 *HobRaw,\r |
234 | IN UINT16 HobLength\r | |
fda5226a ZL |
235 | )\r |
236 | {\r | |
e5efcf8b MK |
237 | UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO *SerialPortInfo;\r |
238 | \r | |
239 | SerialPortInfo = (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO *)GET_GUID_HOB_DATA (HobRaw);\r | |
fda5226a | 240 | ASSERT (HobLength >= SerialPortInfo->Header.Length);\r |
e5efcf8b MK |
241 | DEBUG ((DEBUG_INFO, " Revision = 0x%x\n", SerialPortInfo->Header.Revision));\r |
242 | DEBUG ((DEBUG_INFO, " Length = 0x%x\n", SerialPortInfo->Header.Length));\r | |
243 | DEBUG ((DEBUG_INFO, " UseMmio = 0x%x\n", SerialPortInfo->UseMmio));\r | |
244 | DEBUG ((DEBUG_INFO, " RegisterStride = 0x%x\n", SerialPortInfo->RegisterStride));\r | |
245 | DEBUG ((DEBUG_INFO, " BaudRate = %d\n", SerialPortInfo->BaudRate));\r | |
fda5226a ZL |
246 | DEBUG ((DEBUG_INFO, " RegisterBase = 0x%lx\n", SerialPortInfo->RegisterBase));\r |
247 | return EFI_SUCCESS;\r | |
248 | }\r | |
249 | \r | |
250 | /**\r | |
251 | Print the information in Smbios Guid Hob.\r | |
252 | @param[in] HobRaw A pointer to the start of gUniversalPayloadSmbios3TableGuid HOB.\r | |
6ef57974 | 253 | @param[in] HobLength The size of the HOB data buffer.\r |
fda5226a ZL |
254 | @retval EFI_SUCCESS If it completed successfully.\r |
255 | **/\r | |
256 | EFI_STATUS\r | |
257 | PrintSmbios3GuidHob (\r | |
e5efcf8b MK |
258 | IN UINT8 *HobRaw,\r |
259 | IN UINT16 HobLength\r | |
fda5226a ZL |
260 | )\r |
261 | {\r | |
e5efcf8b MK |
262 | UNIVERSAL_PAYLOAD_SMBIOS_TABLE *SmBiosTable;\r |
263 | \r | |
264 | SmBiosTable = (UNIVERSAL_PAYLOAD_SMBIOS_TABLE *)GET_GUID_HOB_DATA (HobRaw);\r | |
fda5226a | 265 | ASSERT (HobLength >= SmBiosTable->Header.Length);\r |
e5efcf8b MK |
266 | DEBUG ((DEBUG_INFO, " Revision = 0x%x\n", SmBiosTable->Header.Revision));\r |
267 | DEBUG ((DEBUG_INFO, " Length = 0x%x\n", SmBiosTable->Header.Length));\r | |
268 | DEBUG ((DEBUG_INFO, " SmBiosEntryPoint = 0x%lx\n", (UINT64)SmBiosTable->SmBiosEntryPoint));\r | |
fda5226a ZL |
269 | return EFI_SUCCESS;\r |
270 | }\r | |
271 | \r | |
272 | /**\r | |
273 | Print the information in Smbios Guid Hob.\r | |
274 | @param[in] HobRaw A pointer to the start of gUniversalPayloadSmbiosTableGuid HOB.\r | |
6ef57974 GD |
275 | @param[in] HobLength The size of the HOB data buffer.\r |
276 | \r | |
fda5226a ZL |
277 | @retval EFI_SUCCESS If it completed successfully.\r |
278 | **/\r | |
279 | EFI_STATUS\r | |
280 | PrintSmbiosTablGuidHob (\r | |
e5efcf8b MK |
281 | IN UINT8 *HobRaw,\r |
282 | IN UINT16 HobLength\r | |
fda5226a ZL |
283 | )\r |
284 | {\r | |
e5efcf8b MK |
285 | UNIVERSAL_PAYLOAD_SMBIOS_TABLE *SmBiosTable;\r |
286 | \r | |
287 | SmBiosTable = (UNIVERSAL_PAYLOAD_SMBIOS_TABLE *)GET_GUID_HOB_DATA (HobRaw);\r | |
fda5226a | 288 | ASSERT (HobLength >= SmBiosTable->Header.Length);\r |
e5efcf8b MK |
289 | DEBUG ((DEBUG_INFO, " Revision = 0x%x\n", SmBiosTable->Header.Revision));\r |
290 | DEBUG ((DEBUG_INFO, " Length = 0x%x\n", SmBiosTable->Header.Length));\r | |
291 | DEBUG ((DEBUG_INFO, " SmBiosEntryPoint = 0x%lx\n", (UINT64)SmBiosTable->SmBiosEntryPoint));\r | |
fda5226a ZL |
292 | return EFI_SUCCESS;\r |
293 | }\r | |
294 | \r | |
295 | /**\r | |
296 | Print the information in Acpi BoardInfo Guid Hob.\r | |
297 | @param[in] HobRaw A pointer to the start of gUefiAcpiBoardInfoGuid HOB.\r | |
6ef57974 GD |
298 | @param[in] HobLength The size of the HOB data buffer.\r |
299 | \r | |
fda5226a ZL |
300 | @retval EFI_SUCCESS If it completed successfully.\r |
301 | **/\r | |
302 | EFI_STATUS\r | |
303 | PrintAcpiBoardInfoGuidHob (\r | |
e5efcf8b MK |
304 | IN UINT8 *HobRaw,\r |
305 | IN UINT16 HobLength\r | |
fda5226a ZL |
306 | )\r |
307 | {\r | |
e5efcf8b MK |
308 | ACPI_BOARD_INFO *AcpBoardInfo;\r |
309 | \r | |
310 | AcpBoardInfo = (ACPI_BOARD_INFO *)GET_GUID_HOB_DATA (HobRaw);\r | |
fda5226a | 311 | ASSERT (HobLength >= sizeof (*AcpBoardInfo));\r |
e5efcf8b MK |
312 | DEBUG ((DEBUG_INFO, " Revision = 0x%x\n", AcpBoardInfo->Revision));\r |
313 | DEBUG ((DEBUG_INFO, " Reserved0 = 0x%x\n", AcpBoardInfo->Reserved0));\r | |
314 | DEBUG ((DEBUG_INFO, " ResetValue = 0x%x\n", AcpBoardInfo->ResetValue));\r | |
fda5226a ZL |
315 | DEBUG ((DEBUG_INFO, " PmEvtBase = 0x%lx\n", AcpBoardInfo->PmEvtBase));\r |
316 | DEBUG ((DEBUG_INFO, " PmGpeEnBase = 0x%lx\n", AcpBoardInfo->PmGpeEnBase));\r | |
317 | DEBUG ((DEBUG_INFO, " PmCtrlRegBase = 0x%lx\n", AcpBoardInfo->PmCtrlRegBase));\r | |
318 | DEBUG ((DEBUG_INFO, " PmTimerRegBase = 0x%lx\n", AcpBoardInfo->PmTimerRegBase));\r | |
319 | DEBUG ((DEBUG_INFO, " ResetRegAddress = 0x%lx\n", AcpBoardInfo->ResetRegAddress));\r | |
320 | DEBUG ((DEBUG_INFO, " PcieBaseAddress = 0x%lx\n", AcpBoardInfo->PcieBaseAddress));\r | |
321 | DEBUG ((DEBUG_INFO, " PcieBaseSize = 0x%lx\n", AcpBoardInfo->PcieBaseSize));\r | |
322 | return EFI_SUCCESS;\r | |
323 | }\r | |
324 | \r | |
325 | /**\r | |
326 | Print the information in Pci RootBridge Info Guid Hob.\r | |
327 | @param[in] HobRaw A pointer to the start of gUniversalPayloadPciRootBridgeInfoGuid HOB.\r | |
6ef57974 | 328 | @param[in] HobLength The size of the HOB data buffer.\r |
fda5226a ZL |
329 | \r |
330 | @retval EFI_SUCCESS If it completed successfully.\r | |
331 | **/\r | |
332 | EFI_STATUS\r | |
333 | PrintPciRootBridgeInfoGuidHob (\r | |
e5efcf8b MK |
334 | IN UINT8 *HobRaw,\r |
335 | IN UINT16 HobLength\r | |
fda5226a ZL |
336 | )\r |
337 | {\r | |
e5efcf8b MK |
338 | UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES *PciRootBridges;\r |
339 | UINTN Index;\r | |
340 | UINTN Length;\r | |
341 | \r | |
342 | Index = 0;\r | |
343 | PciRootBridges = (UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES *)GET_GUID_HOB_DATA (HobRaw);\r | |
344 | Length = sizeof (UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES) + PciRootBridges->Count * sizeof (UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGE);\r | |
d96df7e9 | 345 | ASSERT (HobLength >= Length);\r |
fda5226a ZL |
346 | DEBUG ((DEBUG_INFO, " Revision = 0x%x\n", PciRootBridges->Header.Revision));\r |
347 | DEBUG ((DEBUG_INFO, " Length = 0x%x\n", PciRootBridges->Header.Length));\r | |
348 | DEBUG ((DEBUG_INFO, " Count = 0x%x\n", PciRootBridges->Count));\r | |
e5efcf8b | 349 | DEBUG ((DEBUG_INFO, " ResourceAssigned = %a\n", (PciRootBridges->ResourceAssigned ? "True" : "False")));\r |
fda5226a | 350 | \r |
e5efcf8b | 351 | while (Index < PciRootBridges->Count) {\r |
fda5226a | 352 | DEBUG ((DEBUG_INFO, " Root Bridge Index[%d]:\n", Index));\r |
e5efcf8b | 353 | DEBUG ((DEBUG_INFO, " Segment = 0x%x\n", PciRootBridges->RootBridge[Index].Segment));\r |
fda5226a ZL |
354 | DEBUG ((DEBUG_INFO, " Supports = 0x%lx\n", PciRootBridges->RootBridge[Index].Supports));\r |
355 | DEBUG ((DEBUG_INFO, " Attributes = 0x%lx\n", PciRootBridges->RootBridge[Index].Attributes));\r | |
e5efcf8b MK |
356 | DEBUG ((DEBUG_INFO, " DmaAbove4G = 0x%x\n", PciRootBridges->RootBridge[Index].DmaAbove4G));\r |
357 | DEBUG ((DEBUG_INFO, " NoExtendedConfigSpace = 0x%x\n", PciRootBridges->RootBridge[Index].NoExtendedConfigSpace));\r | |
fda5226a ZL |
358 | DEBUG ((DEBUG_INFO, " AllocationAttributes = 0x%lx\n", PciRootBridges->RootBridge[Index].AllocationAttributes));\r |
359 | DEBUG ((DEBUG_INFO, " Bus.Base = 0x%lx\n", PciRootBridges->RootBridge[Index].Bus.Base));\r | |
360 | DEBUG ((DEBUG_INFO, " Bus.Limit = 0x%lx\n", PciRootBridges->RootBridge[Index].Bus.Limit));\r | |
361 | DEBUG ((DEBUG_INFO, " Bus.Translation = 0x%lx\n", PciRootBridges->RootBridge[Index].Bus.Translation));\r | |
362 | DEBUG ((DEBUG_INFO, " Io.Base = 0x%lx\n", PciRootBridges->RootBridge[Index].Io.Base));\r | |
363 | DEBUG ((DEBUG_INFO, " Io.Limit = 0x%lx\n", PciRootBridges->RootBridge[Index].Io.Limit));\r | |
364 | DEBUG ((DEBUG_INFO, " Io.Translation = 0x%lx\n", PciRootBridges->RootBridge[Index].Io.Translation));\r | |
365 | DEBUG ((DEBUG_INFO, " Mem.Base = 0x%lx\n", PciRootBridges->RootBridge[Index].Mem.Base));\r | |
366 | DEBUG ((DEBUG_INFO, " Mem.Limit = 0x%lx\n", PciRootBridges->RootBridge[Index].Mem.Limit));\r | |
367 | DEBUG ((DEBUG_INFO, " Mem.Translation = 0x%lx\n", PciRootBridges->RootBridge[Index].Mem.Translation));\r | |
368 | DEBUG ((DEBUG_INFO, " MemAbove4G.Base = 0x%lx\n", PciRootBridges->RootBridge[Index].MemAbove4G.Base));\r | |
369 | DEBUG ((DEBUG_INFO, " MemAbove4G.Limit = 0x%lx\n", PciRootBridges->RootBridge[Index].MemAbove4G.Limit));\r | |
370 | DEBUG ((DEBUG_INFO, " MemAbove4G.Translation = 0x%lx\n", PciRootBridges->RootBridge[Index].MemAbove4G.Translation));\r | |
371 | DEBUG ((DEBUG_INFO, " PMem.Base = 0x%lx\n", PciRootBridges->RootBridge[Index].PMem.Base));\r | |
372 | DEBUG ((DEBUG_INFO, " PMem.Limit = 0x%lx\n", PciRootBridges->RootBridge[Index].PMem.Limit));\r | |
373 | DEBUG ((DEBUG_INFO, " PMem.Translation = 0x%lx\n", PciRootBridges->RootBridge[Index].PMem.Translation));\r | |
374 | DEBUG ((DEBUG_INFO, " PMemAbove4G.Base = 0x%lx\n", PciRootBridges->RootBridge[Index].PMemAbove4G.Base));\r | |
375 | DEBUG ((DEBUG_INFO, " PMemAbove4G.Limit = 0x%lx\n", PciRootBridges->RootBridge[Index].PMemAbove4G.Limit));\r | |
376 | DEBUG ((DEBUG_INFO, " PMemAbove4G.Translation = 0x%lx\n", PciRootBridges->RootBridge[Index].PMemAbove4G.Translation));\r | |
e5efcf8b | 377 | Index += 1;\r |
fda5226a | 378 | }\r |
e5efcf8b | 379 | \r |
fda5226a ZL |
380 | return EFI_SUCCESS;\r |
381 | }\r | |
382 | \r | |
383 | /**\r | |
384 | Print the information in Extra Data Guid Hob.\r | |
385 | @param[in] HobRaw A pointer to the start of gUniversalPayloadExtraDataGuid HOB.\r | |
6ef57974 GD |
386 | @param[in] HobLength The size of the HOB data buffer.\r |
387 | \r | |
fda5226a ZL |
388 | @retval EFI_SUCCESS If it completed successfully.\r |
389 | **/\r | |
390 | EFI_STATUS\r | |
391 | PrintExtraDataGuidHob (\r | |
e5efcf8b MK |
392 | IN UINT8 *HobRaw,\r |
393 | IN UINT16 HobLength\r | |
fda5226a ZL |
394 | )\r |
395 | {\r | |
e5efcf8b MK |
396 | UNIVERSAL_PAYLOAD_EXTRA_DATA *ExtraData;\r |
397 | UINTN Index;\r | |
398 | UINTN Length;\r | |
fda5226a ZL |
399 | \r |
400 | Index = 0;\r | |
e5efcf8b MK |
401 | ExtraData = (UNIVERSAL_PAYLOAD_EXTRA_DATA *)GET_GUID_HOB_DATA (HobRaw);\r |
402 | Length = sizeof (UNIVERSAL_PAYLOAD_EXTRA_DATA) + ExtraData->Count * sizeof (UNIVERSAL_PAYLOAD_EXTRA_DATA_ENTRY);\r | |
d96df7e9 | 403 | ASSERT (HobLength >= Length);\r |
fda5226a ZL |
404 | DEBUG ((DEBUG_INFO, " Revision = 0x%x\n", ExtraData->Header.Revision));\r |
405 | DEBUG ((DEBUG_INFO, " Length = 0x%x\n", ExtraData->Header.Length));\r | |
406 | DEBUG ((DEBUG_INFO, " Count = 0x%x\n", ExtraData->Count));\r | |
407 | \r | |
408 | while (Index < ExtraData->Count) {\r | |
e5efcf8b MK |
409 | DEBUG ((DEBUG_INFO, " Id[%d] = %a\n", Index, ExtraData->Entry[Index].Identifier));\r |
410 | DEBUG ((DEBUG_INFO, " Base[%d] = 0x%lx\n", Index, ExtraData->Entry[Index].Base));\r | |
411 | DEBUG ((DEBUG_INFO, " Size[%d] = 0x%lx\n", Index, ExtraData->Entry[Index].Size));\r | |
412 | Index += 1;\r | |
fda5226a | 413 | }\r |
e5efcf8b | 414 | \r |
fda5226a ZL |
415 | return EFI_SUCCESS;\r |
416 | }\r | |
417 | \r | |
418 | /**\r | |
419 | Print the information in MemoryTypeInfoGuidHob.\r | |
420 | @param[in] HobRaw A pointer to the start of gEfiMemoryTypeInformationGuid HOB.\r | |
6ef57974 GD |
421 | @param[in] HobLength The size of the HOB data buffer.\r |
422 | \r | |
fda5226a ZL |
423 | @retval EFI_SUCCESS If it completed successfully.\r |
424 | **/\r | |
425 | EFI_STATUS\r | |
426 | PrintMemoryTypeInfoGuidHob (\r | |
e5efcf8b MK |
427 | IN UINT8 *HobRaw,\r |
428 | IN UINT16 HobLength\r | |
fda5226a ZL |
429 | )\r |
430 | {\r | |
e5efcf8b | 431 | EFI_MEMORY_TYPE_INFORMATION *MemoryTypeInfo;\r |
fda5226a | 432 | \r |
e5efcf8b | 433 | MemoryTypeInfo = (EFI_MEMORY_TYPE_INFORMATION *)GET_GUID_HOB_DATA (HobRaw);\r |
fda5226a ZL |
434 | ASSERT (HobLength >= sizeof (*MemoryTypeInfo));\r |
435 | DEBUG ((DEBUG_INFO, " Type = 0x%x\n", MemoryTypeInfo->Type));\r | |
436 | DEBUG ((DEBUG_INFO, " NumberOfPages = 0x%x\n", MemoryTypeInfo->NumberOfPages));\r | |
437 | return EFI_SUCCESS;\r | |
438 | }\r | |
439 | \r | |
dcd3d63f | 440 | /**\r |
441 | Print the information in EdkiiBootManagerMenuFileGuid.\r | |
442 | @param[in] HobRaw A pointer to the start of gEdkiiBootManagerMenuFileGuid HOB.\r | |
6ef57974 | 443 | @param[in] HobLength The size of the HOB data buffer.\r |
dcd3d63f | 444 | @retval EFI_SUCCESS If it completed successfully.\r |
445 | **/\r | |
446 | EFI_STATUS\r | |
447 | PrintBootManagerMenuGuidHob (\r | |
e5efcf8b MK |
448 | IN UINT8 *HobRaw,\r |
449 | IN UINT16 HobLength\r | |
dcd3d63f | 450 | )\r |
451 | {\r | |
e5efcf8b | 452 | UNIVERSAL_PAYLOAD_BOOT_MANAGER_MENU *BootManagerMenuFile;\r |
dcd3d63f | 453 | \r |
e5efcf8b | 454 | BootManagerMenuFile = (UNIVERSAL_PAYLOAD_BOOT_MANAGER_MENU *)GET_GUID_HOB_DATA (HobRaw);\r |
dcd3d63f | 455 | ASSERT (HobLength >= sizeof (*BootManagerMenuFile));\r |
456 | DEBUG ((DEBUG_INFO, " Revision = 0x%x\n", BootManagerMenuFile->Header.Revision));\r | |
457 | DEBUG ((DEBUG_INFO, " Length = 0x%x\n", BootManagerMenuFile->Header.Length));\r | |
e5efcf8b | 458 | DEBUG ((DEBUG_INFO, " FileName = %g\n", &BootManagerMenuFile->FileName));\r |
dcd3d63f | 459 | return EFI_SUCCESS;\r |
460 | }\r | |
461 | \r | |
fda5226a ZL |
462 | //\r |
463 | // Mappint table for dump Guid Hob information.\r | |
464 | // This table can be easily extented.\r | |
465 | //\r | |
e5efcf8b MK |
466 | GUID_HOB_PRINT_HANDLE GuidHobPrintHandleTable[] = {\r |
467 | { &gUniversalPayloadAcpiTableGuid, PrintAcpiGuidHob, "gUniversalPayloadAcpiTableGuid(ACPI table Guid)" },\r | |
468 | { &gUniversalPayloadSerialPortInfoGuid, PrintSerialGuidHob, "gUniversalPayloadSerialPortInfoGuid(Serial Port Info)" },\r | |
469 | { &gUniversalPayloadSmbios3TableGuid, PrintSmbios3GuidHob, "gUniversalPayloadSmbios3TableGuid(SmBios Guid)" },\r | |
470 | { &gUniversalPayloadSmbiosTableGuid, PrintSmbiosTablGuidHob, "gUniversalPayloadSmbiosTableGuid(SmBios Guid)" },\r | |
471 | { &gUefiAcpiBoardInfoGuid, PrintAcpiBoardInfoGuidHob, "gUefiAcpiBoardInfoGuid(Acpi Guid)" },\r | |
472 | { &gUniversalPayloadPciRootBridgeInfoGuid, PrintPciRootBridgeInfoGuidHob, "gUniversalPayloadPciRootBridgeInfoGuid(Pci Guid)" },\r | |
473 | { &gEfiMemoryTypeInformationGuid, PrintMemoryTypeInfoGuidHob, "gEfiMemoryTypeInformationGuid(Memory Type Information Guid)" },\r | |
474 | { &gUniversalPayloadExtraDataGuid, PrintExtraDataGuidHob, "gUniversalPayloadExtraDataGuid(PayLoad Extra Data Guid)" },\r | |
475 | { &gEdkiiBootManagerMenuFileGuid, PrintBootManagerMenuGuidHob, "gEdkiiBootManagerMenuFileGuid(Boot Manager Menu File Guid)" }\r | |
fda5226a ZL |
476 | };\r |
477 | \r | |
478 | /**\r | |
479 | Print the Guid Hob using related print handle function.\r | |
480 | @param[in] HobStart A pointer to the HOB of type EFI_HOB_TYPE_GUID_EXTENSION.\r | |
481 | @param[in] HobLength The length in bytes of the HOB of type EFI_HOB_TYPE_GUID_EXTENSION.\r | |
482 | @retval EFI_SUCCESS If it completed successfully.\r | |
483 | **/\r | |
484 | EFI_STATUS\r | |
485 | PrintGuidHob (\r | |
e5efcf8b MK |
486 | IN VOID *HobStart,\r |
487 | IN UINT16 HobLength\r | |
fda5226a ZL |
488 | )\r |
489 | {\r | |
490 | EFI_PEI_HOB_POINTERS Hob;\r | |
491 | UINTN Index;\r | |
492 | EFI_STATUS Status;\r | |
493 | \r | |
e5efcf8b | 494 | Hob.Raw = (UINT8 *)HobStart;\r |
fda5226a ZL |
495 | ASSERT (HobLength >= sizeof (Hob.Guid));\r |
496 | \r | |
497 | for (Index = 0; Index < ARRAY_SIZE (GuidHobPrintHandleTable); Index++) {\r | |
498 | if (CompareGuid (&Hob.Guid->Name, GuidHobPrintHandleTable[Index].Guid)) {\r | |
499 | DEBUG ((DEBUG_INFO, " Guid = %a\n", GuidHobPrintHandleTable[Index].GuidName));\r | |
d96df7e9 | 500 | Status = GuidHobPrintHandleTable[Index].PrintHandler (Hob.Raw, GET_GUID_HOB_DATA_SIZE (Hob.Raw));\r |
fda5226a ZL |
501 | return Status;\r |
502 | }\r | |
503 | }\r | |
e5efcf8b | 504 | \r |
fda5226a ZL |
505 | DEBUG ((DEBUG_INFO, " Name = %g\n", &Hob.Guid->Name));\r |
506 | PrintHex (GET_GUID_HOB_DATA (Hob.Raw), GET_GUID_HOB_DATA_SIZE (Hob.Raw));\r | |
507 | return EFI_SUCCESS;\r | |
508 | }\r | |
509 | \r | |
510 | /**\r | |
511 | Print the information in FV Hob.\r | |
512 | @param[in] HobStart A pointer to the HOB of type EFI_HOB_TYPE_FV.\r | |
513 | @param[in] HobLength The length in bytes of the HOB of type EFI_HOB_TYPE_FV.\r | |
514 | @retval EFI_SUCCESS If it completed successfully.\r | |
515 | **/\r | |
516 | EFI_STATUS\r | |
517 | PrintFvHob (\r | |
e5efcf8b MK |
518 | IN VOID *HobStart,\r |
519 | IN UINT16 HobLength\r | |
fda5226a ZL |
520 | )\r |
521 | {\r | |
522 | EFI_PEI_HOB_POINTERS Hob;\r | |
523 | \r | |
e5efcf8b | 524 | Hob.Raw = (UINT8 *)HobStart;\r |
fda5226a ZL |
525 | ASSERT (HobLength >= sizeof (*Hob.FirmwareVolume));\r |
526 | \r | |
527 | DEBUG ((DEBUG_INFO, " BaseAddress = 0x%lx\n", Hob.FirmwareVolume->BaseAddress));\r | |
528 | DEBUG ((DEBUG_INFO, " Length = 0x%lx\n", Hob.FirmwareVolume->Length));\r | |
529 | return EFI_SUCCESS;\r | |
530 | }\r | |
531 | \r | |
532 | /**\r | |
533 | Print the information in Cpu Hob.\r | |
534 | @param[in] HobStart A pointer to the HOB of type EFI_HOB_TYPE_CPU.\r | |
535 | @param[in] HobLength The length in bytes of the HOB of type EFI_HOB_TYPE_CPU.\r | |
536 | @retval EFI_SUCCESS If it completed successfully.\r | |
537 | **/\r | |
538 | EFI_STATUS\r | |
539 | PrintCpuHob (\r | |
e5efcf8b MK |
540 | IN VOID *HobStart,\r |
541 | IN UINT16 HobLength\r | |
fda5226a ZL |
542 | )\r |
543 | {\r | |
544 | EFI_PEI_HOB_POINTERS Hob;\r | |
545 | \r | |
e5efcf8b | 546 | Hob.Raw = (UINT8 *)HobStart;\r |
fda5226a ZL |
547 | ASSERT (HobLength >= sizeof (*Hob.Cpu));\r |
548 | \r | |
549 | DEBUG ((DEBUG_INFO, " SizeOfMemorySpace = 0x%lx\n", Hob.Cpu->SizeOfMemorySpace));\r | |
550 | DEBUG ((DEBUG_INFO, " SizeOfIoSpace = 0x%lx\n", Hob.Cpu->SizeOfIoSpace));\r | |
551 | return EFI_SUCCESS;\r | |
552 | }\r | |
553 | \r | |
554 | /**\r | |
555 | Print the information in MemoryPoolHob.\r | |
556 | @param[in] HobStart A pointer to the HOB of type EFI_HOB_TYPE_MEMORY_POOL.\r | |
557 | @param[in] HobLength The length in bytes of the HOB of type EFI_HOB_TYPE_MEMORY_POOL.\r | |
558 | @retval EFI_SUCCESS If it completed successfully.\r | |
559 | **/\r | |
560 | EFI_STATUS\r | |
561 | PrintMemoryPoolHob (\r | |
e5efcf8b MK |
562 | IN VOID *HobStart,\r |
563 | IN UINT16 HobLength\r | |
fda5226a ZL |
564 | )\r |
565 | {\r | |
566 | return EFI_SUCCESS;\r | |
567 | }\r | |
568 | \r | |
569 | /**\r | |
570 | Print the information in Fv2Hob.\r | |
571 | @param[in] HobStart A pointer to the HOB of type EFI_HOB_TYPE_FV2.\r | |
572 | @param[in] HobLength The length in bytes of the HOB of type EFI_HOB_TYPE_FV2.\r | |
573 | @retval EFI_SUCCESS If it completed successfully.\r | |
574 | **/\r | |
575 | EFI_STATUS\r | |
576 | PrintFv2Hob (\r | |
e5efcf8b MK |
577 | IN VOID *HobStart,\r |
578 | IN UINT16 HobLength\r | |
fda5226a ZL |
579 | )\r |
580 | {\r | |
581 | EFI_PEI_HOB_POINTERS Hob;\r | |
582 | \r | |
e5efcf8b | 583 | Hob.Raw = (UINT8 *)HobStart;\r |
fda5226a ZL |
584 | ASSERT (HobLength >= sizeof (*Hob.FirmwareVolume2));\r |
585 | \r | |
586 | DEBUG ((DEBUG_INFO, " BaseAddress = 0x%lx\n", Hob.FirmwareVolume2->BaseAddress));\r | |
587 | DEBUG ((DEBUG_INFO, " Length = 0x%lx\n", Hob.FirmwareVolume2->Length));\r | |
e5efcf8b MK |
588 | DEBUG ((DEBUG_INFO, " FvName = %g\n", &Hob.FirmwareVolume2->FvName));\r |
589 | DEBUG ((DEBUG_INFO, " FileName = %g\n", &Hob.FirmwareVolume2->FileName));\r | |
fda5226a ZL |
590 | return EFI_SUCCESS;\r |
591 | }\r | |
592 | \r | |
593 | /**\r | |
594 | Print the information in Capsule Hob.\r | |
595 | @param[in] HobStart A pointer to the HOB of type EFI_HOB_TYPE_UEFI_CAPSULE.\r | |
596 | @param[in] HobLength The length in bytes of the HOB of type EFI_HOB_TYPE_UEFI_CAPSULE.\r | |
597 | @retval EFI_SUCCESS If it completed successfully.\r | |
598 | **/\r | |
599 | EFI_STATUS\r | |
600 | PrintCapsuleHob (\r | |
e5efcf8b MK |
601 | IN VOID *HobStart,\r |
602 | IN UINT16 HobLength\r | |
fda5226a ZL |
603 | )\r |
604 | {\r | |
605 | EFI_PEI_HOB_POINTERS Hob;\r | |
606 | \r | |
e5efcf8b | 607 | Hob.Raw = (UINT8 *)HobStart;\r |
fda5226a ZL |
608 | ASSERT (HobLength >= sizeof (*Hob.Capsule));\r |
609 | \r | |
610 | DEBUG ((DEBUG_INFO, " BaseAddress = 0x%lx\n", Hob.Capsule->BaseAddress));\r | |
e5efcf8b | 611 | DEBUG ((DEBUG_INFO, " Length = 0x%lx\n", Hob.Capsule->Length));\r |
fda5226a ZL |
612 | return EFI_SUCCESS;\r |
613 | }\r | |
614 | \r | |
615 | /**\r | |
616 | Print the information in Fv3 Hob.\r | |
617 | @param[in] HobStart A pointer to the HOB of type EFI_HOB_TYPE_FV3.\r | |
618 | @param[in] HobLength The length in bytes of the HOB of type EFI_HOB_TYPE_FV3.\r | |
619 | @retval EFI_SUCCESS If it completed successfully.\r | |
620 | **/\r | |
621 | EFI_STATUS\r | |
622 | PrintFv3Hob (\r | |
e5efcf8b MK |
623 | IN VOID *HobStart,\r |
624 | IN UINT16 HobLength\r | |
fda5226a ZL |
625 | )\r |
626 | {\r | |
627 | EFI_PEI_HOB_POINTERS Hob;\r | |
e5efcf8b MK |
628 | \r |
629 | Hob.Raw = (UINT8 *)HobStart;\r | |
fda5226a ZL |
630 | ASSERT (HobLength >= sizeof (*Hob.FirmwareVolume3));\r |
631 | \r | |
632 | DEBUG ((DEBUG_INFO, " BaseAddress = 0x%lx\n", Hob.FirmwareVolume3->BaseAddress));\r | |
633 | DEBUG ((DEBUG_INFO, " Length = 0x%lx\n", Hob.FirmwareVolume3->Length));\r | |
e5efcf8b MK |
634 | DEBUG ((DEBUG_INFO, " AuthenticationStatus = 0x%x\n", Hob.FirmwareVolume3->AuthenticationStatus));\r |
635 | DEBUG ((DEBUG_INFO, " ExtractedFv = %a\n", (Hob.FirmwareVolume3->ExtractedFv ? "True" : "False")));\r | |
636 | DEBUG ((DEBUG_INFO, " FVName = %g\n", &Hob.FirmwareVolume3->FvName));\r | |
637 | DEBUG ((DEBUG_INFO, " FileName = %g\n", &Hob.FirmwareVolume3->FileName));\r | |
fda5226a ZL |
638 | return EFI_SUCCESS;\r |
639 | }\r | |
640 | \r | |
641 | //\r | |
642 | // Mappint table from Hob type to Hob print function.\r | |
643 | //\r | |
e5efcf8b MK |
644 | HOB_PRINT_HANDLER_TABLE mHobHandles[] = {\r |
645 | { EFI_HOB_TYPE_HANDOFF, "EFI_HOB_TYPE_HANDOFF", PrintHandOffHob },\r | |
646 | { EFI_HOB_TYPE_MEMORY_ALLOCATION, "EFI_HOB_TYPE_MEMORY_ALLOCATION", PrintMemoryAllocationHob },\r | |
647 | { EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, "EFI_HOB_TYPE_RESOURCE_DESCRIPTOR", PrintResourceDiscriptorHob },\r | |
648 | { EFI_HOB_TYPE_GUID_EXTENSION, "EFI_HOB_TYPE_GUID_EXTENSION", PrintGuidHob },\r | |
649 | { EFI_HOB_TYPE_FV, "EFI_HOB_TYPE_FV", PrintFvHob },\r | |
650 | { EFI_HOB_TYPE_CPU, "EFI_HOB_TYPE_CPU", PrintCpuHob },\r | |
651 | { EFI_HOB_TYPE_MEMORY_POOL, "EFI_HOB_TYPE_MEMORY_POOL", PrintMemoryPoolHob },\r | |
652 | { EFI_HOB_TYPE_FV2, "EFI_HOB_TYPE_FV2", PrintFv2Hob },\r | |
653 | { EFI_HOB_TYPE_UEFI_CAPSULE, "EFI_HOB_TYPE_UEFI_CAPSULE", PrintCapsuleHob },\r | |
654 | { EFI_HOB_TYPE_FV3, "EFI_HOB_TYPE_FV3", PrintFv3Hob }\r | |
fda5226a ZL |
655 | };\r |
656 | \r | |
fda5226a ZL |
657 | /**\r |
658 | Print all HOBs info from the HOB list.\r | |
659 | @param[in] HobStart A pointer to the HOB list\r | |
660 | @return The pointer to the HOB list.\r | |
661 | **/\r | |
662 | VOID\r | |
663 | PrintHob (\r | |
e5efcf8b | 664 | IN CONST VOID *HobStart\r |
fda5226a ZL |
665 | )\r |
666 | {\r | |
667 | EFI_PEI_HOB_POINTERS Hob;\r | |
668 | UINTN Count;\r | |
669 | UINTN Index;\r | |
e5efcf8b | 670 | \r |
fda5226a ZL |
671 | ASSERT (HobStart != NULL);\r |
672 | \r | |
e5efcf8b | 673 | Hob.Raw = (UINT8 *)HobStart;\r |
fda5226a ZL |
674 | DEBUG ((DEBUG_INFO, "Print all Hob information from Hob 0x%p\n", Hob.Raw));\r |
675 | \r | |
676 | Count = 0;\r | |
677 | //\r | |
678 | // Parse the HOB list to see which type it is, and print the information.\r | |
679 | //\r | |
680 | while (!END_OF_HOB_LIST (Hob)) {\r | |
681 | for (Index = 0; Index < ARRAY_SIZE (mHobHandles); Index++) {\r | |
682 | if (Hob.Header->HobType == mHobHandles[Index].Type) {\r | |
e5efcf8b | 683 | DEBUG ((DEBUG_INFO, "HOB[%d]: Type = %a, Offset = 0x%p, Length = 0x%x\n", Count, mHobHandles[Index].Name, (Hob.Raw - (UINT8 *)HobStart), Hob.Header->HobLength));\r |
fda5226a ZL |
684 | mHobHandles[Index].PrintHandler (Hob.Raw, Hob.Header->HobLength);\r |
685 | break;\r | |
686 | }\r | |
687 | }\r | |
e5efcf8b | 688 | \r |
fda5226a ZL |
689 | if (Index == ARRAY_SIZE (mHobHandles)) {\r |
690 | DEBUG ((DEBUG_INFO, "HOB[%d]: Type = %d, Offset = 0x%p, Length = 0x%x\n", Count, Hob.Header->HobType, (Hob.Raw - (UINT8 *)HobStart), Hob.Header->HobLength));\r | |
691 | DEBUG ((DEBUG_INFO, " Unkown Hob type\n"));\r | |
692 | PrintHex (Hob.Raw, Hob.Header->HobLength);\r | |
693 | }\r | |
e5efcf8b | 694 | \r |
fda5226a ZL |
695 | Count++;\r |
696 | Hob.Raw = GET_NEXT_HOB (Hob);\r | |
697 | }\r | |
e5efcf8b | 698 | \r |
fda5226a ZL |
699 | DEBUG ((DEBUG_INFO, "There are totally %d Hobs, the End Hob address is %p\n", Count, Hob.Raw));\r |
700 | }\r |