HEL: Call ExitBootServices
This commit is contained in:
parent
704fd15f7b
commit
706f2c1c5d
@ -38,7 +38,7 @@ private bool set_graphics_mode()
|
|||||||
&gop_guid, null, &buffer_size, handles);
|
&gop_guid, null, &buffer_size, handles);
|
||||||
if (status != EFI_SUCCESS)
|
if (status != EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
writeln("LocateHandle: error %u", status);
|
writeln("LocateHandle: error %x", status);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
EFI_HANDLE gop_handle = handles[0];
|
EFI_HANDLE gop_handle = handles[0];
|
||||||
@ -47,7 +47,7 @@ private bool set_graphics_mode()
|
|||||||
&gop_guid, &gop_interface);
|
&gop_guid, &gop_interface);
|
||||||
if (status != EFI_SUCCESS)
|
if (status != EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
writeln("HandleProtocol: error %u", status);
|
writeln("HandleProtocol: error %x", status);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (gop_interface == null)
|
if (gop_interface == null)
|
||||||
@ -74,7 +74,7 @@ private bool set_graphics_mode()
|
|||||||
}
|
}
|
||||||
if ((status = gop.SetMode(gop, best_mode_number)) != EFI_SUCCESS)
|
if ((status = gop.SetMode(gop, best_mode_number)) != EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
writeln("SetMode: Error %u\n", status);
|
writeln("SetMode: Error %x\n", status);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bootinfo.fb.buffer = cast(uint *)gop.Mode.FrameBufferBase;
|
bootinfo.fb.buffer = cast(uint *)gop.Mode.FrameBufferBase;
|
||||||
@ -98,6 +98,7 @@ private bool get_memory_map()
|
|||||||
&descriptor_version);
|
&descriptor_version);
|
||||||
if (status != EFI_SUCCESS)
|
if (status != EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
|
writeln("GetMemoryMap: Error %x", status);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
size_t n_entries = memory_map_size / descriptor_size;
|
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;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
get_memory_map();
|
for (;;)
|
||||||
|
{
|
||||||
|
get_memory_map();
|
||||||
|
|
||||||
wait_key();
|
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;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user