/** This function transfer control back to BootLoader after FspSiliconInit. **/ VOID EFIAPI FspSiliconInitDone ( VOID ) { FspSiliconInitDone2 (EFI_SUCCESS); }
/** This function waits for FSP notify. @param This Entry point for DXE IPL PPI. @param PeiServices General purpose services available to every PEIM. @param HobList Address to the Pei HOB list. @return EFI_SUCCESS This function never returns. **/ EFI_STATUS EFIAPI WaitForNotify ( IN CONST EFI_DXE_IPL_PPI *This, IN EFI_PEI_SERVICES **PeiServices, IN EFI_PEI_HOB_POINTERS HobList ) { EFI_STATUS Status; DEBUG ((DEBUG_INFO | DEBUG_INIT, "FSP HOB is located at 0x%08X\n", HobList)); // // End of PEI phase signal // Status = PeiServicesInstallPpi (&gEndOfPeiSignalPpi); ASSERT_EFI_ERROR (Status); // // Give control back to BootLoader after FspSiliconInit // DEBUG ((DEBUG_INFO | DEBUG_INIT, "FSP is waiting for NOTIFY\n")); FspSiliconInitDone2 (EFI_SUCCESS); // // BootLoader called FSP again through NotifyPhase // FspWaitForNotify (); if (GetFspGlobalDataPointer ()->FspMode == FSP_IN_API_MODE) { // // Should not come here // while (TRUE) { DEBUG ((DEBUG_ERROR, "No FSP API should be called after FSP is DONE!\n")); SetFspApiReturnStatus (EFI_UNSUPPORTED); Pei2LoaderSwitchStack (); } } return EFI_SUCCESS; }