+++ /dev/null
-/** @file\r
- Provide FSP API related function.\r
-\r
- Copyright (c) 2014 - 2017, Intel Corporation. All rights reserved.<BR>\r
- SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#include <PiPei.h>\r
-\r
-#include <Guid/FspHeaderFile.h>\r
-\r
-#include <Library/FspApiLib.h>\r
-#include <Library/BaseLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-\r
-/**\r
- Wrapper for a thunk to transition from long mode to compatibility mode to execute 32-bit code and then transit back to\r
- long mode.\r
-\r
- @param[in] Function The 32bit code entry to be executed.\r
- @param[in] Param1 The first parameter to pass to 32bit code.\r
-\r
- @return EFI_STATUS.\r
-**/\r
-EFI_STATUS\r
-Execute32BitCode (\r
- IN UINT64 Function,\r
- IN UINT64 Param1\r
- );\r
-\r
-/**\r
- Find FSP header pointer.\r
-\r
- @param[in] FlashFvFspBase Flash address of FSP FV.\r
-\r
- @return FSP header pointer.\r
-**/\r
-FSP_INFO_HEADER *\r
-EFIAPI\r
-FspFindFspHeader (\r
- IN EFI_PHYSICAL_ADDRESS FlashFvFspBase\r
- )\r
-{\r
- UINT8 *CheckPointer;\r
-\r
- CheckPointer = (UINT8 *) (UINTN) FlashFvFspBase;\r
-\r
- if (((EFI_FIRMWARE_VOLUME_HEADER *)CheckPointer)->Signature != EFI_FVH_SIGNATURE) {\r
- return NULL;\r
- }\r
-\r
- if (((EFI_FIRMWARE_VOLUME_HEADER *)CheckPointer)->ExtHeaderOffset != 0) {\r
- CheckPointer = CheckPointer + ((EFI_FIRMWARE_VOLUME_HEADER *)CheckPointer)->ExtHeaderOffset;\r
- CheckPointer = CheckPointer + ((EFI_FIRMWARE_VOLUME_EXT_HEADER *)CheckPointer)->ExtHeaderSize;\r
- CheckPointer = (UINT8 *) ALIGN_POINTER (CheckPointer, 8);\r
- } else {\r
- CheckPointer = CheckPointer + ((EFI_FIRMWARE_VOLUME_HEADER *)CheckPointer)->HeaderLength;\r
- }\r
-\r
- if (!CompareGuid (&((EFI_FFS_FILE_HEADER *)CheckPointer)->Name, &gFspHeaderFileGuid)) {\r
- return NULL;\r
- }\r
-\r
- CheckPointer = CheckPointer + sizeof (EFI_FFS_FILE_HEADER);\r
-\r
- if (((EFI_RAW_SECTION *)CheckPointer)->Type != EFI_SECTION_RAW) {\r
- return NULL;\r
- }\r
-\r
- CheckPointer = CheckPointer + sizeof (EFI_RAW_SECTION);\r
-\r
- return (FSP_INFO_HEADER *)CheckPointer;\r
-}\r
-\r
-/**\r
- Call FSP API - FspInit.\r
-\r
- @param[in] FspHeader FSP header pointer.\r
- @param[in] FspInitParams Address pointer to the FSP_INIT_PARAMS structure.\r
-\r
- @return EFI status returned by FspInit API.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-CallFspInit (\r
- IN FSP_INFO_HEADER *FspHeader,\r
- IN FSP_INIT_PARAMS *FspInitParams\r
- )\r
-{\r
- FSP_INIT FspInitApi;\r
- EFI_STATUS Status;\r
- BOOLEAN InterruptState;\r
-\r
- FspInitApi = (FSP_INIT)((UINTN)FspHeader->ImageBase + FspHeader->FspInitEntryOffset);\r
- InterruptState = SaveAndDisableInterrupts ();\r
- Status = Execute32BitCode ((UINTN)FspInitApi, (UINTN)FspInitParams);\r
- SetInterruptState (InterruptState);\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Call FSP API - FspNotifyPhase.\r
-\r
- @param[in] FspHeader FSP header pointer.\r
- @param[in] NotifyPhaseParams Address pointer to the NOTIFY_PHASE_PARAMS structure.\r
-\r
- @return EFI status returned by FspNotifyPhase API.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-CallFspNotifyPhase (\r
- IN FSP_INFO_HEADER *FspHeader,\r
- IN NOTIFY_PHASE_PARAMS *NotifyPhaseParams\r
- )\r
-{\r
- FSP_NOTIFY_PHASE NotifyPhaseApi;\r
- EFI_STATUS Status;\r
- BOOLEAN InterruptState;\r
-\r
- NotifyPhaseApi = (FSP_NOTIFY_PHASE)((UINTN)FspHeader->ImageBase + FspHeader->NotifyPhaseEntryOffset);\r
- InterruptState = SaveAndDisableInterrupts ();\r
- Status = Execute32BitCode ((UINTN)NotifyPhaseApi, (UINTN)NotifyPhaseParams);\r
- SetInterruptState (InterruptState);\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Call FSP API - FspMemoryInit.\r
-\r
- @param[in] FspHeader FSP header pointer.\r
- @param[in,out] FspMemoryInitParams Address pointer to the FSP_MEMORY_INIT_PARAMS structure.\r
-\r
- @return EFI status returned by FspMemoryInit API.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-CallFspMemoryInit (\r
- IN FSP_INFO_HEADER *FspHeader,\r
- IN OUT FSP_MEMORY_INIT_PARAMS *FspMemoryInitParams\r
- )\r
-{\r
- FSP_MEMORY_INIT FspMemoryInitApi;\r
- EFI_STATUS Status;\r
- BOOLEAN InterruptState;\r
-\r
- FspMemoryInitApi = (FSP_MEMORY_INIT)((UINTN)FspHeader->ImageBase + FspHeader->FspMemoryInitEntryOffset);\r
- InterruptState = SaveAndDisableInterrupts ();\r
- Status = Execute32BitCode ((UINTN)FspMemoryInitApi, (UINTN)FspMemoryInitParams);\r
- SetInterruptState (InterruptState);\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Call FSP API - TempRamExit.\r
-\r
- @param[in] FspHeader FSP header pointer.\r
- @param[in,out] TempRamExitParam Address pointer to the TempRamExit parameters structure.\r
-\r
- @return EFI status returned by TempRamExit API.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-CallTempRamExit (\r
- IN FSP_INFO_HEADER *FspHeader,\r
- IN OUT VOID *TempRamExitParam\r
- )\r
-{\r
- FSP_TEMP_RAM_EXIT TempRamExitApi;\r
- EFI_STATUS Status;\r
- BOOLEAN InterruptState;\r
-\r
- TempRamExitApi = (FSP_TEMP_RAM_EXIT)((UINTN)FspHeader->ImageBase + FspHeader->TempRamExitEntryOffset);\r
- InterruptState = SaveAndDisableInterrupts ();\r
- Status = Execute32BitCode ((UINTN)TempRamExitApi, (UINTN)TempRamExitParam);\r
- SetInterruptState (InterruptState);\r
-\r
- return Status;\r
-}\r
-\r
-/**\r
- Call FSP API - FspSiliconInit.\r
-\r
- @param[in] FspHeader FSP header pointer.\r
- @param[in,out] FspSiliconInitParam Address pointer to the Silicon Init parameters structure.\r
-\r
- @return EFI status returned by FspSiliconInit API.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-CallFspSiliconInit (\r
- IN FSP_INFO_HEADER *FspHeader,\r
- IN OUT VOID *FspSiliconInitParam\r
- )\r
-{\r
- FSP_SILICON_INIT FspSiliconInitApi;\r
- EFI_STATUS Status;\r
- BOOLEAN InterruptState;\r
-\r
- FspSiliconInitApi = (FSP_SILICON_INIT)((UINTN)FspHeader->ImageBase + FspHeader->FspSiliconInitEntryOffset);\r
- InterruptState = SaveAndDisableInterrupts ();\r
- Status = Execute32BitCode ((UINTN)FspSiliconInitApi, (UINTN)FspSiliconInitParam);\r
- SetInterruptState (InterruptState);\r
-\r
- return Status;\r
-}\r