OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
Variable.h
Go to the documentation of this file.
1
10#ifndef _VARIABLE_H_
11#define _VARIABLE_H_
12
13#include <PiDxe.h>
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>
40
42
43#define NV_STORAGE_VARIABLE_BASE (EFI_PHYSICAL_ADDRESS)\
44 (PcdGet64 (PcdFlashNvStorageVariableBase64) != 0 ? \
45 PcdGet64 (PcdFlashNvStorageVariableBase64) : \
46 PcdGet32 (PcdFlashNvStorageVariableBase))
47
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)
54
58#define ISO_639_2_ENTRY_SIZE 3
59
66
67typedef struct {
70 VARIABLE_STORE_HEADER *Store;
72
81
82typedef struct {
83 VARIABLE_HEADER *CurrPtr;
84 //
85 // If both ADDED and IN_DELETED_TRANSITION variable are present,
86 // InDeletedTransitionPtr will point to the IN_DELETED_TRANSITION one.
87 // Otherwise, CurrPtr will point to the ADDED or IN_DELETED_TRANSITION one,
88 // and InDeletedTransitionPtr will be NULL at the same time.
89 //
90 VARIABLE_HEADER *InDeletedTransitionPtr;
91 VARIABLE_HEADER *EndPtr;
92 VARIABLE_HEADER *StartPtr;
93 BOOLEAN Volatile;
95
107
128
136VOID
138 IN CHAR16 *VariableName,
139 IN EFI_GUID *VendorGuid
140 );
141
157EFI_STATUS
159 IN EFI_PHYSICAL_ADDRESS VariableBase,
160 IN VARIABLE_STORE_HEADER *VariableBuffer
161 );
162
189EFI_STATUS
191 IN CHAR16 *VariableName,
192 IN EFI_GUID *VendorGuid,
193 OUT VARIABLE_POINTER_TRACK *PtrTrack,
194 IN VARIABLE_GLOBAL *Global,
195 IN BOOLEAN IgnoreRtCheck
196 );
197
218BOOLEAN
219EFIAPI
221 IN UINT32 Attributes,
222 IN VA_LIST Marker
223 );
224
244EFI_STATUS
246 IN CHAR16 *VariableName,
247 IN EFI_GUID *VendorGuid,
248 IN VOID *Data,
249 IN UINTN DataSize,
250 IN UINT32 Attributes OPTIONAL,
251 IN UINT32 KeyIndex OPTIONAL,
252 IN UINT64 MonotonicCount OPTIONAL,
253 IN OUT VARIABLE_POINTER_TRACK *Variable,
254 IN EFI_TIME *TimeStamp OPTIONAL
255 );
256
262BOOLEAN
263AtRuntime (
264 VOID
265 );
266
283EFI_LOCK *
285 IN OUT EFI_LOCK *Lock,
286 IN EFI_TPL Priority
287 );
288
301VOID
303 IN EFI_LOCK *Lock
304 );
305
318VOID
320 IN EFI_LOCK *Lock
321 );
322
335EFI_STATUS
337 IN EFI_HANDLE FvBlockHandle,
338 OUT EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL **FvBlock
339 );
340
356EFI_STATUS
358 OUT UINTN *NumberHandles,
359 OUT EFI_HANDLE **Buffer
360 );
361
369EFI_STATUS
371 VOID
372 );
373
378VOID
380 VOID
381 );
382
389UINTN
391 VOID
392 );
393
401EFI_STATUS
403 VOID
404 );
405
416EFI_STATUS
418 OUT VOID **FtwProtocol
419 );
420
429EFI_STATUS
431 IN EFI_PHYSICAL_ADDRESS Address,
432 OUT EFI_HANDLE *FvbHandle OPTIONAL,
433 OUT EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL **FvbProtocol OPTIONAL
434 );
435
458EFI_STATUS
459EFIAPI
461 IN CHAR16 *VariableName,
462 IN EFI_GUID *VendorGuid,
463 OUT UINT32 *Attributes OPTIONAL,
464 IN OUT UINTN *DataSize,
465 OUT VOID *Data OPTIONAL
466 );
467
493EFI_STATUS
494EFIAPI
496 IN OUT UINTN *VariableNameSize,
497 IN OUT CHAR16 *VariableName,
498 IN OUT EFI_GUID *VendorGuid
499 );
500
526EFI_STATUS
527EFIAPI
529 IN CHAR16 *VariableName,
530 IN EFI_GUID *VendorGuid,
531 IN UINT32 Attributes,
532 IN UINTN DataSize,
533 IN VOID *Data
534 );
535
555EFI_STATUS
556EFIAPI
558 IN UINT32 Attributes,
559 OUT UINT64 *MaximumVariableStorageSize,
560 OUT UINT64 *RemainingVariableStorageSize,
561 OUT UINT64 *MaximumVariableSize
562 );
563
585EFI_STATUS
586EFIAPI
588 IN UINT32 Attributes,
589 OUT UINT64 *MaximumVariableStorageSize,
590 OUT UINT64 *RemainingVariableStorageSize,
591 OUT UINT64 *MaximumVariableSize
592 );
593
609EFI_STATUS
610EFIAPI
612 IN CONST EDKII_VARIABLE_LOCK_PROTOCOL *This,
613 IN CHAR16 *VariableName,
614 IN EFI_GUID *VendorGuid
615 );
616
631EFI_STATUS
632EFIAPI
634 IN VAR_CHECK_SET_VARIABLE_CHECK_HANDLER Handler
635 );
636
652EFI_STATUS
653EFIAPI
655 IN CHAR16 *Name,
656 IN EFI_GUID *Guid,
657 IN VAR_CHECK_VARIABLE_PROPERTY *VariableProperty
658 );
659
672EFI_STATUS
673EFIAPI
675 IN CHAR16 *Name,
676 IN EFI_GUID *Guid,
677 OUT VAR_CHECK_VARIABLE_PROPERTY *VariableProperty
678 );
679
684VOID
686 VOID
687 );
688
690extern EFI_FIRMWARE_VOLUME_HEADER *mNvFvHeaderCache;
691extern VARIABLE_STORE_HEADER *mNvVariableCache;
692extern VARIABLE_INFO_ENTRY *gVariableInfo;
693extern BOOLEAN mEndOfDxe;
694extern VAR_CHECK_REQUEST_SOURCE mRequestSource;
695
696extern AUTH_VAR_LIB_CONTEXT_OUT mAuthContextOut;
697
716EFI_STATUS
717EFIAPI
719 IN CHAR16 *VariableName,
720 IN EFI_GUID *VendorGuid,
721 OUT AUTH_VARIABLE_INFO *AuthVariableInfo
722 );
723
742EFI_STATUS
743EFIAPI
745 IN CHAR16 *VariableName,
746 IN EFI_GUID *VendorGuid,
747 OUT AUTH_VARIABLE_INFO *AuthVariableInfo
748 );
749
762EFI_STATUS
763EFIAPI
765 IN AUTH_VARIABLE_INFO *AuthVariableInfo
766 );
767
780EFI_STATUS
781EFIAPI
783 IN OUT UINTN *ScratchBufferSize,
784 OUT VOID **ScratchBuffer
785 );
786
806BOOLEAN
807EFIAPI
809 IN UINT32 Attributes,
810 ...
811 );
812
820BOOLEAN
821EFIAPI
823 VOID
824 );
825
826#endif
CHAR16 TimeStamp[10]
Definition BiosId.h:49
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
Definition OcTypingLib.h:42
EFI_FIRMWARE_VOLUME_HEADER * mNvFvHeaderCache
Definition Variable.c:46
BOOLEAN mEndOfDxe
Definition Variable.c:56
VARIABLE_INFO_ENTRY * gVariableInfo
Definition Variable.c:51
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)
Definition Variable.c:3268
EFI_STATUS EFIAPI VariableServiceGetVariable(IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, OUT UINT32 *Attributes OPTIONAL, IN OUT UINTN *DataSize, OUT VOID *Data OPTIONAL)
Definition Variable.c:2435
EFI_STATUS EFIAPI VarCheckVariablePropertySet(IN CHAR16 *Name, IN EFI_GUID *Guid, IN VAR_CHECK_VARIABLE_PROPERTY *VariableProperty)
Definition VarCheck.c:59
EFI_STATUS EFIAPI VariableExLibGetScratchBuffer(IN OUT UINTN *ScratchBufferSize, OUT VOID **ScratchBuffer)
AUTH_VAR_LIB_CONTEXT_OUT mAuthContextOut
Definition Variable.c:101
EFI_STATUS EFIAPI VariableLockRequestToLock(IN CONST EDKII_VARIABLE_LOCK_PROTOCOL *This, IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid)
BOOLEAN AtRuntime(VOID)
Definition VariableDxe.c:77
VOID InitializeVariableQuota(VOID)
Definition Variable.c:490
EFI_STATUS EFIAPI VarCheckRegisterSetVariableCheckHandler(IN VAR_CHECK_SET_VARIABLE_CHECK_HANDLER Handler)
Definition VarCheck.c:29
EFI_STATUS EFIAPI VarCheckVariablePropertyGet(IN CHAR16 *Name, IN EFI_GUID *Guid, OUT VAR_CHECK_VARIABLE_PROPERTY *VariableProperty)
Definition VarCheck.c:88
#define ISO_639_2_ENTRY_SIZE
Definition Variable.h:58
VARIABLE_STORE_TYPE
Definition Variable.h:60
@ VariableStoreTypeNv
Definition Variable.h:63
@ VariableStoreTypeVolatile
Definition Variable.h:61
@ VariableStoreTypeHob
Definition Variable.h:62
@ VariableStoreTypeMax
Definition Variable.h:64
BOOLEAN EFIAPI CheckRemainingSpaceForConsistencyInternal(IN UINT32 Attributes, IN VA_LIST Marker)
Definition Variable.c:1242
VARIABLE_STORE_HEADER * mNvVariableCache
Definition Variable.c:41
EFI_STATUS VariableWriteServiceInitialize(VOID)
Definition Variable.c:3426
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)
Definition Variable.c:1680
VOID ReclaimForOS(VOID)
Definition Variable.c:3213
EFI_STATUS VariableCommonInitialize(VOID)
Definition Variable.c:3714
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)
Definition Variable.c:2525
EFI_STATUS FindVariable(IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, OUT VARIABLE_POINTER_TRACK *PtrTrack, IN VARIABLE_GLOBAL *Global, IN BOOLEAN IgnoreRtCheck)
Definition Variable.c:853
VAR_CHECK_REQUEST_SOURCE mRequestSource
Definition Variable.c:62
EFI_STATUS EFIAPI VariableServiceQueryVariableInfo(IN UINT32 Attributes, OUT UINT64 *MaximumVariableStorageSize, OUT UINT64 *RemainingVariableStorageSize, OUT UINT64 *MaximumVariableSize)
Definition Variable.c:3131
EFI_STATUS GetFvbInfoByAddress(IN EFI_PHYSICAL_ADDRESS Address, OUT EFI_HANDLE *FvbHandle OPTIONAL, OUT EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL **FvbProtocol OPTIONAL)
Definition Variable.c:3822
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)
Definition Variable.c:3294
EFI_STATUS EFIAPI VariableServiceQueryVariableInfoInternal(IN UINT32 Attributes, OUT UINT64 *MaximumVariableStorageSize, OUT UINT64 *RemainingVariableStorageSize, OUT UINT64 *MaximumVariableSize)
Definition Variable.c:2951
EFI_STATUS EFIAPI VariableExLibFindVariable(IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, OUT AUTH_VARIABLE_INFO *AuthVariableInfo)
VARIABLE_MODULE_GLOBAL * mVariableModuleGlobal
Definition Variable.c:35
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)
Definition Variable.c:2627
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)
Definition Reclaim.c:104
BOOLEAN AuthFormat
Definition Variable.h:103
EFI_PHYSICAL_ADDRESS VolatileVariableBase
Definition Variable.h:98
VARIABLE_RUNTIME_CACHE_CONTEXT VariableRuntimeCacheContext
Definition Variable.h:100
BOOLEAN EmuNvMode
Definition Variable.h:105
UINT32 ReentrantState
Definition Variable.h:102
EFI_LOCK VariableServicesLock
Definition Variable.h:101
BOOLEAN AuthSupport
Definition Variable.h:104
EFI_PHYSICAL_ADDRESS NonVolatileVariableBase
Definition Variable.h:99
EFI_PHYSICAL_ADDRESS HobVariableBase
Definition Variable.h:97
VARIABLE_GLOBAL VariableGlobal
Definition Variable.h:109
UINTN NonVolatileLastVariableOffset
Definition Variable.h:111
UINTN CommonUserVariableTotalSize
Definition Variable.h:116
UINTN VolatileLastVariableOffset
Definition Variable.h:110
UINTN CommonMaxUserVariableSpace
Definition Variable.h:113
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * FvbInstance
Definition Variable.h:126
UINTN CommonRuntimeVariableSpace
Definition Variable.h:114
VARIABLE_HEADER * CurrPtr
Definition Variable.h:83
VARIABLE_HEADER * EndPtr
Definition Variable.h:91
VARIABLE_HEADER * InDeletedTransitionPtr
Definition Variable.h:90
VARIABLE_HEADER * StartPtr
Definition Variable.h:92
VARIABLE_RUNTIME_CACHE VariableRuntimeVolatileCache
Definition Variable.h:79
VARIABLE_RUNTIME_CACHE VariableRuntimeNvCache
Definition Variable.h:78
VARIABLE_RUNTIME_CACHE VariableRuntimeHobCache
Definition Variable.h:77
VARIABLE_STORE_HEADER * Store
Definition Variable.h:70