+++ /dev/null
-/** @file\r
-Module produce EFI_PEI_READ_ONLY_VARIABLE2_PPI on top of EFI_PEI_READ_ONLY_VARIABLE_PPI.\r
-UEFI PI Spec supersedes Intel's Framework Specs. \r
-EFI_PEI_READ_ONLY_VARIABLE_PPI defined in Intel Framework Pkg is replaced by EFI_PEI_READ_ONLY_VARIABLE2_PPI\r
-in MdePkg.\r
-This module produces EFI_PEI_READ_ONLY_VARIABLE2_PPI on top of EFI_PEI_READ_ONLY_VARIABLE_PPI. \r
-This module is used on platform when both of these two conditions are true:\r
-1) Framework module produces EFI_PEI_READ_ONLY_VARIABLE_PPI is present.\r
-2) The platform has PI modules that only consumes EFI_PEI_READ_ONLY_VARIABLE2_PPI.\r
-\r
-This module can't be used together with ReadOnlyVariableToReadOnlyVariable2Thunk module.\r
-\r
-\r
-Copyright (c) 2006 - 2010, 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
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-Module Name:\r
-\r
-**/\r
-\r
-#include <PiPei.h>\r
-#include <Ppi/ReadOnlyVariable2.h>\r
-#include <Ppi/ReadOnlyVariable.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/PeiServicesTablePointerLib.h>\r
-#include <Library/PeiServicesLib.h>\r
-\r
-/**\r
- Provide the read variable functionality of the variable services.\r
-\r
- @param This A pointer to this instance of the EFI_PEI_READ_ONLY_VARIABLE2_PPI.\r
- @param VariableName A pointer to a null-terminated string that is the variable's name.\r
- @param VariableGuid A pointer to an EFI_GUID that is the variable's GUID. The combination of\r
- VariableGuid and VariableName must be unique.\r
- @param Attributes If non-NULL, on return, points to the variable's attributes.\r
- @param DataSize On entry, points to the size in bytes of the Data buffer.\r
- On return, points to the size of the data returned in Data.\r
- @param Data Points to the buffer which will hold the returned variable value.\r
-\r
- @retval EFI_SUCCESS The interface could be successfully installed\r
- @retval EFI_NOT_FOUND The variable could not be discovered\r
- @retval EFI_BUFFER_TOO_SMALL The caller buffer is not large enough\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-PeiGetVariable (\r
- IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This,\r
- IN CONST CHAR16 *VariableName,\r
- IN CONST EFI_GUID *VariableGuid,\r
- OUT UINT32 *Attributes,\r
- IN OUT UINTN *DataSize,\r
- OUT VOID *Data\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_PEI_READ_ONLY_VARIABLE_PPI *ReadOnlyVariable;\r
-\r
- Status = PeiServicesLocatePpi (\r
- &gEfiPeiReadOnlyVariablePpiGuid,\r
- 0,\r
- NULL,\r
- (VOID **)&ReadOnlyVariable\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- return ReadOnlyVariable->PeiGetVariable (\r
- (EFI_PEI_SERVICES **) GetPeiServicesTablePointer (),\r
- (CHAR16 *)VariableName,\r
- (EFI_GUID *)VariableGuid,\r
- Attributes,\r
- DataSize,\r
- Data\r
- );\r
-}\r
-\r
-/**\r
- Provide the get next variable functionality of the variable services.\r
-\r
- @param This A pointer to this instance of the EFI_PEI_READ_ONLY_VARIABLE2_PPI.\r
-\r
- @param VariableNameSize On entry, points to the size of the buffer pointed to by VariableName.\r
- @param VariableName On entry, a pointer to a null-terminated string that is the variable's name.\r
- On return, points to the next variable's null-terminated name string.\r
-\r
- @param VariableGuid On entry, a pointer to an EFI_GUID that is the variable's GUID. \r
- On return, a pointer to the next variable's GUID.\r
-\r
- @retval EFI_SUCCESS The interface could be successfully installed\r
- @retval EFI_NOT_FOUND The variable could not be discovered\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-PeiGetNextVariableName (\r
- IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This,\r
- IN OUT UINTN *VariableNameSize,\r
- IN OUT CHAR16 *VariableName,\r
- IN OUT EFI_GUID *VariableGuid\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_PEI_READ_ONLY_VARIABLE_PPI *ReadOnlyVariable;\r
-\r
- Status = PeiServicesLocatePpi (\r
- &gEfiPeiReadOnlyVariablePpiGuid,\r
- 0,\r
- NULL,\r
- (VOID **)&ReadOnlyVariable\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- return ReadOnlyVariable->PeiGetNextVariableName (\r
- (EFI_PEI_SERVICES **) GetPeiServicesTablePointer (),\r
- VariableNameSize,\r
- VariableName,\r
- VariableGuid\r
- );\r
-}\r
-\r
-//\r
-// Module globals\r
-//\r
-EFI_PEI_READ_ONLY_VARIABLE2_PPI mVariablePpi = {\r
- PeiGetVariable,\r
- PeiGetNextVariableName\r
-};\r
-\r
-EFI_PEI_PPI_DESCRIPTOR mPpiListVariable = {\r
- (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
- &gEfiPeiReadOnlyVariable2PpiGuid,\r
- &mVariablePpi\r
-};\r
-\r
-/**\r
- User entry for this PEIM driver.\r
- \r
- @param FileHandle Handle of the file being invoked.\r
- @param PeiServices Describes the list of possible PEI Services.\r
-\r
- @retval EFI_SUCCESS ReadOnlyVariable2 PPI is successfully installed.\r
- @return Others ReadOnlyVariable2 PPI is not successfully installed.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-PeimInitializeReadOnlyVariable2 (\r
- IN EFI_PEI_FILE_HANDLE FileHandle,\r
- IN CONST EFI_PEI_SERVICES **PeiServices\r
- )\r
-{\r
- //\r
- // This thunk module can only be used together with a PI PEI core, as we \r
- // assume PeiServices Pointer Table can be located in a standard way defined\r
- // in PI spec.\r
- //\r
- ASSERT ((*PeiServices)->Hdr.Revision >= 0x00010000);\r
-\r
- //\r
- // Developer should make sure ReadOnlyVariable2ToReadOnlyVariable module is not present. or else, the call chain will form a\r
- // infinite loop: ReadOnlyVariable2 -> ReadOnlyVariable -> ReadOnlyVariable2 -> .....\r
- //\r
- //\r
- // Publish the variable capability to other modules\r
- //\r
- return PeiServicesInstallPpi (&mPpiListVariable);\r
-}\r