From 4d68b93ed3f375f8fd5b443bb3dc8e6c9a80e71c Mon Sep 17 00:00:00 2001 From: belliash Date: Thu, 22 Dec 2022 23:19:23 +0100 Subject: [PATCH] Small code formatting and refactoring --- xtldr/includes/xtbl.h | 6 +- xtldr/modules/dummy/CMakeLists.txt | 3 +- xtldr/modules/dummy/dummy.c | 2 +- xtldr/modules/dummy/includes/dummy.h | 20 +++++ xtldr/modules/xtos/includes/xtos.h | 4 + xtldr/modules/xtos/xtos.c | 121 ++++++++++++++------------- xtldr/xtldr.c | 3 +- 7 files changed, 95 insertions(+), 64 deletions(-) create mode 100644 xtldr/modules/dummy/includes/dummy.h diff --git a/xtldr/includes/xtbl.h b/xtldr/includes/xtbl.h index 30e6260..5a8e2e6 100644 --- a/xtldr/includes/xtbl.h +++ b/xtldr/includes/xtbl.h @@ -112,7 +112,8 @@ BlFindVolumeDevicePath(IN PEFI_DEVICE_PATH_PROTOCOL FsHandle, EFI_STATUS BlGetMemoryMap(OUT PEFI_MEMORY_MAP MemoryMap); -VOID BlGetStackPointer(OUT PVOID *Stack); +VOID +BlGetStackPointer(OUT PVOID *Stack); EFI_STATUS BlGetVirtualAddress(IN PLIST_ENTRY MemoryMappings, @@ -132,6 +133,9 @@ BlInitializeVirtualMemory(IN OUT PLIST_ENTRY MemoryMappings, EFI_STATUS BlLoadEfiModules(); +EFI_STATUS +BlLoadXtSystem(); + EFI_STATUS BlMapVirtualMemory(IN PLIST_ENTRY MemoryMappings, IN UINT_PTR VirtualAddress, diff --git a/xtldr/modules/dummy/CMakeLists.txt b/xtldr/modules/dummy/CMakeLists.txt index cc5237f..4acd48b 100644 --- a/xtldr/modules/dummy/CMakeLists.txt +++ b/xtldr/modules/dummy/CMakeLists.txt @@ -4,7 +4,8 @@ PROJECT(XTLDR_DUMMY) # Specify include directories include_directories( ${EXECTOS_SOURCE_DIR}/sdk/xtdk - ${XTLDR_SOURCE_DIR}/includes) + ${XTLDR_SOURCE_DIR}/includes + ${XTLDR_DUMMY_SOURCE_DIR}/includes) # Specify list of source code files list(APPEND XTLDR_DUMMY_SOURCE diff --git a/xtldr/modules/dummy/dummy.c b/xtldr/modules/dummy/dummy.c index a61d452..9824fc1 100644 --- a/xtldr/modules/dummy/dummy.c +++ b/xtldr/modules/dummy/dummy.c @@ -6,7 +6,7 @@ * DEVELOPERS: Rafal Kupiec */ -#include +#include /* EFI Image Handle */ diff --git a/xtldr/modules/dummy/includes/dummy.h b/xtldr/modules/dummy/includes/dummy.h new file mode 100644 index 0000000..02b7e74 --- /dev/null +++ b/xtldr/modules/dummy/includes/dummy.h @@ -0,0 +1,20 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtldr/modules/dummy/includes/dummy.h + * DESCRIPTION: Dummy module header file + * DEVELOPERS: Rafal Kupiec + */ + +#ifndef __XTLDR_MODULES_DUMMY_H +#define __XTLDR_MODULES_DUMMY_H + +#include + + +/* Dummy module related routines forward references */ +EFI_STATUS +BlXtLdrModuleMain(IN EFI_HANDLE ImageHandle, + IN PEFI_SYSTEM_TABLE SystemTable); + +#endif /* __XTLDR_MODULES_DUMMY_H */ diff --git a/xtldr/modules/xtos/includes/xtos.h b/xtldr/modules/xtos/includes/xtos.h index d3940c7..7f0b188 100644 --- a/xtldr/modules/xtos/includes/xtos.h +++ b/xtldr/modules/xtos/includes/xtos.h @@ -23,6 +23,10 @@ EFI_STATUS XtpBootSequence(IN PEFI_FILE_HANDLE BootDir, IN PXT_BOOT_PROTOCOL_PARAMETERS Parameters); +EFI_STATUS +XtpInitializeLoaderBlock(IN PLIST_ENTRY MemoryMappings, + IN PVOID *VirtualAddress); + EFI_STATUS XtpLoadModule(IN PEFI_FILE_HANDLE BootDir, IN PWCHAR FileName, diff --git a/xtldr/modules/xtos/xtos.c b/xtldr/modules/xtos/xtos.c index cf45e1e..8762c37 100644 --- a/xtldr/modules/xtos/xtos.c +++ b/xtldr/modules/xtos/xtos.c @@ -151,66 +151,6 @@ XtBootSystem(IN PXT_BOOT_PROTOCOL_PARAMETERS Parameters) return XtpBootSequence(BootDir, Parameters); } -EFI_STATUS -XtpInitializeLoaderBlock(IN PLIST_ENTRY MemoryMappings, IN PVOID *VirtualAddress) -{ - PKERNEL_INITIALIZATION_BLOCK LoaderBlock; - EFI_PHYSICAL_ADDRESS Address; - PVOID RuntimeServices; - EFI_STATUS Status; - UINT BlockPages; - - /* Calculate number of pages needed for initialization block */ - BlockPages = EFI_SIZE_TO_PAGES(sizeof(KERNEL_INITIALIZATION_BLOCK)); - - /* Allocate memory for kernel initialization block */ - Status = XtLdrProtocol->AllocatePages(BlockPages, &Address); - if(Status != STATUS_EFI_SUCCESS) - { - /* Memory allocation failure */ - return Status; - } - - /* Initialize and zero-fill kernel initialization block */ - LoaderBlock = (PKERNEL_INITIALIZATION_BLOCK)(UINT_PTR)Address; - RtlZeroMemory(LoaderBlock, sizeof(KERNEL_INITIALIZATION_BLOCK)); - - /* Set basic loader block properties */ - LoaderBlock->Size = sizeof(KERNEL_INITIALIZATION_BLOCK); - LoaderBlock->Version = INITIALIZATION_BLOCK_VERSION; - - /* No kernel stack available now */ - LoaderBlock->KernelStack = (ULONG_PTR)NULL; - - /* Set LoaderInformation block properties */ - LoaderBlock->LoaderInformation.DbgPrint = XtLdrProtocol->DbgPrint; - - /* Attempt to find virtual address of the EFI Runtime Services */ - Status = XtLdrProtocol->GetVirtualAddress(MemoryMappings, &EfiSystemTable->RuntimeServices->Hdr, &RuntimeServices); - if(Status == STATUS_EFI_SUCCESS) - { - /* Set FirmwareInformation block properties */ - LoaderBlock->FirmwareInformation.FirmwareType = SystemFirmwareEfi; - LoaderBlock->FirmwareInformation.EfiFirmware.EfiVersion = EfiSystemTable->Hdr.Revision; - LoaderBlock->FirmwareInformation.EfiFirmware.EfiRuntimeServices = RuntimeServices; - } - else - { - /* Set invalid firmware type to indicate that kernel cannot rely on FirmwareInformation block */ - LoaderBlock->FirmwareInformation.FirmwareType = SystemFirmwareInvalid; - } - - /* Map kernel initialization block */ - XtLdrProtocol->AddVirtualMemoryMapping(MemoryMappings, *VirtualAddress, (PVOID)LoaderBlock, - BlockPages, LoaderSystemBlock); - - /* Calculate next valid virtual address */ - *VirtualAddress += (UINT_PTR)(BlockPages * EFI_PAGE_SIZE); - - /* Return success */ - return STATUS_EFI_SUCCESS; -} - /** * This routine initiates an XTOS boot sequence. * @@ -298,6 +238,67 @@ XtpBootSequence(IN PEFI_FILE_HANDLE BootDir, return STATUS_EFI_SUCCESS; } +EFI_STATUS +XtpInitializeLoaderBlock(IN PLIST_ENTRY MemoryMappings, + IN PVOID *VirtualAddress) +{ + PKERNEL_INITIALIZATION_BLOCK LoaderBlock; + EFI_PHYSICAL_ADDRESS Address; + PVOID RuntimeServices; + EFI_STATUS Status; + UINT BlockPages; + + /* Calculate number of pages needed for initialization block */ + BlockPages = EFI_SIZE_TO_PAGES(sizeof(KERNEL_INITIALIZATION_BLOCK)); + + /* Allocate memory for kernel initialization block */ + Status = XtLdrProtocol->AllocatePages(BlockPages, &Address); + if(Status != STATUS_EFI_SUCCESS) + { + /* Memory allocation failure */ + return Status; + } + + /* Initialize and zero-fill kernel initialization block */ + LoaderBlock = (PKERNEL_INITIALIZATION_BLOCK)(UINT_PTR)Address; + RtlZeroMemory(LoaderBlock, sizeof(KERNEL_INITIALIZATION_BLOCK)); + + /* Set basic loader block properties */ + LoaderBlock->Size = sizeof(KERNEL_INITIALIZATION_BLOCK); + LoaderBlock->Version = INITIALIZATION_BLOCK_VERSION; + + /* No kernel stack available now */ + LoaderBlock->KernelStack = (ULONG_PTR)NULL; + + /* Set LoaderInformation block properties */ + LoaderBlock->LoaderInformation.DbgPrint = XtLdrProtocol->DbgPrint; + + /* Attempt to find virtual address of the EFI Runtime Services */ + Status = XtLdrProtocol->GetVirtualAddress(MemoryMappings, &EfiSystemTable->RuntimeServices->Hdr, &RuntimeServices); + if(Status == STATUS_EFI_SUCCESS) + { + /* Set FirmwareInformation block properties */ + LoaderBlock->FirmwareInformation.FirmwareType = SystemFirmwareEfi; + LoaderBlock->FirmwareInformation.EfiFirmware.EfiVersion = EfiSystemTable->Hdr.Revision; + LoaderBlock->FirmwareInformation.EfiFirmware.EfiRuntimeServices = RuntimeServices; + } + else + { + /* Set invalid firmware type to indicate that kernel cannot rely on FirmwareInformation block */ + LoaderBlock->FirmwareInformation.FirmwareType = SystemFirmwareInvalid; + } + + /* Map kernel initialization block */ + XtLdrProtocol->AddVirtualMemoryMapping(MemoryMappings, *VirtualAddress, (PVOID)LoaderBlock, + BlockPages, LoaderSystemBlock); + + /* Calculate next valid virtual address */ + *VirtualAddress += (UINT_PTR)(BlockPages * EFI_PAGE_SIZE); + + /* Return success */ + return STATUS_EFI_SUCCESS; +} + /** * Loads XTOS PE/COFF module. * diff --git a/xtldr/xtldr.c b/xtldr/xtldr.c index 85d81fc..d89c135 100644 --- a/xtldr/xtldr.c +++ b/xtldr/xtldr.c @@ -263,7 +263,8 @@ BlLoadEfiModules() * * @since XT 1.0 */ -EFI_STATUS BlLoadXtSystem() +EFI_STATUS +BlLoadXtSystem() { EFI_GUID ProtocolGuid = XT_XTOS_BOOT_PROTOCOL_GUID; XT_BOOT_PROTOCOL_PARAMETERS BootParameters;