From 4c9c0f719df00f211790eadf04d21a93a0cdf76c Mon Sep 17 00:00:00 2001 From: qwang12 Date: Wed, 21 Jan 2009 09:47:43 +0000 Subject: Rename module name from ***To*** to ***On***. AAAOnBBB means this module produce AAA Protocol/PPI based on BBB. This change improves the readability. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7328 6f19259b-4bc3-4df7-8a09-765794883524 --- .../ReadOnlyVariableToReadOnlyVariable2Thunk.c | 201 +++++++++++++++++++++ .../ReadOnlyVariableToReadOnlyVariable2Thunk.inf | 62 +++++++ 2 files changed, 263 insertions(+) create mode 100644 EdkCompatibilityPkg/Compatibility/ReadOnlyVariableOnReadOnlyVariable2Thunk/ReadOnlyVariableToReadOnlyVariable2Thunk.c create mode 100644 EdkCompatibilityPkg/Compatibility/ReadOnlyVariableOnReadOnlyVariable2Thunk/ReadOnlyVariableToReadOnlyVariable2Thunk.inf (limited to 'EdkCompatibilityPkg/Compatibility/ReadOnlyVariableOnReadOnlyVariable2Thunk') diff --git a/EdkCompatibilityPkg/Compatibility/ReadOnlyVariableOnReadOnlyVariable2Thunk/ReadOnlyVariableToReadOnlyVariable2Thunk.c b/EdkCompatibilityPkg/Compatibility/ReadOnlyVariableOnReadOnlyVariable2Thunk/ReadOnlyVariableToReadOnlyVariable2Thunk.c new file mode 100644 index 0000000000..0e531e3a5f --- /dev/null +++ b/EdkCompatibilityPkg/Compatibility/ReadOnlyVariableOnReadOnlyVariable2Thunk/ReadOnlyVariableToReadOnlyVariable2Thunk.c @@ -0,0 +1,201 @@ +/** @file +Module produce EFI_PEI_READ_ONLY_VARIABLE_PPI on top of EFI_PEI_READ_ONLY_VARIABLE2_PPI. +UEFI PI Spec supersedes Intel's Framework Specs. +# EFI_PEI_READ_ONLY_VARIABLE_PPI defined in Intel Framework Pkg is replaced by EFI_PEI_READ_ONLY_VARIABLE2_PPI +# in MdePkg. +# This module produces EFI_PEI_READ_ONLY_VARIABLE_PPI on top of EFI_PEI_READ_ONLY_VARIABLE2_PPI. +# This module is used on platform when both of these two conditions are true: +# 1) Framework module consumes EFI_PEI_READ_ONLY_VARIABLE_PPI is present. +# 2) The platform has a PI module that only produces EFI_PEI_READ_ONLY_VARIABLE2_PPI. + +This module can't be used together with ReadOnlyVariable2ToReadOnlyVariableThunk module. + +Copyright (c) 2006 - 2008 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. +Module Name: + +**/ + +#include +#include +#include +#include +#include +#include + +// +// Function Prototypes +// +EFI_STATUS +EFIAPI +PeiGetVariable ( + IN EFI_PEI_SERVICES **PeiServices, + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + OUT UINT32 *Attributes OPTIONAL, + IN OUT UINTN *DataSize, + OUT VOID *Data + ); + +EFI_STATUS +EFIAPI +PeiGetNextVariableName ( + IN EFI_PEI_SERVICES **PeiServices, + IN OUT UINTN *VariableNameSize, + IN OUT CHAR16 *VariableName, + IN OUT EFI_GUID *VendorGuid + ); + +// +// Module globals +// +EFI_PEI_READ_ONLY_VARIABLE_PPI mVariablePpi = { + PeiGetVariable, + PeiGetNextVariableName +}; + +EFI_PEI_PPI_DESCRIPTOR mPpiListVariable = { + (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), + &gEfiPeiReadOnlyVariablePpiGuid, + &mVariablePpi +}; + +EFI_PEI_PPI_DESCRIPTOR mReadOnlyVariableThunkPresent = { + (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), + &gPeiReadonlyVariableThunkPresentPpiGuid, + NULL +}; + + +/** + Standard entry point of a PEIM. + + @param FfsHeadher The FFS file header + @param PeiServices General purpose services available to every PEIM. + + @retval EFI_SUCCESS If the gEfiPeiReadOnlyVariablePpiGuid interface could be successfully installed. + +**/ +EFI_STATUS +EFIAPI +PeimInitializeReadOnlyVariable ( + IN EFI_PEI_FILE_HANDLE FfsHeader, + IN CONST EFI_PEI_SERVICES **PeiServices + ) +{ + VOID *Interface; + EFI_STATUS Status; + + // + // Make sure ReadOnlyVariableToReadOnlyVariable2 module is not present. If so, the call chain will form a + // infinite loop: ReadOnlyVariable -> ReadOnlyVariable2 -> ReadOnlyVariable -> .... + // + Status = PeiServicesLocatePpi (&gPeiReadonlyVariableThunkPresentPpiGuid, 0, NULL, &Interface); + ASSERT (Status == EFI_NOT_FOUND); + + Status = PeiServicesInstallPpi (&mReadOnlyVariableThunkPresent); + ASSERT_EFI_ERROR (Status); + + // + // Publish the variable capability to other modules + // + return (*PeiServices)->InstallPpi (PeiServices, &mPpiListVariable); +} + +/** + Provide the read variable functionality of the variable services. + + @param PeiServices General purpose services available to every PEIM. + @param VariableName The variable name + @param VendorGuid The vendor's GUID + @param Attributes Pointer to the attribute + @param DataSize Size of data + @param Data Pointer to data + + @retval EFI_SUCCESS The interface could be successfully installed + @retval EFI_NOT_FOUND The variable could not be discovered + @retval EFI_BUFFER_TOO_SMALL The caller buffer is not large enough + +**/ +EFI_STATUS +EFIAPI +PeiGetVariable ( + IN EFI_PEI_SERVICES **PeiServices, + IN CHAR16 *VariableName, + IN EFI_GUID *VendorGuid, + OUT UINT32 *Attributes OPTIONAL, + IN OUT UINTN *DataSize, + OUT VOID *Data + ) +{ + EFI_STATUS Status; + EFI_PEI_READ_ONLY_VARIABLE2_PPI *ReadOnlyVariable2; + + Status = (*PeiServices)->LocatePpi ( + (CONST EFI_PEI_SERVICES **)PeiServices, + &gEfiPeiReadOnlyVariable2PpiGuid, + 0, + NULL, + (VOID **)&ReadOnlyVariable2 + ); + ASSERT_EFI_ERROR (Status); + + return ReadOnlyVariable2->GetVariable ( + ReadOnlyVariable2, + VariableName, + VendorGuid, + Attributes, + DataSize, + Data + ); +} + +/** + Provide the get next variable functionality of the variable services. + + @param PeiServices General purpose services available to every PEIM. + @param VariabvleNameSize The variable name's size. + @param VariableName A pointer to the variable's name. + @param VariableGuid A pointer to the EFI_GUID structure. + @param VariableNameSize Size of the variable name + @param VariableName The variable name + @param VendorGuid The vendor's GUID + + @retval EFI_SUCCESS The interface could be successfully installed + @retval EFI_NOT_FOUND The variable could not be discovered + +**/ +EFI_STATUS +EFIAPI +PeiGetNextVariableName ( + IN EFI_PEI_SERVICES **PeiServices, + IN OUT UINTN *VariableNameSize, + IN OUT CHAR16 *VariableName, + IN OUT EFI_GUID *VendorGuid + ) +{ + EFI_STATUS Status; + EFI_PEI_READ_ONLY_VARIABLE2_PPI *ReadOnlyVariable2; + + Status = (*PeiServices)->LocatePpi ( + (CONST EFI_PEI_SERVICES **)PeiServices, + &gEfiPeiReadOnlyVariable2PpiGuid, + 0, + NULL, + (VOID **)&ReadOnlyVariable2 + ); + ASSERT_EFI_ERROR (Status); + + return ReadOnlyVariable2->NextVariableName ( + ReadOnlyVariable2, + VariableNameSize, + VariableName, + VendorGuid + ); +} diff --git a/EdkCompatibilityPkg/Compatibility/ReadOnlyVariableOnReadOnlyVariable2Thunk/ReadOnlyVariableToReadOnlyVariable2Thunk.inf b/EdkCompatibilityPkg/Compatibility/ReadOnlyVariableOnReadOnlyVariable2Thunk/ReadOnlyVariableToReadOnlyVariable2Thunk.inf new file mode 100644 index 0000000000..73362f3653 --- /dev/null +++ b/EdkCompatibilityPkg/Compatibility/ReadOnlyVariableOnReadOnlyVariable2Thunk/ReadOnlyVariableToReadOnlyVariable2Thunk.inf @@ -0,0 +1,62 @@ +#/** @file +# Module produce EFI_PEI_READ_ONLY_VARIABLE_PPI on top of EFI_PEI_READ_ONLY_VARIABLE2_PPI. +# +# UEFI PI Spec supersedes Intel's Framework Specs. +# EFI_PEI_READ_ONLY_VARIABLE_PPI defined in Intel Framework Pkg is replaced by EFI_PEI_READ_ONLY_VARIABLE2_PPI +# in MdePkg. +# This module produces EFI_PEI_READ_ONLY_VARIABLE_PPI on top of EFI_PEI_READ_ONLY_VARIABLE2_PPI. +# This module is used on platform when both of these two conditions are true: +# 1) Framework module consumes EFI_PEI_READ_ONLY_VARIABLE_PPI is present. +# 2) The platform has a PI module that only produces EFI_PEI_READ_ONLY_VARIABLE2_PPI. +# This module can't be used together with ReadOnlyVariable2ToReadOnlyVariableThunk module. + +# +# Copyright (c) 2006 - 2007, 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 = ReadOnlyVariableToReadOnlyVariable2Thunk + FILE_GUID = 0FDB764B-E669-4c69-83AC-5EDD99A2711E + MODULE_TYPE = PEIM + VERSION_STRING = 1.0 + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + ENTRY_POINT = PeimInitializeReadOnlyVariable + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +[Sources.common] + ReadOnlyVariableToReadOnlyVariable2Thunk.c + +[Packages] + MdePkg/MdePkg.dec + EdkCompatibilityPkg/EdkCompatibilityPkg.dec + IntelFrameworkPkg/IntelFrameworkPkg.dec + +[LibraryClasses] + PeimEntryPoint + DebugLib + PeiServicesLib + +[Ppis] + gEfiPeiReadOnlyVariable2PpiGuid # PPI ALWAYS_CONSUMED + gEfiPeiReadOnlyVariablePpiGuid # PPI ALWAYS_PRODUCED + gPeiReadonlyVariableThunkPresentPpiGuid + +[Depex] + gEfiPeiReadOnlyVariable2PpiGuid -- cgit v1.2.3