HEL: Call ExitBootServices

This commit is contained in:
Josh Holtrop 2022-03-16 01:12:07 -04:00
parent 704fd15f7b
commit 706f2c1c5d

View File

@ -38,7 +38,7 @@ private bool set_graphics_mode()
&gop_guid, null, &buffer_size, handles);
if (status != EFI_SUCCESS)
{
writeln("LocateHandle: error %u", status);
writeln("LocateHandle: error %x", status);
return false;
}
EFI_HANDLE gop_handle = handles[0];
@ -47,7 +47,7 @@ private bool set_graphics_mode()
&gop_guid, &gop_interface);
if (status != EFI_SUCCESS)
{
writeln("HandleProtocol: error %u", status);
writeln("HandleProtocol: error %x", status);
return false;
}
if (gop_interface == null)
@ -74,7 +74,7 @@ private bool set_graphics_mode()
}
if ((status = gop.SetMode(gop, best_mode_number)) != EFI_SUCCESS)
{
writeln("SetMode: Error %u\n", status);
writeln("SetMode: Error %x\n", status);
return false;
}
bootinfo.fb.buffer = cast(uint *)gop.Mode.FrameBufferBase;
@ -98,6 +98,7 @@ private bool get_memory_map()
&descriptor_version);
if (status != EFI_SUCCESS)
{
writeln("GetMemoryMap: Error %x", status);
return false;
}
size_t n_entries = memory_map_size / descriptor_size;
@ -133,9 +134,23 @@ extern (C) EFI_STATUS efi_main(EFI_HANDLE image_handle, EFI_SYSTEM_TABLE * st)
return EFI_SUCCESS;
}
for (;;)
{
get_memory_map();
EFI_STATUS status = st.BootServices.ExitBootServices(image_handle, memory_map_key);
if ((status & 0xFFu) == (EFI_INVALID_PARAMETER & 0xFFu))
{
continue;
}
if (status == EFI_SUCCESS)
{
break;
}
writeln("ExitBootServices: Error %x", status);
wait_key();
return EFI_SUCCESS;
}
return EFI_SUCCESS;
}