summaryrefslogtreecommitdiffhomepage
path: root/dev/boot
diff options
context:
space:
mode:
Diffstat (limited to 'dev/boot')
-rw-r--r--dev/boot/BootKit/BootKit.h10
-rw-r--r--dev/boot/amd64-desktop.make4
-rw-r--r--dev/boot/modules/SysChk/SysChk.cc6
-rw-r--r--dev/boot/modules/SysChk/amd64-ahci-epm.json11
-rw-r--r--dev/boot/modules/SysChk/amd64-ahci-gpt.json11
-rw-r--r--dev/boot/modules/SysChk/amd64-pio-epm.json11
-rw-r--r--dev/boot/modules/SysChk/amd64-pio-gpt.json21
-rw-r--r--dev/boot/src/BootThread.cc5
-rw-r--r--dev/boot/src/HEL/AMD64/BootEFI.cc48
-rw-r--r--dev/boot/src/New+Delete.cc2
10 files changed, 75 insertions, 54 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.