diff --git a/arch/uefi/entry.c b/arch/uefi/entry.c index e69de29..439cbb0 100644 --- a/arch/uefi/entry.c +++ b/arch/uefi/entry.c @@ -0,0 +1,52 @@ +/************************ + *** Team Kitty, 2019 *** + *** Sync *** + ***********************/ + +/* The entry point of the UEFI app. + * When the firmware loads the app, + * it calls the efi_main function. + * + * When it is called, the processor + * is running in 32-bit Protected mode. + * It is given a map of memory, and there + * are a bunch of Boot Services provided + * by the UEFI firmware. + * + * See uefi/docs for more information. + */ + + //Example stolen from osdev.org/uefi_bare_bones + +#include +#include + +EFI_STATUS efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) +{ + EFI_STATUS Status; + EFI_INPUT_KEY Key; + + /* Store the system table for future use in other functions */ + ST = SystemTable; + + /* Say hi */ + Status = ST->ConOut->OutputString(ST->ConOut, L"Hello World\n\r"); + if (EFI_ERROR(Status)) + return Status; + + /* Now wait for a keystroke before continuing, otherwise your + message will flash off the screen before you see it. + + First, we need to empty the console input buffer to flush + out any keystrokes entered before this point */ + Status = ST->ConIn->Reset(ST->ConIn, FALSE); + if (EFI_ERROR(Status)) + return Status; + + /* Now wait until a key becomes available. This is a simple + polling implementation. You could try and use the WaitForKey + event instead if you like */ + while ((Status = ST->ConIn->ReadKeyStroke(ST->ConIn, &Key)) == EFI_NOT_READY) ; + + return Status; +} \ No newline at end of file