Add PlatformBdsPreBoot to allow hooks immediately before booting an option

This commit is contained in:
Jeremy Soller
2019-10-31 14:54:27 -06:00
committed by Tim Crawford
parent 814c0fa862
commit 6dff36c9b2
5 changed files with 48 additions and 0 deletions

View File

@ -1357,6 +1357,42 @@ Returns:
}
VOID
EFIAPI
PlatformBdsPreBoot (
IN BDS_COMMON_OPTION *Option
)
{
EFI_STATUS Status;
EFI_EVENT UserInputDurationTime;
EFI_EVENT Events[2];
UINTN Index;
if (!ESCAPE_KEY_DETECTED) {
// Did not enter menu, return immediately
return;
}
// Clear screen before waiting for input
gST->ConOut->ClearScreen(gST->ConOut);
// Create a 1s duration event to ensure user has enough input time to provide a key to boot option
Status = gBS->CreateEvent (
EVT_TIMER,
0,
NULL,
NULL,
&UserInputDurationTime
);
ASSERT (Status == EFI_SUCCESS);
Status = gBS->SetTimer (UserInputDurationTime, TimerRelative, 10000000);
ASSERT (Status == EFI_SUCCESS);
Events[0] = gST->ConIn->WaitForKey;
Events[1] = UserInputDurationTime;
gBS->WaitForEvent (2, Events, &Index);
}
VOID
EFIAPI
PlatformBdsBootSuccess (

View File

@ -91,6 +91,12 @@ PlatformBdsPolicyBehavior (
IN BASEM_MEMORY_TEST BaseMemoryTest
);
VOID
EFIAPI
PlatformBdsPreBoot (
IN BDS_COMMON_OPTION *Option
);
/**
Hook point for a user-provided function, for after a boot attempt fails.

View File

@ -263,6 +263,8 @@ BdsBootDeviceSelect (
//
BdsSetConsoleMode (FALSE);
PlatformBdsPreBoot (BootOption);
//
// All the driver options should have been processed since
// now boot will be performed.

View File

@ -380,6 +380,8 @@ CallBootManager (
//
BdsSetConsoleMode (FALSE);
PlatformBdsPreBoot (gOption);
//
// parse the selected option
//

View File

@ -91,6 +91,8 @@ HotkeyBoot (
//
gST->ConOut->Reset (gST->ConOut, FALSE);
PlatformBdsPreBoot (mHotkeyBootOption);
Status = BdsLibBootViaBootOption (mHotkeyBootOption, mHotkeyBootOption->DevicePath, &ExitDataSize, &ExitData);
if (EFI_ERROR (Status)) {