+ 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