/** This is the entrypoint of PEIM @param[in] FileHandle Handle of the file being invoked. @param[in] PeiServices Describes the list of possible PEI Services. @retval EFI_SUCCESS if it completed successfully. **/ EFI_STATUS EFIAPI FspPeiEntryPoint ( IN EFI_PEI_FILE_HANDLE FileHandle, IN CONST EFI_PEI_SERVICES **PeiServices ) { FSP_INFO_HEADER *FspHeader; EFI_STATUS Status; FSP_INIT_DONE_PPI *FspInitDone; VOID *FspHobList; EFI_BOOT_MODE BootMode; DEBUG ((DEBUG_INFO, "FspPeiEntryPoint\n")); Status = PeiServicesLocatePpi ( &gFspInitDonePpiGuid, 0, NULL, (VOID **) &FspInitDone ); if (EFI_ERROR (Status)) { // // 1st entry // DEBUG ((DEBUG_INFO, "1st entry\n")); FspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvFspBase)); DEBUG ((DEBUG_INFO, "FspHeader - 0x%x\n", FspHeader)); if (FspHeader == NULL) { return EFI_DEVICE_ERROR; } SecFspInit (FspHeader); // // Never return here // CpuDeadLoop (); } else { // // 2nd entry // DEBUG ((DEBUG_INFO, "2nd entry\n")); Status = FspInitDone->GetFspHobList (PeiServices, FspInitDone, &FspHobList); DEBUG ((DEBUG_INFO, "FspHobList - 0x%x\n", FspHobList)); FspHobProcess (FspHobList); PeiServicesGetBootMode (&BootMode); if (BootMode == BOOT_ON_S3_RESUME) { Status = PeiServicesNotifyPpi (&mS3EndOfPeiNotifyDesc); ASSERT_EFI_ERROR (Status); } } return EFI_SUCCESS; }
/** Do FSP initialization based on FspApi version 1. @param[in] FspHeader FSP header pointer. @return FSP initialization status. **/ EFI_STATUS PeiFspInitV1 ( IN FSP_INFO_HEADER *FspHeader ) { EFI_STATUS Status; FSP_INIT_DONE_PPI *FspInitDone; VOID *FspHobList; EFI_BOOT_MODE BootMode; Status = PeiServicesLocatePpi ( &gFspInitDonePpiGuid, 0, NULL, (VOID **) &FspInitDone ); if (EFI_ERROR (Status)) { // // 1st entry // DEBUG ((DEBUG_INFO, "1st entry\n")); PeiFspInit (FspHeader); // // Never return here, for FspApi version 1. // CpuDeadLoop (); } else { // // 2nd entry for FspApi version 1 only. // DEBUG ((DEBUG_INFO, "2nd entry\n")); Status = FspInitDone->GetFspHobList (GetPeiServicesTablePointer (), FspInitDone, &FspHobList); ASSERT_EFI_ERROR (Status); DEBUG ((DEBUG_INFO, "FspHobList - 0x%x\n", FspHobList)); FspHobProcess (FspHobList); // // Register EndOfPei Notify for S3 to run FspNotifyPhase // PeiServicesGetBootMode (&BootMode); if (BootMode == BOOT_ON_S3_RESUME) { Status = PeiServicesNotifyPpi (&mS3EndOfPeiNotifyDesc); ASSERT_EFI_ERROR (Status); } } return EFI_SUCCESS; }