#include #include #include EFI_SYSTEM_TABLE * g_system_table; static void write_string(uint16_t * string) { g_system_table->ConOut->OutputString(g_system_table->ConOut, string); } static void write_uint(uint32_t n) { uint16_t s[12] = {0}; size_t i = 0u; while ((n != 0u) || (i == 0u)) { s[10u - i] = '0' + (n % 10u); n /= 10u; i++; } write_string(&s[11u - i]); } EFI_STATUS efi_main(EFI_HANDLE image_handle, EFI_SYSTEM_TABLE * system_table) { EFI_STATUS status; EFI_INPUT_KEY key; g_system_table = system_table; write_string(L"My first EFI loader\r\n"); if (EFI_ERROR(status)) return status; status = system_table->ConIn->Reset(system_table->ConIn, FALSE); if (EFI_ERROR(status)) return status; EFI_HANDLE buffer[10]; UINTN buffer_size = sizeof(buffer); status = system_table->BootServices->LocateHandle(ByProtocol, &(EFI_GUID)EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID, NULL, &buffer_size, buffer); write_string(L"status = "); write_uint(status); write_string(L", num entries = "); write_uint(buffer_size / sizeof(EFI_HANDLE)); write_string(L"\r\n"); write_string(L"Press any key...\r\n"); while ((status = system_table->ConIn->ReadKeyStroke(system_table->ConIn, &key)) == EFI_NOT_READY) { } return status; }