60 EFI_RESET_TYPE ResetMode;
66 DEBUG ((DEBUG_INFO,
"OCRST: Entering firmware...\n"));
68 if (EFI_ERROR (Status)) {
72 DataSize =
sizeof (OsIndications);
73 Status =
gRT->GetVariable (
74 EFI_OS_INDICATIONS_VARIABLE_NAME,
80 if (!EFI_ERROR (Status)) {
81 OsIndications |= EFI_OS_INDICATIONS_BOOT_TO_FW_UI;
83 OsIndications = EFI_OS_INDICATIONS_BOOT_TO_FW_UI;
86 Status =
gRT->SetVariable (
87 EFI_OS_INDICATIONS_VARIABLE_NAME,
89 EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
90 sizeof (OsIndications),
93 if (EFI_ERROR (Status)) {
94 DEBUG ((DEBUG_WARN,
"OCRST: Failed to set EFI_OS_INDICATIONS_BOOT_TO_FW_UI - %r\n", Status));
101 if (
OcStriCmp (Mode, L
"coldreset") == 0) {
102 DEBUG ((DEBUG_INFO,
"OCRST: Perform cold reset...\n"));
103 ResetMode = EfiResetCold;
104 }
else if (
OcStriCmp (Mode, L
"warmreset") == 0) {
105 DEBUG ((DEBUG_INFO,
"OCRST: Perform warm reset...\n"));
106 ResetMode = EfiResetWarm;
107 }
else if (
OcStriCmp (Mode, L
"shutdown") == 0) {
108 DEBUG ((DEBUG_INFO,
"OCRST: Perform shutdown...\n"));
109 ResetMode = EfiResetShutdown;
111 DEBUG ((DEBUG_INFO,
"OCRST: Unknown argument %s, defaulting to cold reset...\n", Mode));
112 ResetMode = EfiResetCold;
122 DEBUG ((DEBUG_INFO,
"OCRST: Failed to reset, trying direct\n"));
126 DEBUG ((DEBUG_INFO,
"OCRST: Failed to reset directly, entering dead loop\n"));