diff options
Diffstat (limited to 'IntelFrameworkModulePkg/Universal/VariablePei/Variable.h')
-rw-r--r-- | IntelFrameworkModulePkg/Universal/VariablePei/Variable.h | 266 |
1 files changed, 266 insertions, 0 deletions
diff --git a/IntelFrameworkModulePkg/Universal/VariablePei/Variable.h b/IntelFrameworkModulePkg/Universal/VariablePei/Variable.h new file mode 100644 index 0000000000..cc82b0fd5c --- /dev/null +++ b/IntelFrameworkModulePkg/Universal/VariablePei/Variable.h @@ -0,0 +1,266 @@ +/*++
+
+Copyright (c) 2006 - 2007, 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.
+
+Module Name:
+
+ Variable.h
+
+Abstract:
+
+ Tiano PEIM to provide the variable functionality
+
+--*/
+
+#ifndef _PEI_VARIABLE_H
+#define _PEI_VARIABLE_H
+
+#include <PiPei.h>
+#include <Ppi/ReadOnlyVariable.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 <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 GET_VARIABLE_NAME_PTR(a) (CHAR16 *) ((UINTN) (a) + sizeof (VARIABLE_HEADER))
+
+#define GET_VARIABLE_DATA_PTR(a) \
+ (UINT8 *) ((UINTN) GET_VARIABLE_NAME_PTR (a) + (a)->NameSize + GET_PAD_SIZE ((a)->NameSize))
+
+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
+//
+EFI_STATUS
+EFIAPI
+PeimInitializeVariableServices (
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices
+ )
+/*++
+
+Routine Description:
+
+ TODO: Add function description
+
+Arguments:
+
+ FfsHeader - TODO: add argument description
+ PeiServices - TODO: add argument description
+
+Returns:
+
+ TODO: add return values
+
+--*/
+;
+
+EFI_STATUS
+EFIAPI
+PeiGetVariable (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN CHAR16 *VariableName,
+ IN EFI_GUID * VendorGuid,
+ OUT UINT32 *Attributes OPTIONAL,
+ IN OUT UINTN *DataSize,
+ OUT VOID *Data
+ )
+/*++
+
+Routine Description:
+
+ TODO: Add function description
+
+Arguments:
+
+ PeiServices - TODO: add argument description
+ VariableName - TODO: add argument description
+ VendorGuid - TODO: add argument description
+ Attributes - TODO: add argument description
+ DataSize - TODO: add argument description
+ Data - TODO: add argument description
+
+Returns:
+
+ TODO: add return values
+
+--*/
+;
+
+EFI_STATUS
+EFIAPI
+PeiGetVariable2 (
+ 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
+ )
+/*++
+
+Routine Description:
+
+ Provide the read variable functionality of the variable services.
+
+Arguments:
+
+ PeiServices - General purpose services available to every PEIM.
+
+ VariableName - The variable name
+
+ VendorGuid - The vendor's GUID
+
+ Attributes - Pointer to the attribute
+
+ DataSize - Size of data
+
+ Data - Pointer to data
+
+Returns:
+
+ EFI_SUCCESS - The interface could be successfully installed
+
+ EFI_NOT_FOUND - The variable could not be discovered
+
+ EFI_BUFFER_TOO_SMALL - The caller buffer is not large enough
+
+--*/
+;
+
+EFI_STATUS
+EFIAPI
+PeiGetNextVariableName2 (
+ IN CONST EFI_PEI_READ_ONLY_VARIABLE2_PPI *This,
+ IN OUT UINTN *VariableNameSize,
+ IN OUT CHAR16 *VariableName,
+ IN OUT EFI_GUID *VariableGuid
+ )
+/*++
+
+Routine Description:
+
+ Provide the get next variable functionality of the variable services.
+
+Arguments:
+
+ PeiServices - General purpose services available to every PEIM.
+ VariabvleNameSize - The variable name's size.
+ VariableName - A pointer to the variable's name.
+ VariableGuid - A pointer to the EFI_GUID structure.
+
+ VariableNameSize - Size of the variable name
+
+ VariableName - The variable name
+
+ VendorGuid - The vendor's GUID
+
+Returns:
+
+ EFI_SUCCESS - The interface could be successfully installed
+
+ EFI_NOT_FOUND - The variable could not be discovered
+
+--*/
+;
+
+EFI_STATUS
+EFIAPI
+PeiGetNextVariableName (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN OUT UINTN *VariableNameSize,
+ IN OUT CHAR16 *VariableName,
+ IN OUT EFI_GUID *VendorGuid
+ )
+/*++
+
+Routine Description:
+
+ TODO: Add function description
+
+Arguments:
+
+ PeiServices - TODO: add argument description
+ VariableNameSize - TODO: add argument description
+ VariableName - TODO: add argument description
+ VendorGuid - TODO: add argument description
+
+Returns:
+
+ TODO: add return values
+
+--*/
+;
+
+/**
+ 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.
+
+ @retval VOID
+
+**/
+VOID
+VariableIndexTableUpdate (
+ IN OUT VARIABLE_INDEX_TABLE *IndexTable,
+ IN VARIABLE_HEADER *Variable
+ );
+
+#endif // _PEI_VARIABLE_H
|