REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3479 Updates VariableRuntimeDxe, VariableSmm, and VariableStandaloneMm to acquire variable flash information from the Variable Flash Information library. Note: This introduces a dependency on VariableFlashInfoLib in these modules. Therefore, a platform building the variable modules must specify an instance of VariableFlashInfoLib in their platform build. Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Hao A Wu <hao.a.wu@intel.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Acked-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
		
			
				
	
	
		
			148 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   The internal header file includes the common header files, defines
 | |
|   internal structure and functions used by PeiVariable module.
 | |
| 
 | |
| Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _PEI_VARIABLE_H_
 | |
| #define _PEI_VARIABLE_H_
 | |
| 
 | |
| #include <PiPei.h>
 | |
| #include <Ppi/ReadOnlyVariable2.h>
 | |
| 
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/PeimEntryPoint.h>
 | |
| #include <Library/HobLib.h>
 | |
| #include <Library/PcdLib.h>
 | |
| #include <Library/BaseMemoryLib.h>
 | |
| #include <Library/PeiServicesTablePointerLib.h>
 | |
| #include <Library/PeiServicesLib.h>
 | |
| #include <Library/SafeIntLib.h>
 | |
| #include <Library/VariableFlashInfoLib.h>
 | |
| 
 | |
| #include <Guid/VariableFormat.h>
 | |
| #include <Guid/VariableIndexTable.h>
 | |
| #include <Guid/SystemNvDataGuid.h>
 | |
| #include <Guid/FaultTolerantWrite.h>
 | |
| 
 | |
| typedef enum {
 | |
|   VariableStoreTypeHob,
 | |
|   VariableStoreTypeNv,
 | |
|   VariableStoreTypeMax
 | |
| } VARIABLE_STORE_TYPE;
 | |
| 
 | |
| typedef struct {
 | |
|   VARIABLE_STORE_HEADER                   *VariableStoreHeader;
 | |
|   VARIABLE_INDEX_TABLE                    *IndexTable;
 | |
|   //
 | |
|   // If it is not NULL, it means there may be an inconsecutive variable whose
 | |
|   // partial content is still in NV storage, but another partial content is backed up
 | |
|   // in spare block.
 | |
|   //
 | |
|   FAULT_TOLERANT_WRITE_LAST_WRITE_DATA    *FtwLastWriteData;
 | |
|   BOOLEAN                                 AuthFlag;
 | |
| } VARIABLE_STORE_INFO;
 | |
| 
 | |
| //
 | |
| // Functions
 | |
| //
 | |
| 
 | |
| /**
 | |
|   Provide the functionality of the variable services.
 | |
| 
 | |
|   @param  FileHandle  Handle of the file being invoked.
 | |
|                       Type EFI_PEI_FILE_HANDLE is defined in FfsFindNextFile().
 | |
|   @param  PeiServices  General purpose services available to every PEIM.
 | |
| 
 | |
|   @retval EFI_SUCCESS  If the interface could be successfully installed
 | |
|   @retval Others       Returned from PeiServicesInstallPpi()
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeimInitializeVariableServices (
 | |
|   IN       EFI_PEI_FILE_HANDLE  FileHandle,
 | |
|   IN CONST EFI_PEI_SERVICES     **PeiServices
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   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.
 | |
|                                 May be NULL with a zero DataSize in order to determine the size of the buffer needed.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The variable was read successfully.
 | |
|   @retval EFI_NOT_FOUND         The variable was not 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
 | |
| PeiGetVariable (
 | |
|   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 OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   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
 | |
| PeiGetNextVariableName (
 | |
|   IN CONST  EFI_PEI_READ_ONLY_VARIABLE2_PPI  *This,
 | |
|   IN OUT UINTN                               *VariableNameSize,
 | |
|   IN OUT CHAR16                              *VariableName,
 | |
|   IN OUT EFI_GUID                            *VariableGuid
 | |
|   );
 | |
| 
 | |
| #endif
 |