diff options
author | erictian <erictian@6f19259b-4bc3-4df7-8a09-765794883524> | 2011-03-14 09:57:55 +0000 |
---|---|---|
committer | erictian <erictian@6f19259b-4bc3-4df7-8a09-765794883524> | 2011-03-14 09:57:55 +0000 |
commit | 4249fa760f55539ae3f6942dd9fdd25dcbb03357 (patch) | |
tree | 0bb23b133205f8d07461b8e79d0f5ffd974ce292 | |
parent | 357237bfda411016bfd36fbcec5127cd84e3d638 (diff) | |
download | edk2-4249fa760f55539ae3f6942dd9fdd25dcbb03357.tar.gz edk2-4249fa760f55539ae3f6942dd9fdd25dcbb03357.tar.bz2 edk2-4249fa760f55539ae3f6942dd9fdd25dcbb03357.zip |
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
-rw-r--r-- | MdeModulePkg/Universal/Variable/Pei/Variable.c | 152 | ||||
-rw-r--r-- | MdeModulePkg/Universal/Variable/Pei/Variable.h | 76 | ||||
-rw-r--r-- | MdeModulePkg/Universal/Variable/Pei/VariablePei.inf | 2 |
3 files changed, 45 insertions, 185 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,19 +32,34 @@ EFI_PEI_PPI_DESCRIPTOR mPpiListVariable = { &mVariablePpi
};
-EFI_PEI_READ_ONLY_VARIABLE2_PPI mVariablePpiRecovery = {
- PeiGetVariableRecovery,
- PeiGetNextVariableNameRecovery
-};
+EFI_GUID mEfiVariableIndexTableGuid = EFI_VARIABLE_INDEX_TABLE_GUID;
-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]
|