]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFsp2Pkg/Library/BaseFspPlatformLib/FspPlatformNotify.c
IntelFsp2Pkg: Support to return error status from FSP API done
[mirror_edk2.git] / IntelFsp2Pkg / Library / BaseFspPlatformLib / FspPlatformNotify.c
CommitLineData
cf1d4549
JY
1/** @file\r
2\r
3 Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>\r
4 This program and the accompanying materials\r
5 are licensed and made available under the terms and conditions of the BSD License\r
6 which accompanies this distribution. The full text of the license may be found at\r
7 http://opensource.org/licenses/bsd-license.php.\r
8\r
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12**/\r
13\r
14#include <PiPei.h>\r
15#include <Library/PeiServicesLib.h>\r
16#include <Library/PeiServicesTablePointerLib.h>\r
17#include <Library/BaseLib.h>\r
18#include <Library/BaseMemoryLib.h>\r
19#include <Library/PcdLib.h>\r
20#include <Library/DebugLib.h>\r
21#include <Library/HobLib.h>\r
22#include <Library/FspSwitchStackLib.h>\r
23#include <Library/FspCommonLib.h>\r
24#include <Guid/EventGroup.h>\r
25#include <FspEas.h>\r
26#include <FspStatusCode.h>\r
27#include <Protocol/PciEnumerationComplete.h>\r
28#include <Library/ReportStatusCodeLib.h>\r
29#include <Library/PerformanceLib.h>\r
30extern EFI_GUID gFspPerformanceDataGuid;\r
31\r
32EFI_PEI_PPI_DESCRIPTOR mPeiPostPciEnumerationPpi = {\r
33 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
34 &gEfiPciEnumerationCompleteProtocolGuid,\r
35 NULL\r
36};\r
37\r
38EFI_PEI_PPI_DESCRIPTOR mPeiReadyToBootPpi = {\r
39 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
40 &gEfiEventReadyToBootGuid,\r
41 NULL\r
42};\r
43\r
44EFI_PEI_PPI_DESCRIPTOR mPeiEndOfFirmwarePpi = {\r
45 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
46 &gFspEventEndOfFirmwareGuid,\r
47 NULL\r
48};\r
49\r
50UINT32 mFspNotifySequence[] = {\r
51 EnumInitPhaseAfterPciEnumeration,\r
52 EnumInitPhaseReadyToBoot,\r
53 EnumInitPhaseEndOfFirmware\r
54};\r
55\r
56/**\r
57 Install FSP notification.\r
58\r
59 @param[in] NotificationCode FSP notification code\r
60\r
61 @retval EFI_SUCCESS Notify FSP successfully\r
62 @retval EFI_INVALID_PARAMETER NotificationCode is invalid\r
63\r
64**/\r
65EFI_STATUS\r
66EFIAPI\r
67FspNotificationHandler (\r
68 IN UINT32 NotificationCode\r
69 )\r
70{\r
71 EFI_STATUS Status;\r
72\r
73 Status = EFI_SUCCESS;\r
74\r
75 switch (NotificationCode) {\r
76 case EnumInitPhaseAfterPciEnumeration:\r
77 //\r
78 // Do POST PCI initialization if needed\r
79 //\r
80 DEBUG ((DEBUG_INFO | DEBUG_INIT, "FSP Post PCI Enumeration ...\n"));\r
81 PeiServicesInstallPpi (&mPeiPostPciEnumerationPpi);\r
82 break;\r
83\r
84 case EnumInitPhaseReadyToBoot:\r
85 //\r
86 // Ready To Boot\r
87 //\r
88 DEBUG ((DEBUG_INFO| DEBUG_INIT, "FSP Ready To Boot ...\n"));\r
89 PeiServicesInstallPpi (&mPeiReadyToBootPpi);\r
90 break;\r
91\r
92 case EnumInitPhaseEndOfFirmware:\r
93 //\r
94 // End of Firmware\r
95 //\r
96 DEBUG ((DEBUG_INFO| DEBUG_INIT, "FSP End of Firmware ...\n"));\r
97 PeiServicesInstallPpi (&mPeiEndOfFirmwarePpi);\r
98 break;\r
99\r
100 default:\r
101 Status = EFI_INVALID_PARAMETER;\r
102 break;\r
103 }\r
104\r
105 return Status;\r
106}\r
107\r
108/**\r
109 This function transfer control back to BootLoader after FspSiliconInit.\r
110\r
f56ae7bf
TRM
111 @param[in] Status return status for the FspSiliconInit.\r
112\r
cf1d4549
JY
113**/\r
114VOID\r
115EFIAPI\r
f56ae7bf
TRM
116FspSiliconInitDone2 (\r
117 IN EFI_STATUS Status\r
cf1d4549
JY
118 )\r
119{\r
f56ae7bf
TRM
120 //\r
121 // Convert to FSP EAS defined API return codes\r
122 //\r
123 switch (Status) {\r
124 case EFI_SUCCESS:\r
125 case EFI_INVALID_PARAMETER:\r
126 case EFI_UNSUPPORTED:\r
127 case EFI_DEVICE_ERROR:\r
128 break;\r
129 default:\r
130 DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() Invalid Error - [Status: 0x%08X]\n", Status));\r
131 Status = EFI_DEVICE_ERROR; // Force to known error.\r
132 break;\r
133 }\r
cf1d4549
JY
134 //\r
135 // This is the end of the FspSiliconInit API\r
136 // Give control back to the boot loader\r
137 //\r
138 SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_EXIT);\r
f56ae7bf 139 DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() - [Status: 0x%08X] - End\n", Status));\r
19d29d35 140 PERF_END_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
cf1d4549 141 REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
f56ae7bf
TRM
142 do {\r
143 SetFspApiReturnStatus (Status);\r
144 Pei2LoaderSwitchStack ();\r
145 if (Status != EFI_SUCCESS) {\r
146 DEBUG ((DEBUG_ERROR, "!!!ERROR: FspSiliconInitApi() - [Status: 0x%08X] - Error encountered during previous API and cannot proceed further\n", Status));\r
147 }\r
148 } while (Status != EFI_SUCCESS);\r
cf1d4549
JY
149}\r
150\r
151/**\r
152 This function returns control to BootLoader after MemoryInitApi.\r
153\r
f56ae7bf
TRM
154 @param[in] Status return status for the MemoryInitApi.\r
155 @param[in,out] HobListPtr The address of HobList pointer, if NULL, will get value from GetFspApiParameter2 ()\r
cf1d4549
JY
156**/\r
157VOID\r
158EFIAPI\r
f56ae7bf
TRM
159FspMemoryInitDone2 (\r
160 IN EFI_STATUS Status,\r
cf1d4549
JY
161 IN OUT VOID **HobListPtr\r
162 )\r
163{\r
19d29d35 164 FSP_GLOBAL_DATA *FspData;\r
cf1d4549
JY
165 //\r
166 // Calling use FspMemoryInit API\r
167 // Update HOB and return the control directly\r
168 //\r
f56ae7bf
TRM
169 if (HobListPtr == NULL) {\r
170 HobListPtr = (VOID **)GetFspApiParameter2 ();\r
171 }\r
cf1d4549
JY
172 if (HobListPtr != NULL) {\r
173 *HobListPtr = (VOID *) GetHobList ();\r
174 }\r
f56ae7bf
TRM
175 //\r
176 // Convert to FSP EAS defined API return codes\r
177 //\r
178 switch (Status) {\r
179 case EFI_SUCCESS:\r
180 case EFI_INVALID_PARAMETER:\r
181 case EFI_UNSUPPORTED:\r
182 case EFI_DEVICE_ERROR:\r
183 case EFI_OUT_OF_RESOURCES:\r
184 break;\r
185 default:\r
186 DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspMemoryInitApi() Invalid Error [Status: 0x%08X]\n", Status));\r
187 Status = EFI_DEVICE_ERROR; // Force to known error.\r
188 break;\r
189 }\r
cf1d4549
JY
190 //\r
191 // This is the end of the FspMemoryInit API\r
192 // Give control back to the boot loader\r
193 //\r
f56ae7bf 194 DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspMemoryInitApi() - [Status: 0x%08X] - End\n", Status));\r
19d29d35
YS
195 SetFspMeasurePoint (FSP_PERF_ID_API_FSP_MEMORY_INIT_EXIT);\r
196 FspData = GetFspGlobalDataPointer ();\r
197 PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, (FspData->PerfData[0] & FSP_PERFORMANCE_DATA_TIMER_MASK), FSP_STATUS_CODE_TEMP_RAM_INIT | FSP_STATUS_CODE_COMMON_CODE| FSP_STATUS_CODE_API_ENTRY);\r
198 PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, (FspData->PerfData[1] & FSP_PERFORMANCE_DATA_TIMER_MASK), FSP_STATUS_CODE_TEMP_RAM_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
199 PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, (FspData->PerfData[2] & FSP_PERFORMANCE_DATA_TIMER_MASK), FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
200 PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
cf1d4549 201 REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
f56ae7bf
TRM
202 do {\r
203 SetFspApiReturnStatus (Status);\r
204 Pei2LoaderSwitchStack ();\r
205 if (Status != EFI_SUCCESS) {\r
206 DEBUG ((DEBUG_ERROR, "!!!ERROR: FspMemoryInitApi() - [Status: 0x%08X] - Error encountered during previous API and cannot proceed further\n", Status));\r
207 }\r
208 } while (Status != EFI_SUCCESS);\r
cf1d4549
JY
209\r
210 //\r
211 // The TempRamExitApi is called\r
212 //\r
213 if (GetFspApiCallingIndex () == TempRamExitApiIndex) {\r
214 SetPhaseStatusCode (FSP_STATUS_CODE_TEMP_RAM_EXIT);\r
cf1d4549 215 SetFspMeasurePoint (FSP_PERF_ID_API_TEMP_RAM_EXIT_ENTRY);\r
19d29d35
YS
216 PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
217 REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
cf1d4549
JY
218 DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() - Begin\n"));\r
219 } else {\r
cf1d4549 220 SetPhaseStatusCode (FSP_STATUS_CODE_SILICON_INIT);\r
19d29d35
YS
221 SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_ENTRY);\r
222 PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
cf1d4549 223 REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
19d29d35 224 DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() - Begin\n"));\r
cf1d4549
JY
225 }\r
226}\r
227\r
228/**\r
229 This function returns control to BootLoader after TempRamExitApi.\r
230\r
f56ae7bf
TRM
231 @param[in] Status return status for the TempRamExitApi.\r
232\r
cf1d4549
JY
233**/\r
234VOID\r
235EFIAPI\r
f56ae7bf
TRM
236FspTempRamExitDone2 (\r
237 IN EFI_STATUS Status\r
cf1d4549
JY
238 )\r
239{\r
f56ae7bf
TRM
240 //\r
241 // Convert to FSP EAS defined API return codes\r
242 //\r
243 switch (Status) {\r
244 case EFI_SUCCESS:\r
245 case EFI_INVALID_PARAMETER:\r
246 case EFI_UNSUPPORTED:\r
247 case EFI_DEVICE_ERROR:\r
248 break;\r
249 default:\r
250 DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() Invalid Error - [Status: 0x%08X]\n", Status));\r
251 Status = EFI_DEVICE_ERROR; // Force to known error.\r
252 break;\r
253 }\r
cf1d4549
JY
254 //\r
255 // This is the end of the TempRamExit API\r
256 // Give control back to the boot loader\r
257 //\r
f56ae7bf 258 DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() - [Status: 0x%08X] - End\n", Status));\r
19d29d35
YS
259 SetFspMeasurePoint (FSP_PERF_ID_API_TEMP_RAM_EXIT_EXIT);\r
260 PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
cf1d4549 261 REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
f56ae7bf
TRM
262 do {\r
263 SetFspApiReturnStatus (Status);\r
264 Pei2LoaderSwitchStack ();\r
265 if (Status != EFI_SUCCESS) {\r
266 DEBUG ((DEBUG_ERROR, "!!!ERROR: TempRamExitApi() - [Status: 0x%08X] - Error encountered during previous API and cannot proceed further\n", Status));\r
267 }\r
268 } while (Status != EFI_SUCCESS);\r
cf1d4549
JY
269 SetPhaseStatusCode (FSP_STATUS_CODE_SILICON_INIT);\r
270 SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_ENTRY);\r
19d29d35 271 PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
cf1d4549 272 REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
19d29d35 273 DEBUG ((DEBUG_INFO | DEBUG_INIT, "SiliconInitApi() - Begin\n"));\r
cf1d4549
JY
274}\r
275\r
276/**\r
277 This function handle NotifyPhase API call from the BootLoader.\r
278 It gives control back to the BootLoader after it is handled. If the\r
279 Notification code is a ReadyToBoot event, this function will return\r
280 and FSP continues the remaining execution until it reaches the DxeIpl.\r
281\r
282**/\r
283VOID\r
284FspWaitForNotify (\r
285 VOID\r
286 )\r
287{\r
288 EFI_STATUS Status;\r
289 UINT32 NotificationValue;\r
290 UINT32 NotificationCount;\r
291 UINT8 Count;\r
292\r
293 NotificationCount = 0;\r
294 while (NotificationCount < sizeof(mFspNotifySequence) / sizeof(UINT32)) {\r
295\r
296 Count = (UINT8)((NotificationCount << 1) & 0x07);\r
297 SetFspMeasurePoint (FSP_PERF_ID_API_NOTIFY_POST_PCI_ENTRY + Count);\r
298\r
299 if (NotificationCount == 0) {\r
300 SetPhaseStatusCode (FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION);\r
19d29d35 301 PERF_START_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
cf1d4549
JY
302 REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
303 } else if (NotificationCount == 1) {\r
304 SetPhaseStatusCode (FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION);\r
19d29d35 305 PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
cf1d4549
JY
306 REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
307 } else if (NotificationCount == 2) {\r
308 SetPhaseStatusCode (FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION);\r
19d29d35 309 PERF_START_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
cf1d4549
JY
310 REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
311 }\r
312\r
313 NotificationValue = ((NOTIFY_PHASE_PARAMS *)(UINTN)GetFspApiParameter ())->Phase;\r
314 DEBUG ((DEBUG_INFO | DEBUG_INIT, "NotifyPhaseApi() - Begin [Phase: %08X]\n", NotificationValue));\r
315 if (mFspNotifySequence[NotificationCount] != NotificationValue) {\r
316 //\r
317 // Notify code does not follow the predefined order\r
318 //\r
319 DEBUG ((DEBUG_INFO, "Unsupported FSP Notification Value\n"));\r
320 Status = EFI_UNSUPPORTED;\r
321 } else {\r
322 //\r
323 // Process Notification and Give control back to the boot loader framework caller\r
324 //\r
325 Status = FspNotificationHandler (NotificationValue);\r
326 if (!EFI_ERROR(Status)) {\r
327 NotificationCount++;\r
328 }\r
329 }\r
330\r
cf1d4549 331 DEBUG ((DEBUG_INFO | DEBUG_INIT, "NotifyPhaseApi() - End [Status: 0x%08X]\n", Status));\r
cf1d4549
JY
332 SetFspMeasurePoint (FSP_PERF_ID_API_NOTIFY_POST_PCI_EXIT + Count);\r
333\r
334 if ((NotificationCount - 1) == 0) {\r
19d29d35 335 PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
cf1d4549
JY
336 REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_POST_PCIE_ENUM_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
337 } else if ((NotificationCount - 1) == 1) {\r
19d29d35 338 PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
cf1d4549
JY
339 REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_READY_TO_BOOT_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
340 } else if ((NotificationCount - 1) == 2) {\r
19d29d35 341 PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
cf1d4549
JY
342 REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
343 }\r
f56ae7bf
TRM
344 do {\r
345 SetFspApiReturnStatus(Status);\r
346 Pei2LoaderSwitchStack();\r
347 if (Status != EFI_SUCCESS) {\r
348 DEBUG ((DEBUG_ERROR, "!!!ERROR: NotifyPhaseApi() [Phase: %08X] - Failed - [Status: 0x%08X]\n", NotificationValue, Status));\r
349 }\r
350 } while (Status != EFI_SUCCESS);\r
cf1d4549
JY
351 }\r
352\r
353 //\r
354 // Control goes back to the PEI Core and it dispatches further PEIMs.\r
355 // DXEIPL is the final one to transfer control back to the boot loader.\r
356 //\r
357}\r
358\r
f56ae7bf
TRM
359/**\r
360 This function transfer control back to BootLoader after FspSiliconInit.\r
361\r
362**/\r
363VOID\r
364EFIAPI\r
365FspSiliconInitDone (\r
366 VOID\r
367 )\r
368{\r
369 FspSiliconInitDone2 (EFI_SUCCESS);\r
370}\r
371\r
372/**\r
373 This function returns control to BootLoader after MemoryInitApi.\r
374\r
375 @param[in,out] HobListPtr The address of HobList pointer.\r
376**/\r
377VOID\r
378EFIAPI\r
379FspMemoryInitDone (\r
380 IN OUT VOID **HobListPtr\r
381 )\r
382{\r
383 FspMemoryInitDone2 (EFI_SUCCESS, HobListPtr);\r
384}\r
385\r
386/**\r
387 This function returns control to BootLoader after TempRamExitApi.\r
388\r
389**/\r
390VOID\r
391EFIAPI\r
392FspTempRamExitDone (\r
393 VOID\r
394 )\r
395{\r
396 FspTempRamExitDone2 (EFI_SUCCESS);\r
397}\r