/** @file | |
The internal header file includes the common header files, defines | |
internal structure and functions used by RuntimeVariable module. | |
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> | |
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 _VARIABLE_H_ | |
#define _VARIABLE_H_ | |
#include <PiDxe.h> | |
#include <Protocol/VariableWrite.h> | |
#include <Protocol/FaultTolerantWrite.h> | |
#include <Protocol/FirmwareVolumeBlock.h> | |
#include <Protocol/Variable.h> | |
#include <Library/PcdLib.h> | |
#include <Library/UefiDriverEntryPoint.h> | |
#include <Library/DxeServicesTableLib.h> | |
#include <Library/UefiRuntimeLib.h> | |
#include <Library/DebugLib.h> | |
#include <Library/BaseMemoryLib.h> | |
#include <Library/UefiBootServicesTableLib.h> | |
#include <Library/UefiLib.h> | |
#include <Library/BaseLib.h> | |
#include <Library/SynchronizationLib.h> | |
#include <Library/MemoryAllocationLib.h> | |
#include <Guid/GlobalVariable.h> | |
#include <Guid/EventGroup.h> | |
#include <Guid/VariableFormat.h> | |
#define VARIABLE_RECLAIM_THRESHOLD (1024) | |
/// | |
/// The size of a 3 character ISO639 language code. | |
/// | |
#define ISO_639_2_ENTRY_SIZE 3 | |
typedef struct { | |
VARIABLE_HEADER *CurrPtr; | |
VARIABLE_HEADER *EndPtr; | |
VARIABLE_HEADER *StartPtr; | |
BOOLEAN Volatile; | |
} VARIABLE_POINTER_TRACK; | |
typedef struct { | |
EFI_PHYSICAL_ADDRESS VolatileVariableBase; | |
EFI_PHYSICAL_ADDRESS NonVolatileVariableBase; | |
EFI_LOCK VariableServicesLock; | |
UINT32 ReentrantState; | |
} VARIABLE_GLOBAL; | |
typedef struct { | |
VARIABLE_GLOBAL VariableGlobal; | |
UINTN VolatileLastVariableOffset; | |
UINTN NonVolatileLastVariableOffset; | |
UINTN CommonVariableTotalSize; | |
UINTN HwErrVariableTotalSize; | |
CHAR8 *PlatformLangCodes; | |
CHAR8 *LangCodes; | |
CHAR8 *PlatformLang; | |
CHAR8 Lang[ISO_639_2_ENTRY_SIZE + 1]; | |
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvbInstance; | |
} VARIABLE_MODULE_GLOBAL; | |
typedef struct { | |
EFI_GUID *Guid; | |
CHAR16 *Name; | |
UINT32 Attributes; | |
UINTN DataSize; | |
VOID *Data; | |
} VARIABLE_CACHE_ENTRY; | |
/** | |
Writes a buffer to variable storage space, in the working block. | |
This function writes a buffer to variable storage space into firmware | |
volume block device. The destination is specified by parameter | |
VariableBase. Fault Tolerant Write protocol is used for writing. | |
@param VariableBase Base address of variable to write | |
@param Buffer Point to the data buffer | |
@param BufferSize The number of bytes of the data Buffer | |
@retval EFI_SUCCESS The function completed successfully | |
@retval EFI_NOT_FOUND Fail to locate Fault Tolerant Write protocol | |
@retval EFI_ABORTED The function could not complete successfully | |
**/ | |
EFI_STATUS | |
FtwVariableSpace ( | |
IN EFI_PHYSICAL_ADDRESS VariableBase, | |
IN UINT8 *Buffer, | |
IN UINTN BufferSize | |
); | |
#endif |