14#include <Protocol/VariableWrite.h>
15#include <Protocol/FaultTolerantWrite.h>
16#include <Protocol/FirmwareVolumeBlock.h>
17#include <Protocol/Variable.h>
18#include <Protocol/VariableLock.h>
19#include <Protocol/VarCheck.h>
20#include <Library/PcdLib.h>
21#include <Library/HobLib.h>
22#include <Library/UefiDriverEntryPoint.h>
23#include <Library/DxeServicesTableLib.h>
24#include <Library/UefiRuntimeLib.h>
25#include <Library/DebugLib.h>
26#include <Library/BaseMemoryLib.h>
27#include <Library/UefiBootServicesTableLib.h>
28#include <Library/UefiLib.h>
29#include <Library/BaseLib.h>
30#include <Library/SynchronizationLib.h>
31#include <Library/MemoryAllocationLib.h>
32#include <Library/AuthVariableLib.h>
33#include <Library/VarCheckLib.h>
34#include <Guid/GlobalVariable.h>
35#include <Guid/EventGroup.h>
36#include <Guid/VariableFormat.h>
37#include <Guid/SystemNvDataGuid.h>
38#include <Guid/FaultTolerantWrite.h>
39#include <Guid/VarErrorFlag.h>
43#define NV_STORAGE_VARIABLE_BASE (EFI_PHYSICAL_ADDRESS)\
44 (PcdGet64 (PcdFlashNvStorageVariableBase64) != 0 ? \
45 PcdGet64 (PcdFlashNvStorageVariableBase64) : \
46 PcdGet32 (PcdFlashNvStorageVariableBase))
48#define EFI_VARIABLE_ATTRIBUTES_MASK (EFI_VARIABLE_NON_VOLATILE |\
49 EFI_VARIABLE_BOOTSERVICE_ACCESS | \
50 EFI_VARIABLE_RUNTIME_ACCESS | \
51 EFI_VARIABLE_HARDWARE_ERROR_RECORD | \
52 EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS | \
53 EFI_VARIABLE_APPEND_WRITE)
58#define ISO_639_2_ENTRY_SIZE 3
138 IN CHAR16 *VariableName,
139 IN EFI_GUID *VendorGuid
159 IN EFI_PHYSICAL_ADDRESS VariableBase,
160 IN VARIABLE_STORE_HEADER *VariableBuffer
191 IN CHAR16 *VariableName,
192 IN EFI_GUID *VendorGuid,
195 IN BOOLEAN IgnoreRtCheck
221 IN UINT32 Attributes,
246 IN CHAR16 *VariableName,
247 IN EFI_GUID *VendorGuid,
250 IN UINT32 Attributes OPTIONAL,
251 IN UINT32 KeyIndex OPTIONAL,
252 IN UINT64 MonotonicCount OPTIONAL,
285 IN OUT EFI_LOCK *Lock,
337 IN EFI_HANDLE FvBlockHandle,
338 OUT EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL **FvBlock
358 OUT UINTN *NumberHandles,
418 OUT VOID **FtwProtocol
431 IN EFI_PHYSICAL_ADDRESS Address,
432 OUT EFI_HANDLE *FvbHandle OPTIONAL,
433 OUT EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL **FvbProtocol OPTIONAL
461 IN CHAR16 *VariableName,
462 IN EFI_GUID *VendorGuid,
463 OUT UINT32 *Attributes OPTIONAL,
464 IN OUT UINTN *DataSize,
465 OUT VOID *Data OPTIONAL
496 IN OUT UINTN *VariableNameSize,
497 IN OUT CHAR16 *VariableName,
498 IN OUT EFI_GUID *VendorGuid
529 IN CHAR16 *VariableName,
530 IN EFI_GUID *VendorGuid,
531 IN UINT32 Attributes,
558 IN UINT32 Attributes,
559 OUT UINT64 *MaximumVariableStorageSize,
560 OUT UINT64 *RemainingVariableStorageSize,
561 OUT UINT64 *MaximumVariableSize
588 IN UINT32 Attributes,
589 OUT UINT64 *MaximumVariableStorageSize,
590 OUT UINT64 *RemainingVariableStorageSize,
591 OUT UINT64 *MaximumVariableSize
612 IN CONST EDKII_VARIABLE_LOCK_PROTOCOL *This,
613 IN CHAR16 *VariableName,
614 IN EFI_GUID *VendorGuid
634 IN VAR_CHECK_SET_VARIABLE_CHECK_HANDLER Handler
657 IN VAR_CHECK_VARIABLE_PROPERTY *VariableProperty
677 OUT VAR_CHECK_VARIABLE_PROPERTY *VariableProperty
719 IN CHAR16 *VariableName,
720 IN EFI_GUID *VendorGuid,
721 OUT AUTH_VARIABLE_INFO *AuthVariableInfo
745 IN CHAR16 *VariableName,
746 IN EFI_GUID *VendorGuid,
747 OUT AUTH_VARIABLE_INFO *AuthVariableInfo
765 IN AUTH_VARIABLE_INFO *AuthVariableInfo
783 IN OUT UINTN *ScratchBufferSize,
784 OUT VOID **ScratchBuffer
809 IN UINT32 Attributes,
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
EFI_FIRMWARE_VOLUME_HEADER * mNvFvHeaderCache
VARIABLE_INFO_ENTRY * gVariableInfo
EFI_STATUS GetFvbByHandle(IN EFI_HANDLE FvBlockHandle, OUT EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL **FvBlock)
EFI_LOCK * InitializeLock(IN OUT EFI_LOCK *Lock, IN EFI_TPL Priority)
UINTN GetMaxVariableSize(VOID)
EFI_STATUS EFIAPI VariableServiceGetVariable(IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, OUT UINT32 *Attributes OPTIONAL, IN OUT UINTN *DataSize, OUT VOID *Data OPTIONAL)
EFI_STATUS EFIAPI VarCheckVariablePropertySet(IN CHAR16 *Name, IN EFI_GUID *Guid, IN VAR_CHECK_VARIABLE_PROPERTY *VariableProperty)
EFI_STATUS EFIAPI VariableExLibGetScratchBuffer(IN OUT UINTN *ScratchBufferSize, OUT VOID **ScratchBuffer)
AUTH_VAR_LIB_CONTEXT_OUT mAuthContextOut
EFI_STATUS EFIAPI VariableLockRequestToLock(IN CONST EDKII_VARIABLE_LOCK_PROTOCOL *This, IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid)
VOID InitializeVariableQuota(VOID)
EFI_STATUS EFIAPI VarCheckRegisterSetVariableCheckHandler(IN VAR_CHECK_SET_VARIABLE_CHECK_HANDLER Handler)
EFI_STATUS EFIAPI VarCheckVariablePropertyGet(IN CHAR16 *Name, IN EFI_GUID *Guid, OUT VAR_CHECK_VARIABLE_PROPERTY *VariableProperty)
#define ISO_639_2_ENTRY_SIZE
@ VariableStoreTypeVolatile
BOOLEAN EFIAPI CheckRemainingSpaceForConsistencyInternal(IN UINT32 Attributes, IN VA_LIST Marker)
VARIABLE_STORE_HEADER * mNvVariableCache
EFI_STATUS VariableWriteServiceInitialize(VOID)
EFI_STATUS UpdateVariable(IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, IN VOID *Data, IN UINTN DataSize, IN UINT32 Attributes OPTIONAL, IN UINT32 KeyIndex OPTIONAL, IN UINT64 MonotonicCount OPTIONAL, IN OUT VARIABLE_POINTER_TRACK *Variable, IN EFI_TIME *TimeStamp OPTIONAL)
EFI_STATUS VariableCommonInitialize(VOID)
VOID ReleaseLockOnlyAtBootTime(IN EFI_LOCK *Lock)
BOOLEAN EFIAPI VariableExLibAtRuntime(VOID)
BOOLEAN EFIAPI VariableExLibCheckRemainingSpaceForConsistency(IN UINT32 Attributes,...)
VOID AcquireLockOnlyAtBootTime(IN EFI_LOCK *Lock)
EFI_STATUS EFIAPI VariableServiceGetNextVariableName(IN OUT UINTN *VariableNameSize, IN OUT CHAR16 *VariableName, IN OUT EFI_GUID *VendorGuid)
EFI_STATUS FindVariable(IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, OUT VARIABLE_POINTER_TRACK *PtrTrack, IN VARIABLE_GLOBAL *Global, IN BOOLEAN IgnoreRtCheck)
VAR_CHECK_REQUEST_SOURCE mRequestSource
EFI_STATUS EFIAPI VariableServiceQueryVariableInfo(IN UINT32 Attributes, OUT UINT64 *MaximumVariableStorageSize, OUT UINT64 *RemainingVariableStorageSize, OUT UINT64 *MaximumVariableSize)
EFI_STATUS GetFvbInfoByAddress(IN EFI_PHYSICAL_ADDRESS Address, OUT EFI_HANDLE *FvbHandle OPTIONAL, OUT EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL **FvbProtocol OPTIONAL)
EFI_STATUS GetFtwProtocol(OUT VOID **FtwProtocol)
EFI_STATUS GetFvbCountAndBuffer(OUT UINTN *NumberHandles, OUT EFI_HANDLE **Buffer)
VOID FlushHobVariableToFlash(IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid)
EFI_STATUS EFIAPI VariableServiceQueryVariableInfoInternal(IN UINT32 Attributes, OUT UINT64 *MaximumVariableStorageSize, OUT UINT64 *RemainingVariableStorageSize, OUT UINT64 *MaximumVariableSize)
EFI_STATUS EFIAPI VariableExLibFindVariable(IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, OUT AUTH_VARIABLE_INFO *AuthVariableInfo)
VARIABLE_MODULE_GLOBAL * mVariableModuleGlobal
EFI_STATUS EFIAPI VariableExLibUpdateVariable(IN AUTH_VARIABLE_INFO *AuthVariableInfo)
EFI_STATUS EFIAPI VariableServiceSetVariable(IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, IN UINT32 Attributes, IN UINTN DataSize, IN VOID *Data)
EFI_STATUS EFIAPI VariableExLibFindNextVariable(IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, OUT AUTH_VARIABLE_INFO *AuthVariableInfo)
EFI_STATUS FtwVariableSpace(IN EFI_PHYSICAL_ADDRESS VariableBase, IN VARIABLE_STORE_HEADER *VariableBuffer)
EFI_PHYSICAL_ADDRESS VolatileVariableBase
VARIABLE_RUNTIME_CACHE_CONTEXT VariableRuntimeCacheContext
EFI_LOCK VariableServicesLock
EFI_PHYSICAL_ADDRESS NonVolatileVariableBase
EFI_PHYSICAL_ADDRESS HobVariableBase
VARIABLE_GLOBAL VariableGlobal
UINTN HwErrVariableTotalSize
CHAR8 * PlatformLangCodes
UINTN CommonVariableTotalSize
UINTN NonVolatileLastVariableOffset
UINTN CommonUserVariableTotalSize
UINTN VolatileLastVariableOffset
UINTN MaxVolatileVariableSize
UINTN MaxAuthVariableSize
UINTN CommonMaxUserVariableSpace
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * FvbInstance
UINTN CommonRuntimeVariableSpace
UINTN CommonVariableSpace
VARIABLE_HEADER * CurrPtr
VARIABLE_HEADER * InDeletedTransitionPtr
VARIABLE_HEADER * StartPtr
VARIABLE_RUNTIME_CACHE VariableRuntimeVolatileCache
VARIABLE_RUNTIME_CACHE VariableRuntimeNvCache
BOOLEAN * HobFlushComplete
VARIABLE_RUNTIME_CACHE VariableRuntimeHobCache
UINT32 PendingUpdateOffset
UINT32 PendingUpdateLength
VARIABLE_STORE_HEADER * Store