From effde90ece3df2d8f08f9de5c14ca2688042b363 Mon Sep 17 00:00:00 2001 From: Rafal Kupiec Date: Sat, 30 Dec 2023 11:18:51 +0100 Subject: [PATCH] Another improvements to module loading support --- sdk/xtdk/bltypes.h | 20 ++++++++++++-------- xtldr2/modules/dummy/dummy.c | 5 ++--- xtldr2/xtldr.c | 10 ++++++---- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/sdk/xtdk/bltypes.h b/sdk/xtdk/bltypes.h index d3cb9aa..f253b4c 100644 --- a/sdk/xtdk/bltypes.h +++ b/sdk/xtdk/bltypes.h @@ -19,6 +19,10 @@ #define XTBL_MODULES_DIRECTORY_PATH L"\\EFI\\BOOT\\XTLDR\\MODULES\\" #define XTBL_THEMES_DIRECTORY_PATH L"\\EFI\\BOOT\\XTLDR\\THEMES\\" +/* XTLDR module segment macros */ +#define XTBL_MODDEPS SEGMENT(".moddeps") CONST WCHAR XtBlpDeps[][8] +#define XTBL_MODINFO SEGMENT(".modinfo") CONST WCHAR XtBlpInfo[] + /* EFI XT boot devices */ #define XTBL_BOOT_DEVICE_UNKNOWN 0x00 #define XTBL_BOOT_DEVICE_CDROM 0x01 @@ -31,16 +35,16 @@ #define XTBL_DEBUGPORT_SERIAL 2 /* TUI dialog box attributes */ -#define XTBL_TUI_DIALOG_GENERIC_BOX 1 -#define XTBL_TUI_DIALOG_ERROR_BOX 2 -#define XTBL_TUI_DIALOG_ACTIVE_BUTTON 4 -#define XTBL_TUI_DIALOG_INACTIVE_BUTTON 8 -#define XTBL_TUI_DIALOG_ACTIVE_INPUT 16 -#define XTBL_TUI_DIALOG_INACTIVE_INPUT 32 -#define XTBL_TUI_DIALOG_PROGRESS_BAR 64 +#define XTBL_TUI_DIALOG_GENERIC_BOX 1 +#define XTBL_TUI_DIALOG_ERROR_BOX 2 +#define XTBL_TUI_DIALOG_ACTIVE_BUTTON 4 +#define XTBL_TUI_DIALOG_INACTIVE_BUTTON 8 +#define XTBL_TUI_DIALOG_ACTIVE_INPUT 16 +#define XTBL_TUI_DIALOG_INACTIVE_INPUT 32 +#define XTBL_TUI_DIALOG_PROGRESS_BAR 64 /* TUI dialog box maximum width */ -#define XTBL_TUI_MAX_DIALOG_WIDTH 100 +#define XTBL_TUI_MAX_DIALOG_WIDTH 100 /* Boot Loader protocol routine pointers */ typedef EFI_STATUS (*PBL_ALLOCATE_PAGES)(IN UINT64 Size, OUT PEFI_PHYSICAL_ADDRESS Memory); diff --git a/xtldr2/modules/dummy/dummy.c b/xtldr2/modules/dummy/dummy.c index 0a78fde..881a8d2 100644 --- a/xtldr2/modules/dummy/dummy.c +++ b/xtldr2/modules/dummy/dummy.c @@ -8,11 +8,10 @@ #include -#define XTBL_MODDEP SEGMENT(".moddeps") CONST WCHAR XtBlpDeps[][8] -#define XTBL_MODINFO SEGMENT(".modinfo") CONST WCHAR XtBlpInfo[] -XTBL_MODDEP = {L"dummy2", L"dummy2"}; +/* Dummy module information */ XTBL_MODINFO = L"Dummy XTLDR module"; +XTBL_MODDEPS = {L"dummy2"}; /** * This routine is the entry point of the XT EFI boot loader module. diff --git a/xtldr2/xtldr.c b/xtldr2/xtldr.c index 138a5cd..f971152 100644 --- a/xtldr2/xtldr.c +++ b/xtldr2/xtldr.c @@ -155,9 +155,11 @@ BlInvokeBootProtocol(IN PLIST_ENTRY OptionsList) if(Status != STATUS_EFI_SUCCESS) { /* Failed to load modules, print error message and return status code */ - BlDebugPrint(L"Failed to load XTLDR modules\n"); - return Status; + BlDebugPrint(L"ERROR: Failed to load XTLDR modules\n"); + return STATUS_EFI_NOT_READY; } + + // TODO: Add support for boot protocol and invoke it for(;;); /* This point should never be reached */ @@ -186,7 +188,7 @@ BlLoadModules(IN PWCHAR ModulesList) if(Status != STATUS_EFI_SUCCESS) { /* Failed to load module, print error message and set new return value */ - BlDebugPrint(L"Failed to load module '%S', status = 0x%lx\n", Module, Status); + BlDebugPrint(L"Failed to load module '%S', (Status Code: 0x%lx)\n", Module, Status); ReturnStatus = STATUS_EFI_LOAD_ERROR; } @@ -211,6 +213,7 @@ BlLoadModule(IN PWCHAR ModuleName) PPECOFF_IMAGE_SECTION_HEADER SectionHeader; PPECOFF_IMAGE_DOS_HEADER DosHeader; PPECOFF_IMAGE_PE_HEADER PeHeader; + PXTBL_MODULE_INFO ModuleInfo; PLIST_ENTRY ModuleListEntry; WCHAR ModuleFileName[1024]; USHORT SectionIndex; @@ -218,7 +221,6 @@ BlLoadModule(IN PWCHAR ModuleName) EFI_STATUS Status; PVOID ModuleData; PWCHAR DepsData; - PXTBL_MODULE_INFO ModuleInfo; ModuleListEntry = BlpLoadedModules.Flink; while(ModuleListEntry != &BlpLoadedModules)