From 4249fa760f55539ae3f6942dd9fdd25dcbb03357 Mon Sep 17 00:00:00 2001 From: erictian Date: Mon, 14 Mar 2011 09:57:55 +0000 Subject: [PATCH] judge recovery mode at ReadOnlyVariable2Ppi interface. if yes, then return EFI_NOT_FOUND git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11397 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Universal/Variable/Pei/Variable.c | 154 +++++------------- .../Universal/Variable/Pei/Variable.h | 76 --------- .../Universal/Variable/Pei/VariablePei.inf | 2 +- 3 files changed, 46 insertions(+), 186 deletions(-) diff --git a/MdeModulePkg/Universal/Variable/Pei/Variable.c b/MdeModulePkg/Universal/Variable/Pei/Variable.c index 320d4526c7..0db9521239 100644 --- a/MdeModulePkg/Universal/Variable/Pei/Variable.c +++ b/MdeModulePkg/Universal/Variable/Pei/Variable.c @@ -32,20 +32,35 @@ EFI_PEI_PPI_DESCRIPTOR mPpiListVariable = { &mVariablePpi }; -EFI_PEI_READ_ONLY_VARIABLE2_PPI mVariablePpiRecovery = { - PeiGetVariableRecovery, - PeiGetNextVariableNameRecovery -}; - -EFI_PEI_PPI_DESCRIPTOR mPpiListVariableRecovery = { - (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), - &gEfiPeiReadOnlyVariable2PpiGuid, - &mVariablePpiRecovery -}; - EFI_GUID mEfiVariableIndexTableGuid = EFI_VARIABLE_INDEX_TABLE_GUID; +/** + Check if it runs in Recovery mode. + + @param PeiServices General purpose services available to every PEIM. + + @retval TRUE It's in Recovery mode. + @retval FALSE It's not in Recovery mode. + +**/ +BOOLEAN +IsInRecoveryMode ( + IN CONST EFI_PEI_SERVICES **PeiServices + ) +{ + EFI_STATUS Status; + EFI_BOOT_MODE BootMode; + + Status = (*PeiServices)->GetBootMode (PeiServices, &BootMode); + ASSERT_EFI_ERROR (Status); + + if (BootMode == BOOT_IN_RECOVERY_MODE) { + return TRUE; + } + return FALSE; +} + /** Provide the functionality of the variable services. @@ -64,24 +79,7 @@ PeimInitializeVariableServices ( IN CONST EFI_PEI_SERVICES **PeiServices ) { - EFI_BOOT_MODE BootMode; - EFI_STATUS Status; - - // - // Check if this is recovery boot path. - // If no, provide other modules the access capability to variable area in NV storage. - // If yes, the content of variable area is not reliable. Therefore, - // we provide a dummy ReadOnlyVariable2Ppi interface to other pei modules. - // - Status = (*PeiServices)->GetBootMode (PeiServices, &BootMode); - ASSERT_EFI_ERROR (Status); - - if (BootMode == BOOT_IN_RECOVERY_MODE) { - return PeiServicesInstallPpi (&mPpiListVariableRecovery); - } - return PeiServicesInstallPpi (&mPpiListVariable); - } /** @@ -563,6 +561,16 @@ PeiGetVariable ( if (VariableName == NULL || VariableGuid == NULL || DataSize == NULL) { return EFI_INVALID_PARAMETER; } + + // + // Check if this is recovery boot path. + // If yes, the content of variable area is not reliable. Therefore we directly + // return EFI_NOT_FOUND. + // + if (IsInRecoveryMode(PeiServices)) { + return EFI_NOT_FOUND; + } + // // Find existing variable // @@ -641,6 +649,15 @@ PeiGetNextVariableName ( return EFI_INVALID_PARAMETER; } + // + // Check if this is recovery boot path. + // If yes, the content of variable area is not reliable. Therefore we directly + // return EFI_NOT_FOUND. + // + if (IsInRecoveryMode(PeiServices)) { + return EFI_NOT_FOUND; + } + Status = FindVariable (PeiServices, VariableName, VariableGuid, &Variable); if (Variable.CurrPtr == NULL || Status != EFI_SUCCESS) { return Status; @@ -684,84 +701,3 @@ PeiGetNextVariableName ( return EFI_NOT_FOUND; } - -/** - This service retrieves a variable's value using its name and GUID. - - Read the specified variable from the UEFI variable store. If the Data - buffer is too small to hold the contents of the variable, the error - EFI_BUFFER_TOO_SMALL is returned and DataSize is set to the required buffer - size to obtain the data. - - @param This A pointer to this instance of the EFI_PEI_READ_ONLY_VARIABLE2_PPI. - @param VariableName A pointer to a null-terminated string that is the variable's name. - @param VariableGuid A pointer to an EFI_GUID that is the variable's GUID. The combination of - VariableGuid and VariableName must be unique. - @param Attributes If non-NULL, on return, points to the variable's attributes. - @param DataSize On entry, points to the size in bytes of the Data buffer. - On return, points to the size of the data returned in Data. - @param Data Points to the buffer which will hold the returned variable value. - - @retval EFI_SUCCESS The variable was read successfully. - @retval EFI_NOT_FOUND The variable could not be found. - @retval EFI_BUFFER_TOO_SMALL The DataSize is too small for the resulting data. - DataSize is updated with the size required for - the specified variable. - @retval EFI_INVALID_PARAMETER VariableName, VariableGuid, DataSize or Data is NULL. - @retval EFI_DEVICE_ERROR The variable could not be retrieved because of a device error. - -**/ -EFI_STATUS -EFIAPI -PeiGetVariableRecovery ( - IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This, - IN CONST CHAR16 *VariableName, - IN CONST EFI_GUID *VariableGuid, - OUT UINT32 *Attributes, - IN OUT UINTN *DataSize, - OUT VOID *Data - ) -{ - return EFI_NOT_FOUND; -} - -/** - Return the next variable name and GUID. - - This function is called multiple times to retrieve the VariableName - and VariableGuid of all variables currently available in the system. - On each call, the previous results are passed into the interface, - and, on return, the interface returns the data for the next - interface. When the entire variable list has been returned, - EFI_NOT_FOUND is returned. - - @param This A pointer to this instance of the EFI_PEI_READ_ONLY_VARIABLE2_PPI. - - @param VariableNameSize On entry, points to the size of the buffer pointed to by VariableName. - @param VariableName On entry, a pointer to a null-terminated string that is the variable's name. - On return, points to the next variable's null-terminated name string. - - @param VariableGuid On entry, a pointer to an UEFI _GUID that is the variable's GUID. - On return, a pointer to the next variable's GUID. - - @retval EFI_SUCCESS The variable was read successfully. - @retval EFI_NOT_FOUND The variable could not be found. - @retval EFI_BUFFER_TOO_SMALL The VariableNameSize is too small for the resulting - data. VariableNameSize is updated with the size - required for the specified variable. - @retval EFI_INVALID_PARAMETER VariableName, VariableGuid or - VariableNameSize is NULL. - @retval EFI_DEVICE_ERROR The variable could not be retrieved because of a device error. - -**/ -EFI_STATUS -EFIAPI -PeiGetNextVariableNameRecovery ( - IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This, - IN OUT UINTN *VariableNameSize, - IN OUT CHAR16 *VariableName, - IN OUT EFI_GUID *VariableGuid - ) -{ - return EFI_NOT_FOUND; -} diff --git a/MdeModulePkg/Universal/Variable/Pei/Variable.h b/MdeModulePkg/Universal/Variable/Pei/Variable.h index ea217dbdf0..430a3544dc 100644 --- a/MdeModulePkg/Universal/Variable/Pei/Variable.h +++ b/MdeModulePkg/Universal/Variable/Pei/Variable.h @@ -153,80 +153,4 @@ PeiGetNextVariableName ( IN OUT EFI_GUID *VariableGuid ); - -/** - This service retrieves a variable's value using its name and GUID. - - Read the specified variable from the UEFI variable store. If the Data - buffer is too small to hold the contents of the variable, the error - EFI_BUFFER_TOO_SMALL is returned and DataSize is set to the required buffer - size to obtain the data. - - @param This A pointer to this instance of the EFI_PEI_READ_ONLY_VARIABLE2_PPI. - @param VariableName A pointer to a null-terminated string that is the variable's name. - @param VariableGuid A pointer to an EFI_GUID that is the variable's GUID. The combination of - VariableGuid and VariableName must be unique. - @param Attributes If non-NULL, on return, points to the variable's attributes. - @param DataSize On entry, points to the size in bytes of the Data buffer. - On return, points to the size of the data returned in Data. - @param Data Points to the buffer which will hold the returned variable value. - - @retval EFI_SUCCESS The variable was read successfully. - @retval EFI_NOT_FOUND The variable could not be found. - @retval EFI_BUFFER_TOO_SMALL The DataSize is too small for the resulting data. - DataSize is updated with the size required for - the specified variable. - @retval EFI_INVALID_PARAMETER VariableName, VariableGuid, DataSize or Data is NULL. - @retval EFI_DEVICE_ERROR The variable could not be retrieved because of a device error. - -**/ -EFI_STATUS -EFIAPI -PeiGetVariableRecovery ( - IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This, - IN CONST CHAR16 *VariableName, - IN CONST EFI_GUID *VariableGuid, - OUT UINT32 *Attributes, - IN OUT UINTN *DataSize, - OUT VOID *Data - ); - -/** - Return the next variable name and GUID. - - This function is called multiple times to retrieve the VariableName - and VariableGuid of all variables currently available in the system. - On each call, the previous results are passed into the interface, - and, on return, the interface returns the data for the next - interface. When the entire variable list has been returned, - EFI_NOT_FOUND is returned. - - @param This A pointer to this instance of the EFI_PEI_READ_ONLY_VARIABLE2_PPI. - - @param VariableNameSize On entry, points to the size of the buffer pointed to by VariableName. - @param VariableName On entry, a pointer to a null-terminated string that is the variable's name. - On return, points to the next variable's null-terminated name string. - - @param VariableGuid On entry, a pointer to an UEFI _GUID that is the variable's GUID. - On return, a pointer to the next variable's GUID. - - @retval EFI_SUCCESS The variable was read successfully. - @retval EFI_NOT_FOUND The variable could not be found. - @retval EFI_BUFFER_TOO_SMALL The VariableNameSize is too small for the resulting - data. VariableNameSize is updated with the size - required for the specified variable. - @retval EFI_INVALID_PARAMETER VariableName, VariableGuid or - VariableNameSize is NULL. - @retval EFI_DEVICE_ERROR The variable could not be retrieved because of a device error. - -**/ -EFI_STATUS -EFIAPI -PeiGetNextVariableNameRecovery ( - IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This, - IN OUT UINTN *VariableNameSize, - IN OUT CHAR16 *VariableName, - IN OUT EFI_GUID *VariableGuid - ); - #endif diff --git a/MdeModulePkg/Universal/Variable/Pei/VariablePei.inf b/MdeModulePkg/Universal/Variable/Pei/VariablePei.inf index a368ba9613..41b87b71e1 100644 --- a/MdeModulePkg/Universal/Variable/Pei/VariablePei.inf +++ b/MdeModulePkg/Universal/Variable/Pei/VariablePei.inf @@ -56,7 +56,7 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64 ## CONSUMES [Depex] - gEfiPeiMasterBootModePpiGuid + TRUE # # [BootMode]