diff options
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/boot/BootKit/BootKit.h | 10 | ||||
| -rw-r--r-- | dev/boot/amd64-desktop.make | 4 | ||||
| -rw-r--r-- | dev/boot/modules/SysChk/SysChk.cc | 6 | ||||
| -rw-r--r-- | dev/boot/modules/SysChk/amd64-ahci-epm.json | 11 | ||||
| -rw-r--r-- | dev/boot/modules/SysChk/amd64-ahci-gpt.json | 11 | ||||
| -rw-r--r-- | dev/boot/modules/SysChk/amd64-pio-epm.json | 11 | ||||
| -rw-r--r-- | dev/boot/modules/SysChk/amd64-pio-gpt.json | 21 | ||||
| -rw-r--r-- | dev/boot/src/BootThread.cc | 5 | ||||
| -rw-r--r-- | dev/boot/src/HEL/AMD64/BootEFI.cc | 48 | ||||
| -rw-r--r-- | dev/boot/src/New+Delete.cc | 2 | ||||
| -rw-r--r-- | dev/kernel/FirmwareKit/EFI/API.h | 6 |
11 files changed, 75 insertions, 60 deletions
diff --git a/dev/boot/BootKit/BootKit.h b/dev/boot/BootKit/BootKit.h index 2555812f..53e32d11 100644 --- a/dev/boot/BootKit/BootKit.h +++ b/dev/boot/BootKit/BootKit.h @@ -338,7 +338,7 @@ namespace Boot return false; } - NEFS_ROOT_PARTITION_BLOCK part{0}; + NEFS_ROOT_PARTITION_BLOCK part{}; CopyMem(part.Ident, kNeFSIdent, kNeFSIdentLen - 1); CopyMem(part.PartitionName, part_name, StrLen(part_name)); @@ -364,7 +364,7 @@ namespace Boot writer << "BootZ: Sector size: " << part.SectorSize << "\r"; #if defined(BOOTZ_EPM_SUPPORT) - EPM_PART_BLOCK epm_boot{0}; + EPM_PART_BLOCK epm_boot{}; const auto kFsName = "NeFS"; const auto kBlockName = "OS (EPM)"; @@ -394,7 +394,7 @@ namespace Boot writer.Write(L"BootZ: Drive is EPM formatted.\r"); #elif defined(BOOTZ_GPT_SUPPORT) || defined(BOOTZ_VEPM_SUPPORT) - GPT_PARTITION_TABLE gpt_part{0}; + GPT_PARTITION_TABLE gpt_part{}; CopyMem(gpt_part.Signature, reinterpret_cast<VoidPtr>(const_cast<Char*>(kMagicGPT)), StrLen(kMagicGPT)); @@ -436,7 +436,7 @@ namespace Boot #if defined(BOOTZ_VEPM_SUPPORT) const auto kBlockName = "OS (VEPM)"; - GPT_PARTITION_ENTRY gpt_part_entry{0}; + GPT_PARTITION_ENTRY gpt_part_entry{}; gpt_part_entry.StartLBA = kNeFSRootCatalogStartAddress; gpt_part_entry.EndLBA = fDiskDev.GetDiskSize(); @@ -454,7 +454,7 @@ namespace Boot fDiskDev.Leak().mSize = sizeof(GPT_PARTITION_ENTRY); fDiskDev.Write((Char*)&gpt_part_entry, sizeof(GPT_PARTITION_ENTRY)); - EPM_PART_BLOCK epm_boot{0}; + EPM_PART_BLOCK epm_boot{}; const auto kFsName = "NeFS"; diff --git a/dev/boot/amd64-desktop.make b/dev/boot/amd64-desktop.make index 432a00c8..00b37b94 100644 --- a/dev/boot/amd64-desktop.make +++ b/dev/boot/amd64-desktop.make @@ -67,9 +67,9 @@ REM=rm REM_FLAG=-f FLAG_ASM=-f win64 -FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -Wall -Wpedantic -Wextra -mno-red-zone -D__NEOSKRNL__ -D__BOOTZ__ \ +FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -Wall -Wpedantic -Wextra -mno-red-zone -D__NEOSKRNL__ -D__BOOTZ__ -DBOOTZ_VEPM_SUPPORT \ -DEFI_FUNCTION_WRAPPER -I./ -I../kernel $(DISK_DRV) -I../ -c -nostdlib -fno-rtti -fno-exceptions \ - -std=c++20 -DBOOTZ_GPT_SUPPORT -DBOOTZ_EPM_SUPPORT -D__HAVE_NE_APIS__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT -Wl,--disable-reloc-section + -std=c++20 -DBOOTZ_GPT_SUPPORT -D__HAVE_NE_APIS__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT -Wl,--disable-reloc-section BOOTLOADER=bootz.efi KERNEL=krnl.efi diff --git a/dev/boot/modules/SysChk/SysChk.cc b/dev/boot/modules/SysChk/SysChk.cc index 9bdeb38d..16684666 100644 --- a/dev/boot/modules/SysChk/SysChk.cc +++ b/dev/boot/modules/SysChk/SysChk.cc @@ -33,12 +33,10 @@ EXTERN_C Int32 SysChkModuleMain(Kernel::HEL::BootInfoHeader* handover) #if defined(__ATA_PIO__) fw_init_efi((EfiSystemTable*)handover->f_FirmwareCustomTables[1]); - Boot::BootTextWriter writer; - Boot::BDiskFormatFactory<BootDeviceATA> partition_factory; if (partition_factory.IsPartitionValid()) - return kEfiOk; + return kEfiFail; Boot::BDiskFormatFactory<BootDeviceATA>::BFileDescriptor desc{}; @@ -48,8 +46,6 @@ EXTERN_C Int32 SysChkModuleMain(Kernel::HEL::BootInfoHeader* handover) partition_factory.Format(kMachineModel, &desc, 1); - writer.Write(L"BootZ: Partition formatted.\r"); - if (partition_factory.IsPartitionValid()) return kEfiOk; diff --git a/dev/boot/modules/SysChk/amd64-ahci-epm.json b/dev/boot/modules/SysChk/amd64-ahci-epm.json index 5cff74de..1a82cf55 100644 --- a/dev/boot/modules/SysChk/amd64-ahci-epm.json +++ b/dev/boot/modules/SysChk/amd64-ahci-epm.json @@ -2,7 +2,16 @@ "compiler_path": "x86_64-w64-mingw32-g++", "compiler_std": "c++20", "headers_path": ["../", "../../", "../../../kernel", "../../../", "./"], - "sources_path": ["*.cc", "*.S", "../../src/HEL/AMD64/*.cc", "../../src/HEL/AMD64/*.S", "../../src/*.cc"], + "sources_path": [ + "*.cc", + "*.S", + "../../src/HEL/AMD64/BootSATA.cc", + "../../src/HEL/AMD64/BootPlatform.cc", + "../../src/HEL/AMD64/BootAPI.S", + "../../src/BootTextWriter.cc", + "../../src/BootSupport.cc", + "../../src/New+Delete.cc" + ], "output_name": "chk.efi", "compiler_flags": [ "-nostdlib", diff --git a/dev/boot/modules/SysChk/amd64-ahci-gpt.json b/dev/boot/modules/SysChk/amd64-ahci-gpt.json index 6a204a25..cb538eed 100644 --- a/dev/boot/modules/SysChk/amd64-ahci-gpt.json +++ b/dev/boot/modules/SysChk/amd64-ahci-gpt.json @@ -2,7 +2,16 @@ "compiler_path": "x86_64-w64-mingw32-g++", "compiler_std": "c++20", "headers_path": ["../", "../../", "../../../kernel", "../../../", "./"], - "sources_path": ["*.cc", "*.S", "../../src/HEL/AMD64/*.cc", "../../src/HEL/AMD64/*.S", "../../src/*.cc"], + "sources_path": [ + "*.cc", + "*.S", + "../../src/HEL/AMD64/BootSATA.cc", + "../../src/HEL/AMD64/BootPlatform.cc", + "../../src/HEL/AMD64/BootAPI.S", + "../../src/BootTextWriter.cc", + "../../src/BootSupport.cc", + "../../src/New+Delete.cc" + ], "output_name": "chk.efi", "compiler_flags": [ "-nostdlib", diff --git a/dev/boot/modules/SysChk/amd64-pio-epm.json b/dev/boot/modules/SysChk/amd64-pio-epm.json index 3848a611..ccbb7d04 100644 --- a/dev/boot/modules/SysChk/amd64-pio-epm.json +++ b/dev/boot/modules/SysChk/amd64-pio-epm.json @@ -2,7 +2,16 @@ "compiler_path": "x86_64-w64-mingw32-g++", "compiler_std": "c++20", "headers_path": ["../", "../../", "../../../kernel", "../../../", "./"], - "sources_path": ["*.cc", "*.S", "../../src/HEL/AMD64/*.cc", "../../src/HEL/AMD64/*.S", "../../src/*.cc"], + "sources_path": [ + "*.cc", + "*.S", + "../../src/HEL/AMD64/BootATA.cc", + "../../src/HEL/AMD64/BootPlatform.cc", + "../../src/HEL/AMD64/BootAPI.S", + "../../src/BootTextWriter.cc", + "../../src/BootSupport.cc", + "../../src/New+Delete.cc" + ], "output_name": "chk.efi", "compiler_flags": [ "-nostdlib", diff --git a/dev/boot/modules/SysChk/amd64-pio-gpt.json b/dev/boot/modules/SysChk/amd64-pio-gpt.json index 4fe9d986..21c81667 100644 --- a/dev/boot/modules/SysChk/amd64-pio-gpt.json +++ b/dev/boot/modules/SysChk/amd64-pio-gpt.json @@ -1,8 +1,23 @@ { "compiler_path": "x86_64-w64-mingw32-g++", "compiler_std": "c++20", - "headers_path": ["../", "../../", "../../../kernel", "../../../", "./"], - "sources_path": ["*.cc", "*.S", "../../src/HEL/AMD64/*.cc", "../../src/HEL/AMD64/*.S", "../../src/*.cc"], + "headers_path": [ + "../", + "../../", + "../../../kernel", + "../../../", + "./" + ], + "sources_path": [ + "*.cc", + "*.S", + "../../src/HEL/AMD64/BootATA.cc", + "../../src/HEL/AMD64/BootPlatform.cc", + "../../src/HEL/AMD64/BootAPI.S", + "../../src/BootTextWriter.cc", + "../../src/BootSupport.cc", + "../../src/New+Delete.cc" + ], "output_name": "chk.efi", "compiler_flags": [ "-nostdlib", @@ -23,4 +38,4 @@ "kChkVersionLowest=0x0100", "kChkVersion=0x0100" ] -} +}
\ No newline at end of file diff --git a/dev/boot/src/BootThread.cc b/dev/boot/src/BootThread.cc index cf303bec..efbacc32 100644 --- a/dev/boot/src/BootThread.cc +++ b/dev/boot/src/BootThread.cc @@ -194,9 +194,8 @@ namespace Boot writer.Write("BootZ: Stack address: ").Write((UIntPtr)&fStack[mib_cast(16) - 1]).Write("\r"); writer.Write("BootZ: Stack size: ").Write(mib_cast(16)).Write("\r"); - rt_jump_to_address(fStartAddress, fHandover, &fStack[mib_cast(16) - 1]); - - return kEfiOk; + auto ret = rt_jump_to_address(fStartAddress, fHandover, &fStack[mib_cast(16) - 1]); + return ret; } else { diff --git a/dev/boot/src/HEL/AMD64/BootEFI.cc b/dev/boot/src/HEL/AMD64/BootEFI.cc index ae6d4deb..0fc21860 100644 --- a/dev/boot/src/HEL/AMD64/BootEFI.cc +++ b/dev/boot/src/HEL/AMD64/BootEFI.cc @@ -18,13 +18,10 @@ #include <BootKit/BootThread.h> #include <modules/CoreGfx/CoreGfx.h> -#ifndef kExpectedWidth -#define kExpectedWidth (800) -#endif - -#ifndef kExpectedHeight -#define kExpectedHeight (600) -#endif +// Makes the compiler shut up. +#ifndef kMachineModel +#define kMachineModel "OS" +#endif // !kMachineModel /** Graphics related. */ @@ -36,9 +33,6 @@ STATIC EfiGUID kGopGuid; EXTERN_C Void rt_reset_hardware(); -/** Boot Services symbol. */ -EXTERN EfiBootServices* BS; - /** @brief Finds and stores the GOP object. */ @@ -52,22 +46,7 @@ STATIC Bool boot_init_fb() noexcept kGopStride = 4; - for (SizeT i = 0; i < kGop->Mode->MaxMode; ++i) - { - EfiGraphicsOutputProtocolModeInformation* infoPtr = nullptr; - UInt32 sz = 0U; - - kGop->QueryMode(kGop, i, &sz, &infoPtr); - - if (infoPtr->HorizontalResolution == kExpectedWidth && - infoPtr->VerticalResolution == kExpectedHeight) - { - kGop->SetMode(kGop, i); - return Yes; - } - } - - return No; + return Yes; } EfiGUID kEfiGlobalNamespaceVarGUID = { @@ -82,6 +61,12 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, { fw_init_efi(sys_table); ///! Init the EFI library. + ST->ConOut->ClearScreen(sys_table->ConOut); + ST->ConOut->SetAttribute(sys_table->ConOut, kEFIYellow); + + ST->BootServices->SetWatchdogTimer(0, 0, 0, nullptr); + ST->ConOut->EnableCursor(ST->ConOut, false); + HEL::BootInfoHeader* handover_hdr = new HEL::BootInfoHeader(); @@ -93,11 +78,9 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, Boot::BootTextWriter writer; - writer.Write("BootZ: NeKernel Loader.\r"); - if (!boot_init_fb()) { - writer.Write("BootZ: Invalid Framebuffer, can't boot NeKernel.\r"); + writer.Write("BootZ: Invalid Framebuffer, can't boot to NeKernel.\r"); Boot::Stop(); } @@ -164,6 +147,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, Int32 trials = 5 * 10000000; + writer.Write("BootZ: Welcome to BootZ.\r"); writer.Write("BootZ: Allocating sufficent memory, trying 4GB...\r"); while (BS->AllocatePool(EfiLoaderData, handover_hdr->f_BitMapSize, &handover_hdr->f_BitMapStart) != kEfiOk) @@ -206,7 +190,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, if (reader_syschk.Blob()) { syschk_thread = new Boot::BootThread(reader_syschk.Blob()); - syschk_thread->SetName("BootZ: System Check"); + syschk_thread->SetName("BootZ\\System Check"); syschk_thread->Start(handover_hdr, NO); } @@ -274,7 +258,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, auto kernel_thread = Boot::BootThread(reader_kernel.Blob()); - kernel_thread.SetName("BootZ: NeKernel"); + kernel_thread.SetName("BootZ\\NeKernel"); handover_hdr->f_KernelImage = reader_kernel.Blob(); handover_hdr->f_KernelSz = reader_kernel.Size(); @@ -289,7 +273,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, return kEfiFail; auto netboot_thread = Boot::BootThread(reader_netboot.Blob()); - netboot_thread.SetName("BootZ: BootNet"); + netboot_thread.SetName("BootZ\\BootNet"); return netboot_thread.Start(handover_hdr, NO); } diff --git a/dev/boot/src/New+Delete.cc b/dev/boot/src/New+Delete.cc index 61698510..387ceaa0 100644 --- a/dev/boot/src/New+Delete.cc +++ b/dev/boot/src/New+Delete.cc @@ -7,9 +7,9 @@ #include <BootKit/Platform.h> #include <BootKit/Protocol.h> #include <BootKit/BootKit.h> +#include <FirmwareKit/EFI/API.h> #ifdef __BOOTZ_STANDALONE__ -EXTERN EfiBootServices* BS; /// @brief Allocates a new object. /// @param sz the size. diff --git a/dev/kernel/FirmwareKit/EFI/API.h b/dev/kernel/FirmwareKit/EFI/API.h index f3b03bb5..87ab697b 100644 --- a/dev/kernel/FirmwareKit/EFI/API.h +++ b/dev/kernel/FirmwareKit/EFI/API.h @@ -90,12 +90,6 @@ inline void fw_init_efi(EfiSystemTable* SystemTable) noexcept ST = SystemTable; BS = ST->BootServices; - - ST->ConOut->ClearScreen(SystemTable->ConOut); - ST->ConOut->SetAttribute(SystemTable->ConOut, kEFIYellow); - - ST->BootServices->SetWatchdogTimer(0, 0, 0, nullptr); - ST->ConOut->EnableCursor(ST->ConOut, false); } #ifdef __BOOTZ__ |
