#include "Uefi.h" #include "Library/UefiLib.h" #include "Library/UefiApplicationEntryPoint.h" #include "Guid/FileSystemInfo.h" #include "Protocol/LoadedImage.h" #include "main.h" // TODO move into main dir #include "memtest86+/logger.h" #include "memtest86+/display.h" #include "logger_config.h" extern EFI_SYSTEM_TABLE *gST; // TODO remove. Just for debugging /*int global = 1;*/ // TODO remove. Just for debugging /*void stack_check() { int i; int *p = &i; char log[32] = "stack ptr = "; int length = 12; int_to_charr((unsigned long) p, log, &length); print_log(log, length); }*/ EFI_STATUS EFIAPI UefiMain ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { SystemTable->ConOut->ClearScreen(SystemTable->ConOut); SystemTable->ConOut->SetCursorPosition(SystemTable->ConOut, 0, 0); trace_init("Starting MemtestEfi"); init_logger(); if (logflag) { char msg[] = "MemtestEfi started"; print_log(msg, sizeof(msg) - 1); } // TODO remove. Just for debugging /* if (logflag) { char log[41] = "Address of UefiMain: "; int length = 21; int_to_charr((unsigned long)UefiMain, log, &length); print_log(log, length); }*/ // TODO remove. Just for debugging /* if (logflag) { char log[43] = "Address of test_start: "; int length = 23; int_to_charr((unsigned long)test_start, log, &length); print_log(log, length); }*/ // TODO remove. Just for debugging /* VOID *LoadedImage; EFI_STATUS status = SystemTable->BootServices->OpenProtocol( ImageHandle, &gEfiLoadedImageProtocolGuid, &LoadedImage, ImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL); if (status != EFI_SUCCESS) { if (logflag) print_log("Failed to open LoadedImage.", 27); } else { VOID *base = ((EFI_LOADED_IMAGE_PROTOCOL *) LoadedImage)->ImageBase; UINT64 size = ((EFI_LOADED_IMAGE_PROTOCOL *) LoadedImage)->ImageSize; if (logflag) { char log[31] = "ImageBase: "; int length = 11; int_to_charr((unsigned long) base, log, &length); print_log(log, length); } if (logflag) { char log[31] = "ImageSize: "; int length = 11; int_to_charr(size, log, &length); print_log(log, length); } }*/ // TODO remove. Just for debugging /* if (logflag) { char log[45] = "Address of SystemTable = "; int length = 25; int_to_charr((unsigned long) SystemTable, log, &length); print_log(log, length); }*/ // TODO remove. Just for debugging /* if (logflag) { char log[45] = "Current return address = "; int length = 25; int_to_charr((unsigned long) ((unsigned long *) __builtin_return_address(0)), log, &length); print_log(log, length); }*/ // TODO remove. Just for debugging /* stack_check();*/ // TODO remove. Just for debugging /* if (logflag) { char log[49] = "Address of global variable = "; int length = 29; int_to_charr((unsigned long) &global, log, &length); print_log(log, length); }*/ test_start(); if (logflag) { char msg[] = "MemtestEfi finished!\n"; print_log(msg, sizeof(msg) - 1); } SystemTable->ConOut->SetCursorPosition(SystemTable->ConOut, 0, 25); return EFI_SUCCESS; }