OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
VariableDxe.c
Go to the documentation of this file.
1
17#include "Variable.h"
18
19#include <Protocol/VariablePolicy.h>
20#include <Library/VariablePolicyLib.h>
21
22EFI_STATUS
23EFIAPI
25 OUT BOOLEAN *State
26 );
27
28EFI_HANDLE mHandle = NULL;
30VOID *mFtwRegistration = NULL;
33EDKII_VARIABLE_LOCK_PROTOCOL mVariableLock = { VariableLockRequestToLock };
34EDKII_VARIABLE_POLICY_PROTOCOL mVariablePolicyProtocol = {
35 EDKII_VARIABLE_POLICY_PROTOCOL_REVISION,
36 DisableVariablePolicy,
38 RegisterVariablePolicy,
39 DumpVariablePolicy,
40 LockVariablePolicy
41};
47
48STATIC EFI_GUID mAcpiGlobalVariableGuid = {
49 0xAF9FFD67, 0xEC10, 0x488A, { 0x9D, 0xFC, 0x6C, 0xBF, 0x5E, 0xE2, 0x2C, 0x2E }
50};
51
52STATIC
53VOID *
55
56STATIC
57UINT32
59
65VOID
66EFIAPI
68 VOID
69 );
70
76BOOLEAN
78 VOID
79 )
80{
81 return EfiAtRuntime ();
82}
83
100EFI_LOCK *
102 IN OUT EFI_LOCK *Lock,
103 IN EFI_TPL Priority
104 )
105{
106 return EfiInitializeLock (Lock, Priority);
107}
108
121VOID
123 IN EFI_LOCK *Lock
124 )
125{
126 if (!AtRuntime ()) {
127 EfiAcquireLock (Lock);
128 }
129}
130
143VOID
145 IN EFI_LOCK *Lock
146 )
147{
148 if (!AtRuntime ()) {
149 EfiReleaseLock (Lock);
150 }
151}
152
163EFI_STATUS
165 OUT VOID **FtwProtocol
166 )
167{
168 EFI_STATUS Status;
169
170 //
171 // Locate Fault Tolerent Write protocol
172 //
173 Status = gBS->LocateProtocol (
174 &gEfiFaultTolerantWriteProtocolGuid,
175 NULL,
176 FtwProtocol
177 );
178 return Status;
179}
180
193EFI_STATUS
195 IN EFI_HANDLE FvBlockHandle,
196 OUT EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL **FvBlock
197 )
198{
199 //
200 // To get the FVB protocol interface on the handle
201 //
202 return gBS->HandleProtocol (
203 FvBlockHandle,
204 &gEfiFirmwareVolumeBlockProtocolGuid,
205 (VOID **)FvBlock
206 );
207}
208
224EFI_STATUS
226 OUT UINTN *NumberHandles,
227 OUT EFI_HANDLE **Buffer
228 )
229{
230 EFI_STATUS Status;
231
232 //
233 // Locate all handles of Fvb protocol
234 //
235 Status = gBS->LocateHandleBuffer (
236 ByProtocol,
237 &gEfiFirmwareVolumeBlockProtocolGuid,
238 NULL,
239 NumberHandles,
240 Buffer
241 );
242 return Status;
243}
244
255VOID
256EFIAPI
258 IN EFI_EVENT Event,
259 IN VOID *Context
260 )
261{
262 UINTN Index;
263
264 if (mVariableModuleGlobal->FvbInstance != NULL) {
265 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->FvbInstance->GetBlockSize);
266 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->FvbInstance->GetPhysicalAddress);
267 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->FvbInstance->GetAttributes);
268 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->FvbInstance->SetAttributes);
269 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->FvbInstance->Read);
270 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->FvbInstance->Write);
271 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->FvbInstance->EraseBlocks);
272 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->FvbInstance);
273 }
274
275 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->PlatformLangCodes);
276 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->LangCodes);
277 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->PlatformLang);
278 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->VariableGlobal.NonVolatileVariableBase);
279 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->VariableGlobal.VolatileVariableBase);
280 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal->VariableGlobal.HobVariableBase);
281 EfiConvertPointer (0x0, (VOID **)&mVariableModuleGlobal);
282 EfiConvertPointer (0x0, (VOID **)&mNvVariableCache);
283 EfiConvertPointer (0x0, (VOID **)&mNvFvHeaderCache);
284
285 if (mAuthContextOut.AddressPointer != NULL) {
286 for (Index = 0; Index < mAuthContextOut.AddressPointerCount; Index++) {
287 EfiConvertPointer (0x0, (VOID **)mAuthContextOut.AddressPointer[Index]);
288 }
289 }
290
291 if (mVarCheckAddressPointer != NULL) {
292 for (Index = 0; Index < mVarCheckAddressPointerCount; Index++) {
293 EfiConvertPointer (0x0, (VOID **)mVarCheckAddressPointer[Index]);
294 }
295 }
296}
297
309VOID
310EFIAPI
312 EFI_EVENT Event,
313 VOID *Context
314 )
315{
316 EFI_STATUS Status;
317
318 if (!mEndOfDxe) {
320
321 Status = LockVariablePolicy ();
322 ASSERT_EFI_ERROR (Status);
323 //
324 // Set the End Of DXE bit in case the EFI_END_OF_DXE_EVENT_GROUP_GUID event is not signaled.
325 //
326 mEndOfDxe = TRUE;
327 mVarCheckAddressPointer = VarCheckLibInitializeAtEndOfDxe (&mVarCheckAddressPointerCount);
328 //
329 // The initialization for variable quota.
330 //
332 }
333
334 ReclaimForOS ();
335 if (FeaturePcdGet (PcdVariableCollectStatistics)) {
337 gBS->InstallConfigurationTable (&gEfiAuthenticatedVariableGuid, gVariableInfo);
338 } else {
339 gBS->InstallConfigurationTable (&gEfiVariableGuid, gVariableInfo);
340 }
341 }
342
343 gBS->CloseEvent (Event);
344}
345
355VOID
356EFIAPI
358 EFI_EVENT Event,
359 VOID *Context
360 )
361{
362 EFI_STATUS Status;
363
364 DEBUG ((DEBUG_INFO, "[Variable]END_OF_DXE is signaled\n"));
366 Status = LockVariablePolicy ();
367 ASSERT_EFI_ERROR (Status);
368 mEndOfDxe = TRUE;
369 mVarCheckAddressPointer = VarCheckLibInitializeAtEndOfDxe (&mVarCheckAddressPointerCount);
370 //
371 // The initialization for variable quota.
372 //
374 if (PcdGetBool (PcdReclaimVariableSpaceAtEndOfDxe)) {
375 ReclaimForOS ();
376 }
377
378 gBS->CloseEvent (Event);
379}
380
385VOID
387 VOID
388 )
389{
390 EFI_STATUS Status;
391
393 if (EFI_ERROR (Status)) {
394 DEBUG ((DEBUG_ERROR, "Variable write service initialization failed. Status = %r\n", Status));
395 }
396
397 //
398 // Some Secure Boot Policy Var (SecureBoot, etc) updates following other
399 // Secure Boot Policy Variable change. Record their initial value.
400 //
402
403 //
404 // Install the Variable Write Architectural protocol.
405 //
406 Status = gBS->InstallProtocolInterface (
407 &mHandle,
408 &gEfiVariableWriteArchProtocolGuid,
409 EFI_NATIVE_INTERFACE,
410 NULL
411 );
412
413 ASSERT_EFI_ERROR (Status);
414}
415
426VOID
427EFIAPI
429 IN EFI_EVENT Event,
430 IN VOID *Context
431 )
432{
433 EFI_STATUS Status;
434 EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvbProtocol;
435 EFI_FAULT_TOLERANT_WRITE_PROTOCOL *FtwProtocol;
436 EFI_PHYSICAL_ADDRESS NvStorageVariableBase;
437 EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor;
438 EFI_PHYSICAL_ADDRESS BaseAddress;
439 UINT64 Length;
440 EFI_PHYSICAL_ADDRESS VariableStoreBase;
441 UINT64 VariableStoreLength;
442 UINTN FtwMaxBlockSize;
443
444 //
445 // Ensure FTW protocol is installed.
446 //
447 Status = GetFtwProtocol ((VOID **)&FtwProtocol);
448 if (EFI_ERROR (Status)) {
449 return;
450 }
451
452 Status = FtwProtocol->GetMaxBlockSize (FtwProtocol, &FtwMaxBlockSize);
453 if (!EFI_ERROR (Status)) {
454 ASSERT (PcdGet32 (PcdFlashNvStorageVariableSize) <= FtwMaxBlockSize);
455 }
456
457 NvStorageVariableBase = NV_STORAGE_VARIABLE_BASE;
458 VariableStoreBase = NvStorageVariableBase + mNvFvHeaderCache->HeaderLength;
459
460 //
461 // Let NonVolatileVariableBase point to flash variable store base directly after FTW ready.
462 //
464
465 //
466 // Find the proper FVB protocol for variable.
467 //
468 Status = GetFvbInfoByAddress (NvStorageVariableBase, NULL, &FvbProtocol);
469 if (EFI_ERROR (Status)) {
470 return;
471 }
472
473 mVariableModuleGlobal->FvbInstance = FvbProtocol;
474
475 //
476 // Mark the variable storage region of the FLASH as RUNTIME.
477 //
478 VariableStoreLength = mNvVariableCache->Size;
479 BaseAddress = VariableStoreBase & (~EFI_PAGE_MASK);
480 Length = VariableStoreLength + (VariableStoreBase - BaseAddress);
481 Length = (Length + EFI_PAGE_SIZE - 1) & (~EFI_PAGE_MASK);
482
483 Status = gDS->GetMemorySpaceDescriptor (BaseAddress, &GcdDescriptor);
484 if (EFI_ERROR (Status)) {
485 DEBUG ((DEBUG_WARN, "Variable driver failed to get flash memory attribute.\n"));
486 } else {
487 if ((GcdDescriptor.Attributes & EFI_MEMORY_RUNTIME) == 0) {
488 Status = gDS->SetMemorySpaceAttributes (
489 BaseAddress,
490 Length,
491 GcdDescriptor.Attributes | EFI_MEMORY_RUNTIME
492 );
493 if (EFI_ERROR (Status)) {
494 DEBUG ((DEBUG_WARN, "Variable driver failed to add EFI_MEMORY_RUNTIME attribute to Flash.\n"));
495 }
496 }
497 }
498
499 //
500 // Initializes variable write service after FTW was ready.
501 //
503
504 //
505 // Close the notify event to avoid install gEfiVariableWriteArchProtocolGuid again.
506 //
507 gBS->CloseEvent (Event);
508}
509
521EFI_STATUS
522EFIAPI
524 OUT BOOLEAN *State
525 )
526{
527 *State = IsVariablePolicyEnabled ();
528 return EFI_SUCCESS;
529}
530
531STATIC
532EFI_STATUS
533EFIAPI
535 IN UINT32 Type,
536 IN EFI_TPL NotifyTpl,
537 IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL,
538 IN CONST VOID *NotifyContext OPTIONAL,
539 IN CONST EFI_GUID *EventGroup OPTIONAL,
540 OUT EFI_EVENT *Event
541 )
542{
543 EFI_STATUS Status;
544
545 Status = EFI_UNSUPPORTED;
546
547 if (Type == EVT_NOTIFY_SIGNAL) {
548 if (CompareGuid (EventGroup, &gEfiEventVirtualAddressChangeGuid)) {
549 Type = EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE;
550 Status = EFI_SUCCESS;
551 }
552 }
553
554 if (EFI_ERROR (Status)) {
555 return Status;
556 }
557
558 return gBS->CreateEvent (
559 Type,
560 NotifyTpl,
561 NotifyFunction,
562 (VOID *)NotifyContext,
563 Event
564 );
565}
566
567STATIC
568VOID
570 IN EFI_SYSTEM_TABLE *SystemTable
571 )
572{
573 EFI_STATUS Status;
574 UINTN DataSize;
575 VOID *Interface;
576
577 Status = gBS->LocateProtocol (&gEfiVariableArchProtocolGuid, NULL, &Interface);
578
579 if (!EFI_ERROR (Status)) {
580 //
581 // If present, we must transfer this into emulated NVRAM in order for wake from S3 sleep to work.
582 //
583 DataSize = sizeof (mAcpiGlobalVariable);
584 Status = SystemTable->RuntimeServices->GetVariable (
585 L"AcpiGlobalVariable",
588 &DataSize,
590 );
591
592 if (EFI_ERROR (Status)) {
593 mAcpiGlobalVariable = NULL;
594 }
595
596 DEBUG ((
597 EFI_ERROR (Status) && Status != EFI_NOT_FOUND ? DEBUG_WARN : DEBUG_INFO,
598 "Existing AcpiGlobalVariable %p 0x%x - %r\n",
601 Status
602 ));
603 }
604}
605
606STATIC
607VOID
609 IN EFI_SYSTEM_TABLE *SystemTable
610 )
611{
612 EFI_STATUS Status;
613
614 if (mAcpiGlobalVariable != NULL) {
615 Status = SystemTable->RuntimeServices->SetVariable (
616 L"AcpiGlobalVariable",
619 sizeof (mAcpiGlobalVariable),
621 );
622
623 DEBUG ((
624 EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_INFO,
625 "Transfer AcpiGlobalVariable to emulated NVRAM - %r\n",
626 Status
627 ));
628 }
629}
630
643EFI_STATUS
644EFIAPI
646 IN EFI_HANDLE ImageHandle,
647 IN EFI_SYSTEM_TABLE *SystemTable
648 )
649{
650 EFI_STATUS Status;
651 EFI_EVENT ReadyToBootEvent;
652 EFI_EVENT EndOfDxeEvent;
653 EFI_CREATE_EVENT_EX OriginalCreateEventEx;
654
655 SaveAcpiGlobalVariable (SystemTable);
656
657 //
658 // Probably worth noting that attempting to remove any pre-existing protocols here
659 // before installing them below seems to cause problems rather than solving them.
660 //
661
662 Status = VariableCommonInitialize ();
663 ASSERT_EFI_ERROR (Status);
664
665 Status = gBS->InstallMultipleProtocolInterfaces (
666 &mHandle,
667 &gEdkiiVariableLockProtocolGuid,
669 NULL
670 );
671 ASSERT_EFI_ERROR (Status);
672
673 Status = gBS->InstallMultipleProtocolInterfaces (
674 &mHandle,
675 &gEdkiiVarCheckProtocolGuid,
676 &mVarCheck,
677 NULL
678 );
679 ASSERT_EFI_ERROR (Status);
680
681 SystemTable->RuntimeServices->GetVariable = VariableServiceGetVariable;
682 SystemTable->RuntimeServices->GetNextVariableName = VariableServiceGetNextVariableName;
683 SystemTable->RuntimeServices->SetVariable = VariableServiceSetVariable;
684 //
685 // Avoid setting UEFI 2.x interface member on EFI 1.x.
686 //
687 // Note 1: It is always desirable to overwrite the value here if it already exists:
688 // we need a consistent runtime variable implementation.
689 //
690 // Note 2: We ignore the theoretical situation where some other spoofer has modified
691 // the gRT header revision but not allocated sufficient space for this method,
692 // since this is a highly theoretical 'problem', and providing a solution for
693 // it over-complicates the code, instead of just over-complicating this comment.
694 //
695 if (SystemTable->RuntimeServices->Hdr.Revision >= EFI_2_00_SYSTEM_TABLE_REVISION) {
696 SystemTable->RuntimeServices->QueryVariableInfo = VariableServiceQueryVariableInfo;
697 }
698
699 //
700 // Now install the Variable Runtime Architectural protocol on a new handle.
701 // When we reinstall this on newer Apple firmware then the three runtime services functions
702 // above get preserved, but wrapped by additional Apple security, which is believed to have
703 // desirable functionality, e.g. possibility of writing variables to different stores,
704 // allowing them to have intended effect.
705 //
706 Status = gBS->InstallProtocolInterface (
707 &mHandle,
708 &gEfiVariableArchProtocolGuid,
709 EFI_NATIVE_INTERFACE,
710 NULL
711 );
712
713 ASSERT_EFI_ERROR (Status);
714
715 if (!PcdGetBool (PcdEmuVariableNvModeEnable)) {
716 //
717 // Register FtwNotificationEvent () notify function.
718 //
719 EfiCreateProtocolNotifyEvent (
720 &gEfiFaultTolerantWriteProtocolGuid,
721 TPL_CALLBACK,
723 (VOID *)SystemTable,
725 );
726 } else {
727 //
728 // Emulated non-volatile variable mode does not depend on FVB and FTW.
729 //
731
732 RestoreAcpiGlobalVariable (SystemTable);
733 }
734
735 OriginalCreateEventEx = gBS->CreateEventEx;
736 gBS->CreateEventEx = MapCreateEventEx;
737
738 Status = gBS->CreateEventEx (
739 EVT_NOTIFY_SIGNAL,
740 TPL_NOTIFY,
742 NULL,
743 &gEfiEventVirtualAddressChangeGuid,
745 );
746 ASSERT_EFI_ERROR (Status);
747
748 //
749 // Register the event handling function to reclaim variable for OS usage.
750 //
751 Status = gBS->CreateEvent (
752 EVT_NOTIFY_SIGNAL,
753 TPL_NOTIFY,
755 NULL,
756 &ReadyToBootEvent
757 );
758 ASSERT_EFI_ERROR (Status);
759
760 //
761 // Register the event handling function to set the End Of DXE flag.
762 //
763 Status = gBS->CreateEvent (
764 EVT_NOTIFY_SIGNAL,
765 TPL_CALLBACK,
767 NULL,
768 &EndOfDxeEvent
769 );
770 ASSERT_EFI_ERROR (Status);
771
772 // Register and initialize the VariablePolicy engine.
773 Status = InitVariablePolicyLib (VariableServiceGetVariable);
774 ASSERT_EFI_ERROR (Status);
775 Status = VarCheckRegisterSetVariableCheckHandler (ValidateSetVariable);
776 ASSERT_EFI_ERROR (Status);
777 Status = gBS->InstallMultipleProtocolInterfaces (
778 &mHandle,
779 &gEdkiiVariablePolicyProtocolGuid,
781 NULL
782 );
783 ASSERT_EFI_ERROR (Status);
784
785 gBS->CreateEventEx = OriginalCreateEventEx;
786
787 // Signal events immediately. These events occur in this order and before
788 // OpenCore is loaded when the equivalent driver is part of OpenDuet.
789 gBS->SignalEvent (EndOfDxeEvent);
790 gBS->SignalEvent (ReadyToBootEvent);
791
792 return EFI_SUCCESS;
793}
UINT64 Length
EFI_BOOT_SERVICES * gBS
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
Definition OcTypingLib.h:42
VOID MorLockInitAtEndOfDxe(VOID)
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2)
EFI_STATUS EFIAPI VarCheckVariablePropertySet(IN CHAR16 *Name, IN EFI_GUID *Guid, IN VAR_CHECK_VARIABLE_PROPERTY *VariableProperty)
Definition VarCheck.c:59
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
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 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
AUTH_VAR_LIB_CONTEXT_OUT mAuthContextOut
Definition Variable.c:101
VOID InitializeVariableQuota(VOID)
Definition Variable.c:490
VARIABLE_STORE_HEADER * mNvVariableCache
Definition Variable.c:41
EFI_STATUS VariableWriteServiceInitialize(VOID)
Definition Variable.c:3426
VOID ReclaimForOS(VOID)
Definition Variable.c:3213
EFI_STATUS VariableCommonInitialize(VOID)
Definition Variable.c:3714
EFI_STATUS EFIAPI VariableServiceGetNextVariableName(IN OUT UINTN *VariableNameSize, IN OUT CHAR16 *VariableName, IN OUT EFI_GUID *VendorGuid)
Definition Variable.c:2525
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
VARIABLE_MODULE_GLOBAL * mVariableModuleGlobal
Definition Variable.c:35
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 VariableLockRequestToLock(IN CONST EDKII_VARIABLE_LOCK_PROTOCOL *This, IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid)
#define NV_STORAGE_VARIABLE_BASE
Definition Variable.h:43
EDKII_VAR_CHECK_PROTOCOL mVarCheck
Definition VariableDxe.c:42
STATIC VOID * mAcpiGlobalVariable
Definition VariableDxe.c:54
STATIC VOID SaveAcpiGlobalVariable(IN EFI_SYSTEM_TABLE *SystemTable)
UINTN mVarCheckAddressPointerCount
Definition VariableDxe.c:32
VOID EFIAPI OnReadyToBoot(EFI_EVENT Event, VOID *Context)
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)
EDKII_VARIABLE_POLICY_PROTOCOL mVariablePolicyProtocol
Definition VariableDxe.c:34
VOID *** mVarCheckAddressPointer
Definition VariableDxe.c:31
BOOLEAN AtRuntime(VOID)
Definition VariableDxe.c:77
EFI_EVENT mVirtualAddressChangeEvent
Definition VariableDxe.c:29
EFI_STATUS EFIAPI VariableServiceInitialize(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
VOID EFIAPI OnEndOfDxe(EFI_EVENT Event, VOID *Context)
VOID EFIAPI RecordSecureBootPolicyVarData(VOID)
STATIC VOID RestoreAcpiGlobalVariable(IN EFI_SYSTEM_TABLE *SystemTable)
STATIC EFI_STATUS EFIAPI MapCreateEventEx(IN UINT32 Type, IN EFI_TPL NotifyTpl, IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, IN CONST VOID *NotifyContext OPTIONAL, IN CONST EFI_GUID *EventGroup OPTIONAL, OUT EFI_EVENT *Event)
VOID * mFtwRegistration
Definition VariableDxe.c:30
VOID ReleaseLockOnlyAtBootTime(IN EFI_LOCK *Lock)
STATIC EFI_GUID mAcpiGlobalVariableGuid
Definition VariableDxe.c:48
VOID EFIAPI FtwNotificationEvent(IN EFI_EVENT Event, IN VOID *Context)
VOID AcquireLockOnlyAtBootTime(IN EFI_LOCK *Lock)
VOID EFIAPI VariableClassAddressChangeEvent(IN EFI_EVENT Event, IN VOID *Context)
STATIC UINT32 mAcpiGlobalVariableAttributes
Definition VariableDxe.c:58
EFI_STATUS GetFtwProtocol(OUT VOID **FtwProtocol)
EFI_STATUS GetFvbCountAndBuffer(OUT UINTN *NumberHandles, OUT EFI_HANDLE **Buffer)
VOID VariableWriteServiceInitializeDxe(VOID)
EDKII_VARIABLE_LOCK_PROTOCOL mVariableLock
Definition VariableDxe.c:33
EFI_STATUS EFIAPI ProtocolIsVariablePolicyEnabled(OUT BOOLEAN *State)
EFI_HANDLE mHandle
Definition VariableDxe.c:28
#define ASSERT(x)
Definition coder.h:55
BOOLEAN AuthFormat
Definition Variable.h:103
EFI_PHYSICAL_ADDRESS VolatileVariableBase
Definition Variable.h:98
EFI_PHYSICAL_ADDRESS NonVolatileVariableBase
Definition Variable.h:99
EFI_PHYSICAL_ADDRESS HobVariableBase
Definition Variable.h:97
VARIABLE_GLOBAL VariableGlobal
Definition Variable.h:109
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL * FvbInstance
Definition Variable.h:126