HEL: Add heap module; locate GOP handle

This commit is contained in:
Josh Holtrop 2022-03-14 21:43:40 -04:00
parent 406f17c1db
commit dd57a31d38
2 changed files with 42 additions and 4 deletions

19
src/hel/heap.d Normal file
View File

@ -0,0 +1,19 @@
private __gshared align(4096) ubyte[512 * 1024] g_heap;
private __gshared size_t g_heap_index;
ubyte * heap_base()
{
return &g_heap[g_heap_index];
}
size_t heap_free()
{
return g_heap.sizeof - g_heap_index;
}
ubyte * heap_consume(size_t size)
{
ubyte * rv = &g_heap[g_heap_index];
g_heap_index += (size + 4095u) & 0xFFFFFFFFFFFFF000u;
return rv;
}

View File

@ -1,8 +1,19 @@
import uefi; import uefi;
import output; import output;
import heap;
__gshared EFI_SYSTEM_TABLE * g_st; __gshared EFI_SYSTEM_TABLE * g_st;
private void wait_key()
{
writeln("Press any key...");
g_st.ConIn.Reset(g_st.ConIn, FALSE);
EFI_INPUT_KEY key;
while (g_st.ConIn.ReadKeyStroke(g_st.ConIn, &key) == EFI_NOT_READY)
{
}
}
extern (C) EFI_STATUS efi_main(EFI_HANDLE image_handle, EFI_SYSTEM_TABLE * st) extern (C) EFI_STATUS efi_main(EFI_HANDLE image_handle, EFI_SYSTEM_TABLE * st)
{ {
g_st = st; g_st = st;
@ -11,13 +22,21 @@ extern (C) EFI_STATUS efi_main(EFI_HANDLE image_handle, EFI_SYSTEM_TABLE * st)
writeln("HOS EFI loader"); writeln("HOS EFI loader");
writeln("Firmware vendor: '%S', version: 0x%x", st.FirmwareVendor, st.FirmwareVendor); writeln("Firmware vendor: '%S', version: 0x%x", st.FirmwareVendor, st.FirmwareVendor);
writeln("Press any key...");
st.ConIn.Reset(st.ConIn, FALSE); UINTN buffer_size = heap_free();
EFI_INPUT_KEY key; EFI_GUID gop_guid = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
while (st.ConIn.ReadKeyStroke(st.ConIn, &key) == EFI_NOT_READY) EFI_HANDLE * handles = cast(EFI_HANDLE *)heap_base();
EFI_STATUS status = st.BootServices.LocateHandle(ByProtocol,
&gop_guid, null, &buffer_size, handles);
if (status != EFI_SUCCESS)
{ {
writeln("LocateHandle: error %u", status);
wait_key();
return EFI_SUCCESS;
} }
EFI_HANDLE gop_handle = handles[0];
wait_key();
return EFI_SUCCESS; return EFI_SUCCESS;
} }