13#include <Library/UefiBootServicesTableLib.h>
23 ASSERT (OcVariableRuntimeProtocol != NULL);
25 Status =
gBS->LocateProtocol (
28 (VOID **)OcVariableRuntimeProtocol
31 if (EFI_ERROR (Status)) {
32 DEBUG ((DEBUG_INFO,
"OCVAR: Locate emulated NVRAM protocol - %r\n", Status));
39 "OCVAR: Emulated NVRAM protocol incompatible revision %d != %d\n",
40 (*OcVariableRuntimeProtocol)->Revision,
43 return EFI_UNSUPPORTED;
56 IN OC_NVRAM_LEGACY_MAP *LegacyMap,
57 IN BOOLEAN LegacyOverwrite,
58 IN BOOLEAN RequestBootVarRouting
67 if (EFI_ERROR (Status)) {
80 if (RequestBootVarRouting) {
81 Status =
gBS->LocateProtocol (
88 FwRuntime->GetCurrent (&FwrtConfig);
90 DEBUG ((DEBUG_INFO,
"OCVAR: Found FW NVRAM, redirect already present %d\n", FwrtConfig.
BootVariableRedirect));
94 FwRuntime->SetOverride (&FwrtConfig);
95 DEBUG ((DEBUG_INFO,
"OCVAR: Found FW NVRAM, forcing redirect %d\n", FwrtConfig.
BootVariableRedirect));
99 DEBUG ((DEBUG_INFO,
"OCVAR: Missing FW NVRAM, going on...\n"));
105 DEBUG ((DEBUG_INFO,
"OCVAR: Loading NVRAM from storage...\n"));
107 Status = OcVariableRuntimeProtocol->
LoadNvram (Storage, LegacyMap, LegacyOverwrite);
109 if (EFI_ERROR (Status)) {
113 DEBUG ((DEBUG_INFO,
"OCVAR: Emulated NVRAM load failed - %r\n", Status));
116 if (FwRuntime != NULL) {
117 DEBUG ((DEBUG_INFO,
"OCVAR: Restoring FW NVRAM...\n"));
132 if (EFI_ERROR (Status)) {
136 DEBUG ((DEBUG_INFO,
"OCVAR: Saving NVRAM to storage...\n"));
138 Status = OcVariableRuntimeProtocol->
SaveNvram ();
140 if (EFI_ERROR (Status)) {
141 DEBUG ((DEBUG_WARN,
"OCVAR: Emulated NVRAM save failed - %r\n", Status));
155 if (EFI_ERROR (Status)) {
159 DEBUG ((DEBUG_INFO,
"OCVAR: Resetting NVRAM storage...\n"));
161 Status = OcVariableRuntimeProtocol->
ResetNvram ();
163 if (EFI_ERROR (Status)) {
164 DEBUG ((DEBUG_WARN,
"OCVAR: Emulated NVRAM reset failed - %r\n", Status));
180 if (EFI_ERROR (Status)) {
184 DEBUG ((DEBUG_INFO,
"OCVAR: Switching to fallback NVRAM storage...\n"));
188 if (EFI_ERROR (Status)) {
190 Status == EFI_ALREADY_STARTED ? DEBUG_INFO : DEBUG_WARN,
191 "OCVAR: Emulated NVRAM switch to fallback failed - %r\n",
STATIC EFI_STATUS InternalLocateVariableRuntimeProtocol(OC_VARIABLE_RUNTIME_PROTOCOL **OcVariableRuntimeProtocol)
VOID EFIAPI OcSaveLegacyNvram(VOID)
VOID EFIAPI OcSwitchToFallbackLegacyNvram(VOID)
VOID EFIAPI OcResetLegacyNvram(VOID)
VOID OcLoadLegacyNvram(IN OC_STORAGE_CONTEXT *Storage, IN OC_NVRAM_LEGACY_MAP *LegacyMap, IN BOOLEAN LegacyOverwrite, IN BOOLEAN RequestBootVarRouting)
VOID DirectResetCold(VOID)
#define OC_FIRMWARE_RUNTIME_REVISION
EFI_GUID gOcFirmwareRuntimeProtocolGuid
EFI_GUID gOcVariableRuntimeProtocolGuid
#define OC_VARIABLE_RUNTIME_PROTOCOL_REVISION
OC_FWRT_SET_OVERRIDE_CONFIG SetOverride
BOOLEAN BootVariableRedirect
OC_VARIABLE_RUNTIME_PROTOCOL_LOAD_NVRAM LoadNvram
OC_VARIABLE_RUNTIME_PROTOCOL_SAVE_NVRAM SaveNvram
OC_VARIABLE_RUNTIME_PROTOCOL_RESET_NVRAM ResetNvram
OC_VARIABLE_RUNTIME_PROTOCOL_SWITCH_TO_FALLBACK SwitchToFallback