mirror of https://github.com/acidanthera/audk.git
Add variablePei module into MdeModulePkg.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2838 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
de4c8a3080
commit
7ff7768df2
|
@ -318,4 +318,5 @@
|
||||||
${WORKSPACE}/MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteLite/Dxe/FtwLite.inf
|
${WORKSPACE}/MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteLite/Dxe/FtwLite.inf
|
||||||
#${WORKSPACE}/MdeModulePkg/Universal/FirmwareVolume/GuidedSectionExtraction/Crc32SectionExtract/Dxe/Crc32SectionExtract.inf
|
#${WORKSPACE}/MdeModulePkg/Universal/FirmwareVolume/GuidedSectionExtraction/Crc32SectionExtract/Dxe/Crc32SectionExtract.inf
|
||||||
${WORKSPACE}/MdeModulePkg/Bus/Pci/AtapiPassThru/Dxe/AtapiPassThru.inf
|
${WORKSPACE}/MdeModulePkg/Bus/Pci/AtapiPassThru/Dxe/AtapiPassThru.inf
|
||||||
${WORKSPACE}/MdeModulePkg/Universal/WatchDogTimerDxe/WatchDogTimer.inf
|
${WORKSPACE}/MdeModulePkg/Universal/WatchDogTimerDxe/WatchDogTimer.inf
|
||||||
|
#${WORKSPACE}/MdeModulePkg/Universal/VariablePei/Variable.inf
|
|
@ -0,0 +1,19 @@
|
||||||
|
/**@file
|
||||||
|
Variable Machine Type
|
||||||
|
|
||||||
|
Copyright (c) 2006 - 2007 Intel Corporation. <BR>
|
||||||
|
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 _VAR_MACHINE_H
|
||||||
|
#define _VAR_MACHINE_H
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,19 @@
|
||||||
|
/**@file
|
||||||
|
Variable Machine Type
|
||||||
|
|
||||||
|
Copyright (c) 2006 - 2007 Intel Corporation. <BR>
|
||||||
|
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 _VAR_MACHINE_H
|
||||||
|
#define _VAR_MACHINE_H
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,19 @@
|
||||||
|
/**@file
|
||||||
|
Variable Machine Type
|
||||||
|
|
||||||
|
Copyright (c) 2006 - 2007 Intel Corporation. <BR>
|
||||||
|
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 _VAR_MACHINE_H
|
||||||
|
#define _VAR_MACHINE_H
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,74 @@
|
||||||
|
/** @file
|
||||||
|
Variable worker functions.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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.
|
||||||
|
|
||||||
|
**/
|
||||||
|
//
|
||||||
|
// The package level header files this module uses
|
||||||
|
//
|
||||||
|
#include <PiPei.h>
|
||||||
|
|
||||||
|
//
|
||||||
|
// The protocols, PPI and GUID defintions for this module
|
||||||
|
//
|
||||||
|
#include <Ppi/ReadOnlyVariable.h>
|
||||||
|
//
|
||||||
|
// The Library classes this module consumes
|
||||||
|
//
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/PeimEntryPoint.h>
|
||||||
|
#include <Library/HobLib.h>
|
||||||
|
#include <Library/PcdLib.h>
|
||||||
|
#include <Library/BaseMemoryLib.h>
|
||||||
|
|
||||||
|
#include <Variable.h>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
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
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return (VARIABLE_HEADER *) (UINTN) ((((UINT32)IndexTable->Index[Count]) << 2) + ((UINT32)(UINTN)IndexTable->StartPtr & 0xFFFC0000) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
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
|
||||||
|
)
|
||||||
|
{
|
||||||
|
IndexTable->Index[IndexTable->Length++] = (UINT16) (((UINT32)(UINTN) Variable) >> 2);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,538 @@
|
||||||
|
/*++
|
||||||
|
|
||||||
|
Copyright (c) 2006 - 2007 Intel Corporation. <BR>
|
||||||
|
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.c
|
||||||
|
|
||||||
|
Abstract:
|
||||||
|
|
||||||
|
Framework PEIM to provide the Variable functionality
|
||||||
|
|
||||||
|
--*/
|
||||||
|
|
||||||
|
//
|
||||||
|
// The package level header files this module uses
|
||||||
|
//
|
||||||
|
#include <PiPei.h>
|
||||||
|
|
||||||
|
//
|
||||||
|
// The protocols, PPI and GUID defintions for this module
|
||||||
|
//
|
||||||
|
#include <Ppi/ReadOnlyVariable.h>
|
||||||
|
//
|
||||||
|
// The Library classes this module consumes
|
||||||
|
//
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/PeimEntryPoint.h>
|
||||||
|
#include <Library/HobLib.h>
|
||||||
|
#include <Library/PcdLib.h>
|
||||||
|
#include <Library/BaseMemoryLib.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include <Variable.h>
|
||||||
|
|
||||||
|
//
|
||||||
|
// Module globals
|
||||||
|
//
|
||||||
|
static EFI_PEI_READ_ONLY_VARIABLE_PPI mVariablePpi = {
|
||||||
|
PeiGetVariable,
|
||||||
|
PeiGetNextVariableName
|
||||||
|
};
|
||||||
|
|
||||||
|
static EFI_PEI_PPI_DESCRIPTOR mPpiListVariable = {
|
||||||
|
(EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
|
||||||
|
&gEfiPeiReadOnlyVariablePpiGuid,
|
||||||
|
&mVariablePpi
|
||||||
|
};
|
||||||
|
|
||||||
|
EFI_GUID mEfiVariableIndexTableGuid = EFI_VARIABLE_INDEX_TABLE_GUID;
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
PeimInitializeVariableServices (
|
||||||
|
IN EFI_FFS_FILE_HEADER *FfsHeader,
|
||||||
|
IN EFI_PEI_SERVICES **PeiServices
|
||||||
|
)
|
||||||
|
/*++
|
||||||
|
|
||||||
|
Routine Description:
|
||||||
|
|
||||||
|
Provide the functionality of the variable services.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
|
||||||
|
FfsHeadher - The FFS file header
|
||||||
|
PeiServices - General purpose services available to every PEIM.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
Status - EFI_SUCCESS if the interface could be successfully
|
||||||
|
installed
|
||||||
|
|
||||||
|
--*/
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Publish the variable capability to other modules
|
||||||
|
//
|
||||||
|
return (**PeiServices).InstallPpi (PeiServices, &mPpiListVariable);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
VARIABLE_HEADER *
|
||||||
|
GetNextVariablePtr (
|
||||||
|
IN VARIABLE_HEADER *Variable
|
||||||
|
)
|
||||||
|
/*++
|
||||||
|
|
||||||
|
Routine Description:
|
||||||
|
|
||||||
|
This code checks if variable header is valid or not.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
Variable Pointer to the Variable Header.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
TRUE Variable header is valid.
|
||||||
|
FALSE Variable header is not valid.
|
||||||
|
|
||||||
|
--*/
|
||||||
|
{
|
||||||
|
return (VARIABLE_HEADER *) ((UINTN) GET_VARIABLE_DATA_PTR (Variable) + Variable->DataSize + GET_PAD_SIZE (Variable->DataSize));
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
BOOLEAN
|
||||||
|
EFIAPI
|
||||||
|
IsValidVariableHeader (
|
||||||
|
IN VARIABLE_HEADER *Variable
|
||||||
|
)
|
||||||
|
/*++
|
||||||
|
|
||||||
|
Routine Description:
|
||||||
|
|
||||||
|
This code checks if variable header is valid or not.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
Variable Pointer to the Variable Header.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
TRUE Variable header is valid.
|
||||||
|
FALSE Variable header is not valid.
|
||||||
|
|
||||||
|
--*/
|
||||||
|
{
|
||||||
|
if (Variable == NULL ||
|
||||||
|
Variable->StartId != VARIABLE_DATA ||
|
||||||
|
(sizeof (VARIABLE_HEADER) + Variable->DataSize + Variable->NameSize) > MAX_VARIABLE_SIZE
|
||||||
|
) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
VARIABLE_STORE_STATUS
|
||||||
|
EFIAPI
|
||||||
|
GetVariableStoreStatus (
|
||||||
|
IN VARIABLE_STORE_HEADER *VarStoreHeader
|
||||||
|
)
|
||||||
|
/*++
|
||||||
|
|
||||||
|
Routine Description:
|
||||||
|
|
||||||
|
This code gets the pointer to the variable name.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
|
||||||
|
VarStoreHeader Pointer to the Variable Store Header.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
EfiRaw Variable store is raw
|
||||||
|
EfiValid Variable store is valid
|
||||||
|
EfiInvalid Variable store is invalid
|
||||||
|
|
||||||
|
--*/
|
||||||
|
{
|
||||||
|
if (VarStoreHeader->Signature == VARIABLE_STORE_SIGNATURE &&
|
||||||
|
VarStoreHeader->Format == VARIABLE_STORE_FORMATTED &&
|
||||||
|
VarStoreHeader->State == VARIABLE_STORE_HEALTHY
|
||||||
|
) {
|
||||||
|
|
||||||
|
return EfiValid;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (VarStoreHeader->Signature == 0xffffffff &&
|
||||||
|
VarStoreHeader->Size == 0xffffffff &&
|
||||||
|
VarStoreHeader->Format == 0xff &&
|
||||||
|
VarStoreHeader->State == 0xff
|
||||||
|
) {
|
||||||
|
|
||||||
|
return EfiRaw;
|
||||||
|
} else {
|
||||||
|
return EfiInvalid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
EFI_STATUS
|
||||||
|
CompareWithValidVariable (
|
||||||
|
IN VARIABLE_HEADER *Variable,
|
||||||
|
IN CHAR16 *VariableName,
|
||||||
|
IN EFI_GUID *VendorGuid,
|
||||||
|
OUT VARIABLE_POINTER_TRACK *PtrTrack
|
||||||
|
)
|
||||||
|
/*++
|
||||||
|
|
||||||
|
Routine Description:
|
||||||
|
|
||||||
|
This function compares a variable with variable entries in database
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
|
||||||
|
Variable - Pointer to the variable in our database
|
||||||
|
VariableName - Name of the variable to compare to 'Variable'
|
||||||
|
VendorGuid - GUID of the variable to compare to 'Variable'
|
||||||
|
PtrTrack - Variable Track Pointer structure that contains
|
||||||
|
Variable Information.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
EFI_SUCCESS - Found match variable
|
||||||
|
EFI_NOT_FOUND - Variable not found
|
||||||
|
|
||||||
|
--*/
|
||||||
|
{
|
||||||
|
if (VariableName[0] == 0) {
|
||||||
|
PtrTrack->CurrPtr = Variable;
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
} else {
|
||||||
|
//
|
||||||
|
// Don't use CompareGuid function here for performance reasons.
|
||||||
|
// Instead we compare the GUID a UINT32 at a time and branch
|
||||||
|
// on the first failed comparison.
|
||||||
|
//
|
||||||
|
if ((((INT32 *) VendorGuid)[0] == ((INT32 *) &Variable->VendorGuid)[0]) &&
|
||||||
|
(((INT32 *) VendorGuid)[1] == ((INT32 *) &Variable->VendorGuid)[1]) &&
|
||||||
|
(((INT32 *) VendorGuid)[2] == ((INT32 *) &Variable->VendorGuid)[2]) &&
|
||||||
|
(((INT32 *) VendorGuid)[3] == ((INT32 *) &Variable->VendorGuid)[3])
|
||||||
|
) {
|
||||||
|
if (!CompareMem (VariableName, GET_VARIABLE_NAME_PTR (Variable), Variable->NameSize)) {
|
||||||
|
PtrTrack->CurrPtr = Variable;
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
FindVariable (
|
||||||
|
IN EFI_PEI_SERVICES **PeiServices,
|
||||||
|
IN CHAR16 *VariableName,
|
||||||
|
IN EFI_GUID *VendorGuid,
|
||||||
|
OUT VARIABLE_POINTER_TRACK *PtrTrack
|
||||||
|
)
|
||||||
|
/*++
|
||||||
|
|
||||||
|
Routine Description:
|
||||||
|
|
||||||
|
This code finds variable in storage blocks (Non-Volatile)
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
|
||||||
|
PeiServices - General purpose services available to every PEIM.
|
||||||
|
VariableName - Name of the variable to be found
|
||||||
|
VendorGuid - Vendor GUID to be found.
|
||||||
|
PtrTrack - Variable Track Pointer structure that contains
|
||||||
|
Variable Information.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
EFI_SUCCESS - Variable found successfully
|
||||||
|
EFI_NOT_FOUND - Variable not found
|
||||||
|
EFI_INVALID_PARAMETER - Invalid variable name
|
||||||
|
|
||||||
|
--*/
|
||||||
|
{
|
||||||
|
EFI_HOB_GUID_TYPE *GuidHob;
|
||||||
|
VARIABLE_STORE_HEADER *VariableStoreHeader;
|
||||||
|
VARIABLE_HEADER *Variable;
|
||||||
|
VARIABLE_HEADER *MaxIndex;
|
||||||
|
VARIABLE_INDEX_TABLE *IndexTable;
|
||||||
|
UINT32 Count;
|
||||||
|
UINT8 *VariableBase;
|
||||||
|
|
||||||
|
if (VariableName != 0 && VendorGuid == NULL) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// No Variable Address equals zero, so 0 as initial value is safe.
|
||||||
|
//
|
||||||
|
MaxIndex = 0;
|
||||||
|
|
||||||
|
GuidHob = GetFirstGuidHob (&mEfiVariableIndexTableGuid);
|
||||||
|
if (GuidHob == NULL) {
|
||||||
|
IndexTable = BuildGuidHob (&mEfiVariableIndexTableGuid, sizeof (VARIABLE_INDEX_TABLE));
|
||||||
|
IndexTable->Length = 0;
|
||||||
|
IndexTable->StartPtr = NULL;
|
||||||
|
IndexTable->EndPtr = NULL;
|
||||||
|
IndexTable->GoneThrough = 0;
|
||||||
|
} else {
|
||||||
|
IndexTable = GET_GUID_HOB_DATA (GuidHob);
|
||||||
|
for (Count = 0; Count < IndexTable->Length; Count++)
|
||||||
|
{
|
||||||
|
MaxIndex = GetVariableByIndex (IndexTable, Count);
|
||||||
|
|
||||||
|
if (CompareWithValidVariable (MaxIndex, VariableName, VendorGuid, PtrTrack) == EFI_SUCCESS) {
|
||||||
|
PtrTrack->StartPtr = IndexTable->StartPtr;
|
||||||
|
PtrTrack->EndPtr = IndexTable->EndPtr;
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IndexTable->GoneThrough) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// If not found in HOB, then let's start from the MaxIndex we've found.
|
||||||
|
//
|
||||||
|
if (MaxIndex != NULL) {
|
||||||
|
Variable = GetNextVariablePtr (MaxIndex);
|
||||||
|
} else {
|
||||||
|
if (IndexTable->StartPtr || IndexTable->EndPtr) {
|
||||||
|
Variable = IndexTable->StartPtr;
|
||||||
|
} else {
|
||||||
|
VariableBase = (UINT8 *) (UINTN) PcdGet32 (PcdFlashNvStorageVariableBase);
|
||||||
|
VariableStoreHeader = (VARIABLE_STORE_HEADER *) (VariableBase + \
|
||||||
|
((EFI_FIRMWARE_VOLUME_HEADER *) (VariableBase)) -> HeaderLength);
|
||||||
|
|
||||||
|
if (GetVariableStoreStatus (VariableStoreHeader) != EfiValid) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (~VariableStoreHeader->Size == 0) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Find the variable by walk through non-volatile variable store
|
||||||
|
//
|
||||||
|
IndexTable->StartPtr = (VARIABLE_HEADER *) (VariableStoreHeader + 1);
|
||||||
|
IndexTable->EndPtr = (VARIABLE_HEADER *) ((UINTN) VariableStoreHeader + VariableStoreHeader->Size);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Start Pointers for the variable.
|
||||||
|
// Actual Data Pointer where data can be written.
|
||||||
|
//
|
||||||
|
Variable = IndexTable->StartPtr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Find the variable by walk through non-volatile variable store
|
||||||
|
//
|
||||||
|
PtrTrack->StartPtr = IndexTable->StartPtr;
|
||||||
|
PtrTrack->EndPtr = IndexTable->EndPtr;
|
||||||
|
|
||||||
|
while (IsValidVariableHeader (Variable) && (Variable <= IndexTable->EndPtr)) {
|
||||||
|
if (Variable->State == VAR_ADDED) {
|
||||||
|
//
|
||||||
|
// Record Variable in VariableIndex HOB
|
||||||
|
//
|
||||||
|
if (IndexTable->Length < VARIABLE_INDEX_TABLE_VOLUME)
|
||||||
|
{
|
||||||
|
VariableIndexTableUpdate (IndexTable, Variable);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CompareWithValidVariable (Variable, VariableName, VendorGuid, PtrTrack) == EFI_SUCCESS) {
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Variable = GetNextVariablePtr (Variable);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// If gone through the VariableStore, that means we never find in Firmware any more.
|
||||||
|
//
|
||||||
|
if (IndexTable->Length < VARIABLE_INDEX_TABLE_VOLUME) {
|
||||||
|
IndexTable->GoneThrough = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
PtrTrack->CurrPtr = NULL;
|
||||||
|
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
--*/
|
||||||
|
{
|
||||||
|
VARIABLE_POINTER_TRACK Variable;
|
||||||
|
UINTN VarDataSize;
|
||||||
|
EFI_STATUS Status;
|
||||||
|
|
||||||
|
if (VariableName == NULL || VendorGuid == NULL) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Find existing variable
|
||||||
|
//
|
||||||
|
Status = FindVariable (PeiServices, VariableName, VendorGuid, &Variable);
|
||||||
|
|
||||||
|
if (Variable.CurrPtr == NULL || Status != EFI_SUCCESS) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Get data size
|
||||||
|
//
|
||||||
|
VarDataSize = Variable.CurrPtr->DataSize;
|
||||||
|
if (*DataSize >= VarDataSize) {
|
||||||
|
(*PeiServices)->CopyMem (Data, GET_VARIABLE_DATA_PTR (Variable.CurrPtr), VarDataSize);
|
||||||
|
|
||||||
|
if (Attributes != NULL) {
|
||||||
|
*Attributes = Variable.CurrPtr->Attributes;
|
||||||
|
}
|
||||||
|
|
||||||
|
*DataSize = VarDataSize;
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
} else {
|
||||||
|
*DataSize = VarDataSize;
|
||||||
|
return EFI_BUFFER_TOO_SMALL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
PeiGetNextVariableName (
|
||||||
|
IN EFI_PEI_SERVICES **PeiServices,
|
||||||
|
IN OUT UINTN *VariableNameSize,
|
||||||
|
IN OUT CHAR16 *VariableName,
|
||||||
|
IN OUT EFI_GUID *VendorGuid
|
||||||
|
)
|
||||||
|
/*++
|
||||||
|
|
||||||
|
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.
|
||||||
|
VendorGuid - 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
|
||||||
|
|
||||||
|
--*/
|
||||||
|
{
|
||||||
|
VARIABLE_POINTER_TRACK Variable;
|
||||||
|
UINTN VarNameSize;
|
||||||
|
EFI_STATUS Status;
|
||||||
|
|
||||||
|
if (VariableName == NULL) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = FindVariable (PeiServices, VariableName, VendorGuid, &Variable);
|
||||||
|
|
||||||
|
if (Variable.CurrPtr == NULL || Status != EFI_SUCCESS) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (VariableName[0] != 0) {
|
||||||
|
//
|
||||||
|
// If variable name is not NULL, get next variable
|
||||||
|
//
|
||||||
|
Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!(Variable.CurrPtr >= Variable.EndPtr || Variable.CurrPtr == NULL)) {
|
||||||
|
if (IsValidVariableHeader (Variable.CurrPtr)) {
|
||||||
|
if (Variable.CurrPtr->State == VAR_ADDED) {
|
||||||
|
VarNameSize = (UINTN) Variable.CurrPtr->NameSize;
|
||||||
|
if (VarNameSize <= *VariableNameSize) {
|
||||||
|
(*PeiServices)->CopyMem (VariableName, GET_VARIABLE_NAME_PTR (Variable.CurrPtr), VarNameSize);
|
||||||
|
|
||||||
|
(*PeiServices)->CopyMem (VendorGuid, &Variable.CurrPtr->VendorGuid, sizeof (EFI_GUID));
|
||||||
|
|
||||||
|
Status = EFI_SUCCESS;
|
||||||
|
} else {
|
||||||
|
Status = EFI_BUFFER_TOO_SMALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
*VariableNameSize = VarNameSize;
|
||||||
|
return Status;
|
||||||
|
//
|
||||||
|
// Variable is found
|
||||||
|
//
|
||||||
|
} else {
|
||||||
|
Variable.CurrPtr = GetNextVariablePtr (Variable.CurrPtr);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*++
|
||||||
|
|
||||||
|
Copyright (c) 2006, 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.dxs
|
||||||
|
|
||||||
|
Abstract:
|
||||||
|
|
||||||
|
Dependency expression file for Variable PEIM.
|
||||||
|
|
||||||
|
--*/
|
||||||
|
//
|
||||||
|
// Include common header file for this module.
|
||||||
|
//
|
||||||
|
#include "CommonHeader.h"
|
||||||
|
|
||||||
|
#include <PeimDepex.h>
|
||||||
|
|
||||||
|
DEPENDENCY_START
|
||||||
|
TRUE
|
||||||
|
DEPENDENCY_END
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,184 @@
|
||||||
|
/*++
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
//
|
||||||
|
// BugBug: We need relcate the head file.
|
||||||
|
//
|
||||||
|
#include <Common/Variable.h>
|
||||||
|
#include <VarMachine.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
|
||||||
|
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
|
|
@ -0,0 +1,126 @@
|
||||||
|
#/** @file
|
||||||
|
# Component description file for PeiVariable module.
|
||||||
|
#
|
||||||
|
# Framework PEIM to provide the Variable functionality.
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#**/
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Defines Section - statements that will be processed to create a Makefile.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
[Defines]
|
||||||
|
INF_VERSION = 0x00010005
|
||||||
|
BASE_NAME = PeiVariable
|
||||||
|
FILE_GUID = 34C8C28F-B61C-45a2-8F2E-89E46BECC63B
|
||||||
|
MODULE_TYPE = PEIM
|
||||||
|
VERSION_STRING = 1.0
|
||||||
|
EDK_RELEASE_VERSION = 0x00020000
|
||||||
|
EFI_SPECIFICATION_VERSION = 0x00020000
|
||||||
|
|
||||||
|
ENTRY_POINT = PeimInitializeVariableServices
|
||||||
|
|
||||||
|
#
|
||||||
|
# The following information is for reference only and not required by the build tools.
|
||||||
|
#
|
||||||
|
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||||
|
#
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Sources Section - list of files that are required for the build to succeed.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[Sources.common]
|
||||||
|
Variable.dxs
|
||||||
|
Variable.c
|
||||||
|
Variable.h
|
||||||
|
|
||||||
|
[Sources.Ia32]
|
||||||
|
Ia32/VarMachine.h
|
||||||
|
VariableWorker.c
|
||||||
|
|
||||||
|
[Sources.X64]
|
||||||
|
x64/VarMachine.h
|
||||||
|
VariableWorker.c
|
||||||
|
|
||||||
|
[Sources.IPF]
|
||||||
|
Ipf/VarMachine.h
|
||||||
|
Ipf/VariableWorker.c
|
||||||
|
|
||||||
|
[Sources.EBC]
|
||||||
|
Ebc/VarMachine.h
|
||||||
|
VariableWorker.c
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Includes Section - list of Include locations that are required for
|
||||||
|
# this module.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[Includes]
|
||||||
|
$(WORKSPACE)/MdePkg/Include/Library
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Package Dependency Section - list of Package files that are required for
|
||||||
|
# this module.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[Packages]
|
||||||
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
|
MdePkg/MdePkg.dec
|
||||||
|
IntelFrameworkPkg/IntelFrameworkPkg.dec
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Library Class Section - list of Library Classes that are required for
|
||||||
|
# this module.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[LibraryClasses]
|
||||||
|
BaseMemoryLib
|
||||||
|
PcdLib
|
||||||
|
HobLib
|
||||||
|
PeimEntryPoint
|
||||||
|
DebugLib
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# PPI C Name Section - list of PPI and PPI Notify C Names that this module
|
||||||
|
# uses or produces.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[Ppis]
|
||||||
|
gEfiPeiReadOnlyVariablePpiGuid # PPI ALWAYS_CONSUMED
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Pcd DYNAMIC - list of PCDs that this module is coded for.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
[PcdsDynamic.common]
|
||||||
|
PcdFlashNvStorageVariableBase|gEfiGenericPlatformTokenSpaceGuid
|
||||||
|
|
||||||
|
[depex]
|
||||||
|
TRUE
|
|
@ -0,0 +1,76 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<MsaHeader>
|
||||||
|
<ModuleName>PeiVariable</ModuleName>
|
||||||
|
<ModuleType>PEIM</ModuleType>
|
||||||
|
<GuidValue>34C8C28F-B61C-45a2-8F2E-89E46BECC63B</GuidValue>
|
||||||
|
<Version>1.0</Version>
|
||||||
|
<Abstract>Component description file for PeiVariable module.</Abstract>
|
||||||
|
<Description>Framework PEIM to provide the Variable functionality.</Description>
|
||||||
|
<Copyright>Copyright (c) 2006 - 2007, Intel Corporation</Copyright>
|
||||||
|
<License>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.</License>
|
||||||
|
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
|
||||||
|
</MsaHeader>
|
||||||
|
<ModuleDefinitions>
|
||||||
|
<SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
|
||||||
|
<BinaryModule>false</BinaryModule>
|
||||||
|
<OutputFileBasename>PeiVariable</OutputFileBasename>
|
||||||
|
</ModuleDefinitions>
|
||||||
|
<LibraryClassDefinitions>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>DebugLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>PeimEntryPoint</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>HobLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>PcdLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>BaseMemoryLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
</LibraryClassDefinitions>
|
||||||
|
<SourceFiles>
|
||||||
|
<Filename>Variable.h</Filename>
|
||||||
|
<Filename>Variable.c</Filename>
|
||||||
|
<Filename>Variable.dxs</Filename>
|
||||||
|
<Filename SupArchList="IA32 X64 EBC">VariableWorker.c</Filename>
|
||||||
|
<Filename SupArchList="IPF">Ipf/VariableWorker.c</Filename>
|
||||||
|
<Filename SupArchList="IA32">Ia32/VarMachine.h</Filename>
|
||||||
|
<Filename SupArchList="EBC">Ebc/VarMachine.h</Filename>
|
||||||
|
<Filename SupArchList="X64">x64/VarMachine.h</Filename>
|
||||||
|
<Filename SupArchList="IPF">Ipf/VarMachine.h</Filename>
|
||||||
|
</SourceFiles>
|
||||||
|
<PackageDependencies>
|
||||||
|
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||||
|
<Package PackageGuid="68169ab0-d41b-4009-9060-292c253ac43d"/>
|
||||||
|
</PackageDependencies>
|
||||||
|
<PPIs>
|
||||||
|
<Ppi Usage="ALWAYS_CONSUMED">
|
||||||
|
<PpiCName>gEfiPeiReadOnlyVariablePpiGuid</PpiCName>
|
||||||
|
</Ppi>
|
||||||
|
</PPIs>
|
||||||
|
<Externs>
|
||||||
|
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
|
||||||
|
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
|
||||||
|
<Extern>
|
||||||
|
<ModuleEntryPoint>PeimInitializeVariableServices</ModuleEntryPoint>
|
||||||
|
</Extern>
|
||||||
|
</Externs>
|
||||||
|
<PcdCoded>
|
||||||
|
<PcdEntry PcdItemType="DYNAMIC">
|
||||||
|
<C_Name>PcdFlashNvStorageVariableBase</C_Name>
|
||||||
|
<TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
|
||||||
|
<HelpText>The driver gets the Variable store base address from this PCD. This base address point to
|
||||||
|
an EFI_FIRMWARE_VOLUMN_HEADER struct.</HelpText>
|
||||||
|
</PcdEntry>
|
||||||
|
</PcdCoded>
|
||||||
|
</ModuleSurfaceArea>
|
|
@ -0,0 +1,81 @@
|
||||||
|
/*++
|
||||||
|
|
||||||
|
Copyright (c) 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:
|
||||||
|
|
||||||
|
VariableWorker.c
|
||||||
|
|
||||||
|
Abstract:
|
||||||
|
|
||||||
|
Framework PEIM to provide the Variable functionality
|
||||||
|
|
||||||
|
--*/
|
||||||
|
//
|
||||||
|
// The package level header files this module uses
|
||||||
|
//
|
||||||
|
#include <PiPei.h>
|
||||||
|
|
||||||
|
//
|
||||||
|
// The protocols, PPI and GUID defintions for this module
|
||||||
|
//
|
||||||
|
#include <Ppi/ReadOnlyVariable.h>
|
||||||
|
//
|
||||||
|
// The Library classes this module consumes
|
||||||
|
//
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
|
#include <Library/PeimEntryPoint.h>
|
||||||
|
#include <Library/HobLib.h>
|
||||||
|
#include <Library/PcdLib.h>
|
||||||
|
#include <Library/BaseMemoryLib.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include <Variable.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
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
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return (VARIABLE_HEADER *) (UINTN) (IndexTable->Index[Count] + ((UINTN) IndexTable->StartPtr & 0xFFFF0000));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
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
|
||||||
|
)
|
||||||
|
{
|
||||||
|
IndexTable->Index[IndexTable->Length++] = (UINT16) (UINTN) Variable;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
/**@file
|
||||||
|
Variable Machine Type
|
||||||
|
|
||||||
|
Copyright (c) 2006 - 2007 Intel Corporation. <BR>
|
||||||
|
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 _VAR_MACHINE_H
|
||||||
|
#define _VAR_MACHINE_H
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -429,4 +429,5 @@
|
||||||
${WORKSPACE}/MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteLite/Dxe/FtwLite.inf
|
${WORKSPACE}/MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteLite/Dxe/FtwLite.inf
|
||||||
#${WORKSPACE}/MdeModulePkg/Universal/FirmwareVolume/GuidedSectionExtraction/Crc32SectionExtract/Dxe/Crc32SectionExtract.inf
|
#${WORKSPACE}/MdeModulePkg/Universal/FirmwareVolume/GuidedSectionExtraction/Crc32SectionExtract/Dxe/Crc32SectionExtract.inf
|
||||||
${WORKSPACE}/MdeModulePkg/Bus/Pci/AtapiPassThru/Dxe/AtapiPassThru.inf
|
${WORKSPACE}/MdeModulePkg/Bus/Pci/AtapiPassThru/Dxe/AtapiPassThru.inf
|
||||||
${WORKSPACE}/MdeModulePkg/Universal/WatchDogTimerDxe/WatchDogTimer.inf
|
${WORKSPACE}/MdeModulePkg/Universal/WatchDogTimerDxe/WatchDogTimer.inf
|
||||||
|
#${WORKSPACE}/MdeModulePkg/Universal/VariablePei/Variable.inf
|
Loading…
Reference in New Issue