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