Update IntelFspWrapperPkg according to FSP1.1.
[mirror_edk2.git] / IntelFspWrapperPkg / Library / BaseFspApiLib / FspApiLib.c
index abe61b7..162d244 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Provide FSP API related function.\r
 \r
-  Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>\r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
   which accompanies this distribution.  The full text of the license may be found at\r
@@ -17,6 +17,7 @@
 #include <Guid/FspHeaderFile.h>\r
 \r
 #include <Library/FspApiLib.h>\r
+#include <Library/BaseLib.h>\r
 #include <Library/BaseMemoryLib.h>\r
 \r
 /**\r
@@ -26,9 +27,9 @@
   @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 FSP_STATUS.\r
+  @return EFI_STATUS.\r
 **/\r
-FSP_STATUS\r
+EFI_STATUS\r
 Execute32BitCode (\r
   IN UINT64      Function,\r
   IN UINT64      Param1\r
@@ -84,22 +85,25 @@ FspFindFspHeader (
   @param[in] FspHeader     FSP header pointer.\r
   @param[in] FspInitParams Address pointer to the FSP_INIT_PARAMS structure.\r
 \r
-  @return FSP status returned by FspInit API.\r
+  @return EFI status returned by FspInit API.\r
 **/\r
-FSP_STATUS\r
+EFI_STATUS\r
 EFIAPI\r
 CallFspInit (\r
   IN FSP_INFO_HEADER     *FspHeader,\r
   IN FSP_INIT_PARAMS     *FspInitParams\r
   )\r
 {\r
-  FSP_FSP_INIT        FspInitApi;\r
-  FSP_STATUS          FspStatus;\r
+  FSP_INIT            FspInitApi;\r
+  EFI_STATUS          Status;\r
+  BOOLEAN             InterruptState;\r
 \r
-  FspInitApi = (FSP_FSP_INIT)(UINTN)(FspHeader->ImageBase + FspHeader->FspInitEntryOffset);\r
-  FspStatus = Execute32BitCode ((UINTN)FspInitApi, (UINTN)FspInitParams);\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 FspStatus;\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -108,9 +112,9 @@ CallFspInit (
   @param[in] FspHeader         FSP header pointer.\r
   @param[in] NotifyPhaseParams Address pointer to the NOTIFY_PHASE_PARAMS structure.\r
 \r
-  @return FSP status returned by FspNotifyPhase API.\r
+  @return EFI status returned by FspNotifyPhase API.\r
 **/\r
-FSP_STATUS\r
+EFI_STATUS\r
 EFIAPI\r
 CallFspNotifyPhase (\r
   IN FSP_INFO_HEADER     *FspHeader,\r
@@ -118,10 +122,94 @@ CallFspNotifyPhase (
   )\r
 {\r
   FSP_NOTIFY_PHASE    NotifyPhaseApi;\r
-  FSP_STATUS          FspStatus;\r
+  EFI_STATUS          Status;\r
+  BOOLEAN             InterruptState;\r
 \r
   NotifyPhaseApi = (FSP_NOTIFY_PHASE)(UINTN)(FspHeader->ImageBase + FspHeader->NotifyPhaseEntryOffset);\r
-  FspStatus = Execute32BitCode ((UINTN)NotifyPhaseApi, (UINTN)NotifyPhaseParams);\r
+  InterruptState = SaveAndDisableInterrupts ();\r
+  Status = Execute32BitCode ((UINTN)NotifyPhaseApi, (UINTN)NotifyPhaseParams);\r
+  SetInterruptState (InterruptState);\r
 \r
-  return FspStatus;\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