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
This commit is contained in:
klu2 2010-01-04 04:45:44 +00:00
parent 8d415937c8
commit ba82cb67d7
4 changed files with 157 additions and 0 deletions

View File

@ -368,6 +368,7 @@
MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.inf MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.inf
Nt32Pkg/WinNtOemHookStatusCodeHandlerPei/WinNtOemHookStatusCodeHandlerPei.inf Nt32Pkg/WinNtOemHookStatusCodeHandlerPei/WinNtOemHookStatusCodeHandlerPei.inf
Nt32Pkg/BootModePei/BootModePei.inf Nt32Pkg/BootModePei/BootModePei.inf
Nt32Pkg/StallPei/StallPei.inf
Nt32Pkg/WinNtFlashMapPei/WinNtFlashMapPei.inf Nt32Pkg/WinNtFlashMapPei/WinNtFlashMapPei.inf
MdeModulePkg/Universal/Variable/Pei/VariablePei.inf MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
Nt32Pkg/WinNtAutoScanPei/WinNtAutoScanPei.inf Nt32Pkg/WinNtAutoScanPei/WinNtAutoScanPei.inf

View File

@ -169,6 +169,7 @@ INF MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei
INF MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.inf INF MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.inf
INF Nt32Pkg/WinNtOemHookStatusCodeHandlerPei/WinNtOemHookStatusCodeHandlerPei.inf INF Nt32Pkg/WinNtOemHookStatusCodeHandlerPei/WinNtOemHookStatusCodeHandlerPei.inf
INF Nt32Pkg/BootModePei/BootModePei.inf INF Nt32Pkg/BootModePei/BootModePei.inf
INF Nt32Pkg/StallPei/StallPei.inf
INF Nt32Pkg/WinNtFlashMapPei/WinNtFlashMapPei.inf INF Nt32Pkg/WinNtFlashMapPei/WinNtFlashMapPei.inf
INF Nt32Pkg/WinNtAutoScanPei/WinNtAutoScanPei.inf INF Nt32Pkg/WinNtAutoScanPei/WinNtAutoScanPei.inf
INF Nt32Pkg/WinNtFirmwareVolumePei/WinNtFirmwareVolumePei.inf INF Nt32Pkg/WinNtFirmwareVolumePei/WinNtFirmwareVolumePei.inf

107
Nt32Pkg/StallPei/Stall.c Normal file
View File

@ -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 <Ppi/NtThunk.h>
#include <Ppi/Stall.h>
#include <Library/DebugLib.h>
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;
}

View File

@ -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