/**\r
This function transfer control back to BootLoader after FspSiliconInit.\r
\r
+ @param[in] Status return status for the FspSiliconInit.\r
+\r
**/\r
VOID\r
EFIAPI\r
-FspSiliconInitDone (\r
- VOID\r
+FspSiliconInitDone2 (\r
+ IN EFI_STATUS Status\r
)\r
{\r
+ //\r
+ // Convert to FSP EAS defined API return codes\r
+ //\r
+ switch (Status) {\r
+ case EFI_SUCCESS:\r
+ case EFI_INVALID_PARAMETER:\r
+ case EFI_UNSUPPORTED:\r
+ case EFI_DEVICE_ERROR:\r
+ break;\r
+ default:\r
+ DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() Invalid Error - [Status: 0x%08X]\n", Status));\r
+ Status = EFI_DEVICE_ERROR; // Force to known error.\r
+ break;\r
+ }\r
//\r
// This is the end of the FspSiliconInit API\r
// Give control back to the boot loader\r
//\r
SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_EXIT);\r
- DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() - End\n"));\r
+ DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspSiliconInitApi() - [Status: 0x%08X] - End\n", Status));\r
PERF_END_EX (&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
- SetFspApiReturnStatus (EFI_SUCCESS);\r
-\r
- Pei2LoaderSwitchStack();\r
-\r
+ do {\r
+ SetFspApiReturnStatus (Status);\r
+ Pei2LoaderSwitchStack ();\r
+ if (Status != EFI_SUCCESS) {\r
+ DEBUG ((DEBUG_ERROR, "!!!ERROR: FspSiliconInitApi() - [Status: 0x%08X] - Error encountered during previous API and cannot proceed further\n", Status));\r
+ }\r
+ } while (Status != EFI_SUCCESS);\r
}\r
\r
/**\r
This function returns control to BootLoader after MemoryInitApi.\r
\r
- @param[in,out] HobListPtr The address of HobList pointer.\r
+ @param[in] Status return status for the MemoryInitApi.\r
+ @param[in,out] HobListPtr The address of HobList pointer, if NULL, will get value from GetFspApiParameter2 ()\r
**/\r
VOID\r
EFIAPI\r
-FspMemoryInitDone (\r
+FspMemoryInitDone2 (\r
+ IN EFI_STATUS Status,\r
IN OUT VOID **HobListPtr\r
)\r
{\r
// Calling use FspMemoryInit API\r
// Update HOB and return the control directly\r
//\r
+ if (HobListPtr == NULL) {\r
+ HobListPtr = (VOID **)GetFspApiParameter2 ();\r
+ }\r
if (HobListPtr != NULL) {\r
*HobListPtr = (VOID *) GetHobList ();\r
}\r
-\r
+ //\r
+ // Convert to FSP EAS defined API return codes\r
+ //\r
+ switch (Status) {\r
+ case EFI_SUCCESS:\r
+ case EFI_INVALID_PARAMETER:\r
+ case EFI_UNSUPPORTED:\r
+ case EFI_DEVICE_ERROR:\r
+ case EFI_OUT_OF_RESOURCES:\r
+ break;\r
+ default:\r
+ DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspMemoryInitApi() Invalid Error [Status: 0x%08X]\n", Status));\r
+ Status = EFI_DEVICE_ERROR; // Force to known error.\r
+ break;\r
+ }\r
//\r
// This is the end of the FspMemoryInit API\r
// Give control back to the boot loader\r
//\r
- DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspMemoryInitApi() - End\n"));\r
+ DEBUG ((DEBUG_INFO | DEBUG_INIT, "FspMemoryInitApi() - [Status: 0x%08X] - End\n", Status));\r
SetFspMeasurePoint (FSP_PERF_ID_API_FSP_MEMORY_INIT_EXIT);\r
FspData = GetFspGlobalDataPointer ();\r
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
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
PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
- SetFspApiReturnStatus (EFI_SUCCESS);\r
- Pei2LoaderSwitchStack ();\r
+ do {\r
+ SetFspApiReturnStatus (Status);\r
+ Pei2LoaderSwitchStack ();\r
+ if (Status != EFI_SUCCESS) {\r
+ DEBUG ((DEBUG_ERROR, "!!!ERROR: FspMemoryInitApi() - [Status: 0x%08X] - Error encountered during previous API and cannot proceed further\n", Status));\r
+ }\r
+ } while (Status != EFI_SUCCESS);\r
\r
//\r
// The TempRamExitApi is called\r
/**\r
This function returns control to BootLoader after TempRamExitApi.\r
\r
+ @param[in] Status return status for the TempRamExitApi.\r
+\r
**/\r
VOID\r
EFIAPI\r
-FspTempRamExitDone (\r
- VOID\r
+FspTempRamExitDone2 (\r
+ IN EFI_STATUS Status\r
)\r
{\r
-\r
+ //\r
+ // Convert to FSP EAS defined API return codes\r
+ //\r
+ switch (Status) {\r
+ case EFI_SUCCESS:\r
+ case EFI_INVALID_PARAMETER:\r
+ case EFI_UNSUPPORTED:\r
+ case EFI_DEVICE_ERROR:\r
+ break;\r
+ default:\r
+ DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() Invalid Error - [Status: 0x%08X]\n", Status));\r
+ Status = EFI_DEVICE_ERROR; // Force to known error.\r
+ break;\r
+ }\r
//\r
// This is the end of the TempRamExit API\r
// Give control back to the boot loader\r
//\r
- DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() - End\n"));\r
+ DEBUG ((DEBUG_INFO | DEBUG_INIT, "TempRamExitApi() - [Status: 0x%08X] - End\n", Status));\r
SetFspMeasurePoint (FSP_PERF_ID_API_TEMP_RAM_EXIT_EXIT);\r
PERF_END_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_TEMP_RAM_EXIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
- SetFspApiReturnStatus (EFI_SUCCESS);\r
- Pei2LoaderSwitchStack ();\r
-\r
+ do {\r
+ SetFspApiReturnStatus (Status);\r
+ Pei2LoaderSwitchStack ();\r
+ if (Status != EFI_SUCCESS) {\r
+ DEBUG ((DEBUG_ERROR, "!!!ERROR: TempRamExitApi() - [Status: 0x%08X] - Error encountered during previous API and cannot proceed further\n", Status));\r
+ }\r
+ } while (Status != EFI_SUCCESS);\r
SetPhaseStatusCode (FSP_STATUS_CODE_SILICON_INIT);\r
SetFspMeasurePoint (FSP_PERF_ID_API_FSP_SILICON_INIT_ENTRY);\r
PERF_START_EX(&gFspPerformanceDataGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
}\r
}\r
\r
- SetFspApiReturnStatus(Status);\r
DEBUG ((DEBUG_INFO | DEBUG_INIT, "NotifyPhaseApi() - End [Status: 0x%08X]\n", Status));\r
-\r
SetFspMeasurePoint (FSP_PERF_ID_API_NOTIFY_POST_PCI_EXIT + Count);\r
\r
if ((NotificationCount - 1) == 0) {\r
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
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, FSP_STATUS_CODE_END_OF_FIRMWARE_NOTIFICATION | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
}\r
- Pei2LoaderSwitchStack();\r
+ do {\r
+ SetFspApiReturnStatus(Status);\r
+ Pei2LoaderSwitchStack();\r
+ if (Status != EFI_SUCCESS) {\r
+ DEBUG ((DEBUG_ERROR, "!!!ERROR: NotifyPhaseApi() [Phase: %08X] - Failed - [Status: 0x%08X]\n", NotificationValue, Status));\r
+ }\r
+ } while (Status != EFI_SUCCESS);\r
}\r
\r
//\r
//\r
}\r
\r
+/**\r
+ This function transfer control back to BootLoader after FspSiliconInit.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+FspSiliconInitDone (\r
+ VOID\r
+ )\r
+{\r
+ FspSiliconInitDone2 (EFI_SUCCESS);\r
+}\r
+\r
+/**\r
+ This function returns control to BootLoader after MemoryInitApi.\r
+\r
+ @param[in,out] HobListPtr The address of HobList pointer.\r
+**/\r
+VOID\r
+EFIAPI\r
+FspMemoryInitDone (\r
+ IN OUT VOID **HobListPtr\r
+ )\r
+{\r
+ FspMemoryInitDone2 (EFI_SUCCESS, HobListPtr);\r
+}\r
+\r
+/**\r
+ This function returns control to BootLoader after TempRamExitApi.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+FspTempRamExitDone (\r
+ VOID\r
+ )\r
+{\r
+ FspTempRamExitDone2 (EFI_SUCCESS);\r
+}\r