From: klu2 Date: Mon, 4 Jan 2010 04:45:44 +0000 (+0000) Subject: Implement the simulation version of StallPei for NT32 platform. It bases on window... X-Git-Tag: edk2-stable201903~16658 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=ba82cb67d7d4059970882f0202fc8943e36df3ec Implement the simulation version of StallPei for NT32 platform. It bases on window API Sleep(). git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9663 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/Nt32Pkg/Nt32Pkg.dsc b/Nt32Pkg/Nt32Pkg.dsc index d7ad29d809..01af308a10 100644 --- a/Nt32Pkg/Nt32Pkg.dsc +++ b/Nt32Pkg/Nt32Pkg.dsc @@ -368,6 +368,7 @@ MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.inf Nt32Pkg/WinNtOemHookStatusCodeHandlerPei/WinNtOemHookStatusCodeHandlerPei.inf Nt32Pkg/BootModePei/BootModePei.inf + Nt32Pkg/StallPei/StallPei.inf Nt32Pkg/WinNtFlashMapPei/WinNtFlashMapPei.inf MdeModulePkg/Universal/Variable/Pei/VariablePei.inf Nt32Pkg/WinNtAutoScanPei/WinNtAutoScanPei.inf diff --git a/Nt32Pkg/Nt32Pkg.fdf b/Nt32Pkg/Nt32Pkg.fdf index d98fe64dee..9b0c38d3b6 100644 --- a/Nt32Pkg/Nt32Pkg.fdf +++ b/Nt32Pkg/Nt32Pkg.fdf @@ -169,6 +169,7 @@ INF MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei INF MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.inf INF Nt32Pkg/WinNtOemHookStatusCodeHandlerPei/WinNtOemHookStatusCodeHandlerPei.inf INF Nt32Pkg/BootModePei/BootModePei.inf +INF Nt32Pkg/StallPei/StallPei.inf INF Nt32Pkg/WinNtFlashMapPei/WinNtFlashMapPei.inf INF Nt32Pkg/WinNtAutoScanPei/WinNtAutoScanPei.inf INF Nt32Pkg/WinNtFirmwareVolumePei/WinNtFirmwareVolumePei.inf diff --git a/Nt32Pkg/StallPei/Stall.c b/Nt32Pkg/StallPei/Stall.c new file mode 100644 index 0000000000..34e5d68d46 --- /dev/null +++ b/Nt32Pkg/StallPei/Stall.c @@ -0,0 +1,107 @@ +/**@file + EFI_PEI_STALL implementation for NT32 simulation environment. + +Copyright (c) 2009, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +#include "WinNtPeim.h" + +#include +#include +#include + +EFI_STATUS +EFIAPI +Stall ( + IN CONST EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_STALL_PPI *This, + IN UINTN Microseconds + ); + +EFI_PEI_STALL_PPI mStallPpi = {1000, Stall}; + +EFI_PEI_PPI_DESCRIPTOR mPpiListStall[1] = { + { + (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), + &gEfiPeiStallPpiGuid, + &mStallPpi + } +}; + + +/** + PEIM's entry point. + + This routine installs the simulation instance of EFI_PEI_STALL_PPI based + on Win API Sleep(). + + @param FileHandle Handle of the file being invoked. + @param PeiServices Describes the list of possible PEI Services. + + @retval EFI_SUCCESS The PEIM executed normally. + @retval !EFI_SUCCESS The PEIM failed to execute normally. +**/ +EFI_STATUS +EFIAPI +InitializeStall ( + IN EFI_PEI_FILE_HANDLE FileHandle, + IN CONST EFI_PEI_SERVICES **PeiServices + ) +{ + EFI_STATUS Status; + Status = (*PeiServices)->InstallPpi (PeiServices, &mPpiListStall[0]); + ASSERT_EFI_ERROR (Status); + + return Status; +} + +/** + The Stall() function provides a blocking stall for at least the number + of microseconds stipulated in the final argument of the API. + + @param PeiServices An indirect pointer to the PEI Services Table + published by the PEI Foundation. + @param This Pointer to the local data for the interface. + @param Microseconds Number of microseconds for which to stall. + + @retval EFI_SUCCESS The service provided at least the required delay. + +**/ +EFI_STATUS +EFIAPI +Stall ( + IN CONST EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_STALL_PPI *This, + IN UINTN Microseconds + ) +{ + EFI_STATUS Status; + PEI_NT_THUNK_PPI *PeiNtService; + EFI_WIN_NT_THUNK_PROTOCOL *NtThunk; + + Status = (**PeiServices).LocatePpi ( + (const EFI_PEI_SERVICES **)PeiServices, + &gPeiNtThunkPpiGuid, + 0, + NULL, + (VOID**)&PeiNtService + ); + ASSERT_EFI_ERROR (Status); + + // + // Calculate the time to sleep. Win API smallest unit to sleep is 1 millisec + // so micro second units need be divided by 1000 to convert to ms + // + NtThunk = (EFI_WIN_NT_THUNK_PROTOCOL*) PeiNtService->NtThunk(); + NtThunk->Sleep ((Microseconds + 999) / 1000); + + return EFI_SUCCESS; +} + \ No newline at end of file diff --git a/Nt32Pkg/StallPei/StallPei.inf b/Nt32Pkg/StallPei/StallPei.inf new file mode 100644 index 0000000000..69a0812933 --- /dev/null +++ b/Nt32Pkg/StallPei/StallPei.inf @@ -0,0 +1,48 @@ +#/** @file +# EFI_PEI_STALL implementation for NT32 simulation environment. +# +# Copyright (c) 2009, Intel Corporation +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# +#**/ + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = Stall + FILE_GUID = 6807217E-E8DE-42d0-91D9-60AECED7420D + MODULE_TYPE = PEIM + VERSION_STRING = 1.0 + + ENTRY_POINT = InitializeStall + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +[Sources.common] + Stall.c + +[Packages] + MdePkg/MdePkg.dec + Nt32Pkg/Nt32Pkg.dec + +[LibraryClasses] + PeimEntryPoint + DebugLib + +[Ppis] + gEfiPeiStallPpiGuid ## PRODUCES + gPeiNtThunkPpiGuid ## CONSUMES + +[Depex] + TRUE +