MdeModulePkg\Universal\Variable\Pei git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6475 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			191 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			7.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 - 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.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#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 <VariableFormat.h>
 | 
						|
 | 
						|
//
 | 
						|
// Define GET_PAD_SIZE to optimize compiler
 | 
						|
//
 | 
						|
#if ((ALIGNMENT == 0) || (ALIGNMENT == 1))
 | 
						|
#define GET_PAD_SIZE(a) (0)
 | 
						|
#else
 | 
						|
#define GET_PAD_SIZE(a) (((~a) + 1) & (ALIGNMENT - 1))
 | 
						|
#endif
 | 
						|
 | 
						|
#define HEADER_ALIGN(Header)  (((UINTN) (Header) + HEADER_ALIGNMENT - 1) & (~(HEADER_ALIGNMENT - 1)))
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  VARIABLE_HEADER *CurrPtr;
 | 
						|
  VARIABLE_HEADER *EndPtr;
 | 
						|
  VARIABLE_HEADER *StartPtr;
 | 
						|
} VARIABLE_POINTER_TRACK;
 | 
						|
 | 
						|
#define VARIABLE_INDEX_TABLE_VOLUME 122
 | 
						|
 | 
						|
#define EFI_VARIABLE_INDEX_TABLE_GUID \
 | 
						|
  { 0x8cfdb8c8, 0xd6b2, 0x40f3, { 0x8e, 0x97, 0x02, 0x30, 0x7c, 0xc9, 0x8b, 0x7c } }
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT16          Length;
 | 
						|
  UINT16          GoneThrough;
 | 
						|
  VARIABLE_HEADER *EndPtr;
 | 
						|
  VARIABLE_HEADER *StartPtr;
 | 
						|
  UINT16          Index[VARIABLE_INDEX_TABLE_VOLUME];
 | 
						|
} VARIABLE_INDEX_TABLE;
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// 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.
 | 
						|
 | 
						|
  @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
 | 
						|
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
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  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
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Get one variable by the index count.
 | 
						|
 | 
						|
  @param  IndexTable  The pointer to variable index table.
 | 
						|
  @param  Count       The index count of variable in index table.
 | 
						|
 | 
						|
  @return The pointer to variable header indexed by count.
 | 
						|
 | 
						|
**/
 | 
						|
VARIABLE_HEADER *
 | 
						|
GetVariableByIndex (
 | 
						|
  IN VARIABLE_INDEX_TABLE        *IndexTable,
 | 
						|
  IN UINT32                      Count
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Record Variable in VariableIndex HOB.
 | 
						|
 | 
						|
  Record Variable in VariableIndex HOB and update the length of variable index table.
 | 
						|
 | 
						|
  @param  IndexTable  The pointer to variable index table.
 | 
						|
  @param  Variable    The pointer to the variable that will be recorded.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
VariableIndexTableUpdate (
 | 
						|
  IN OUT  VARIABLE_INDEX_TABLE   *IndexTable,
 | 
						|
  IN      VARIABLE_HEADER        *Variable
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |