summaryrefslogtreecommitdiffhomepage
path: root/dev/BootLoader
diff options
context:
space:
mode:
Diffstat (limited to 'dev/BootLoader')
-rw-r--r--dev/BootLoader/BootKit/BootKit.h1
-rw-r--r--dev/BootLoader/BootKit/Thread.h2
-rw-r--r--dev/BootLoader/Modules/NetBoot/Module.cc2
-rw-r--r--dev/BootLoader/Modules/NetBoot/build.json2
-rw-r--r--dev/BootLoader/Modules/SysChk/Module.cc33
-rw-r--r--dev/BootLoader/src/BootThread.cc22
-rw-r--r--dev/BootLoader/src/HEL/AMD64/BootMain.cc65
7 files changed, 75 insertions, 52 deletions
diff --git a/dev/BootLoader/BootKit/BootKit.h b/dev/BootLoader/BootKit/BootKit.h
index 90d6fae9..2e0099f2 100644
--- a/dev/BootLoader/BootKit/BootKit.h
+++ b/dev/BootLoader/BootKit/BootKit.h
@@ -15,7 +15,6 @@
#include <FirmwareKit/EPM.h>
#include <CompilerKit/Version.h>
#include <Modules/GfxMgr/FBMgr.h>
-#include <Modules/GfxMgr/AppearanceMgr.h>
#include <BootKit/Rsrc/zka_disk.rsrc>
#include <BootKit/Rsrc/zka_no_disk.rsrc>
#include <BootKit/Rsrc/zka_has_disk.rsrc>
diff --git a/dev/BootLoader/BootKit/Thread.h b/dev/BootLoader/BootKit/Thread.h
index 06fd84a0..42991d17 100644
--- a/dev/BootLoader/BootKit/Thread.h
+++ b/dev/BootLoader/BootKit/Thread.h
@@ -29,7 +29,7 @@ namespace Boot
BThread& operator=(const BThread&) = default;
BThread(const BThread&) = default;
- void Start(HEL::BootInfoHeader* handover, BOOL is_own_stack);
+ Int32 Start(HEL::BootInfoHeader* handover, BOOL is_own_stack);
void SetName(const char* name);
const char* GetName();
bool IsValid();
diff --git a/dev/BootLoader/Modules/NetBoot/Module.cc b/dev/BootLoader/Modules/NetBoot/Module.cc
index 1b4a4bb4..6277da70 100644
--- a/dev/BootLoader/Modules/NetBoot/Module.cc
+++ b/dev/BootLoader/Modules/NetBoot/Module.cc
@@ -10,7 +10,7 @@
#include <NetBoot.h>
#include <BootKit/BootKit.h>
-EXTERN_C Int32 main(Kernel::HEL::BootInfoHeader* Handover)
+EXTERN_C Int32 ModuleMain(Kernel::HEL::BootInfoHeader* Handover)
{
return kEfiOk;
}
diff --git a/dev/BootLoader/Modules/NetBoot/build.json b/dev/BootLoader/Modules/NetBoot/build.json
index 3844f9cb..9df27b3c 100644
--- a/dev/BootLoader/Modules/NetBoot/build.json
+++ b/dev/BootLoader/Modules/NetBoot/build.json
@@ -11,7 +11,7 @@
"-fPIC",
"-fno-rtti",
"-fno-exceptions",
- "-Wl,--subsystem=17,--image-base,0x1000000"
+ "-Wl,--subsystem=17,--image-base,0x10000000,-e,ModuleMain"
],
"cpp_macros": [
"__MINOSKRNL__",
diff --git a/dev/BootLoader/Modules/SysChk/Module.cc b/dev/BootLoader/Modules/SysChk/Module.cc
index b0808fde..28b89859 100644
--- a/dev/BootLoader/Modules/SysChk/Module.cc
+++ b/dev/BootLoader/Modules/SysChk/Module.cc
@@ -8,15 +8,40 @@
*/
#include <BootKit/BootKit.h>
+#include <Modules/GfxMgr/FBMgr.h>
+#include <Modules/GfxMgr/TextMgr.h>
+#include <FirmwareKit/EFI.h>
+#include <FirmwareKit/EFI/API.h>
+#include <FirmwareKit/Handover.h>
+#include <KernelKit/MSDOS.h>
+#include <KernelKit/PE.h>
+#include <KernelKit/PEF.h>
+#include <NewKit/Macros.h>
+#include <NewKit/Ref.h>
+#include <BootKit/Thread.h>
+#include <Modules/GfxMgr/FBMgr.h>
EXTERN_C Int32 ModuleMain(Kernel::HEL::BootInfoHeader* Handover)
{
EfiSystemTable* system_table = (EfiSystemTable*)Handover->f_FirmwareCustomTables[1];
- system_table->ConOut->ClearScreen(system_table->ConOut);
+ EfiInputKey key{};
- system_table->ConOut->OutputString(system_table->ConOut, L"SYSCHK: CHECKING FOR VALID NEFS OR HPFS PARTITIONS...\r\n");
- system_table->ConOut->OutputString(system_table->ConOut, L"SYSCHK: GOOD TO GO!\r\n");
+ system_table->ConIn->ReadKeyStroke(system_table->ConIn, &key);
- return kEfiOk;
+ if (key.UnicodeChar == 'F' ||
+ key.UnicodeChar == 'f')
+ {
+ UI::ui_draw_background();
+
+ fb_init();
+
+ FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2);
+
+ fb_fini();
+
+ return kEfiOk;
+ }
+
+ return kEfiFail;
}
diff --git a/dev/BootLoader/src/BootThread.cc b/dev/BootLoader/src/BootThread.cc
index 6d78d0d1..ae494a15 100644
--- a/dev/BootLoader/src/BootThread.cc
+++ b/dev/BootLoader/src/BootThread.cc
@@ -122,7 +122,7 @@ namespace Boot
#ifdef __ZKA_AMD64__
if (handover_struc->HandoverArch != HEL::kArchAMD64)
{
- fb_render_string("BootZ: NOT AN HANDOVER IMAGE, BAD ARCHITECTURE...", 40, 10, RGB(0xFF, 0xFF, 0xFF));
+ fb_render_string("BootZ: Not an handover header, bad CPU...", 40, 10, RGB(0xFF, 0xFF, 0xFF));
::EFI::Stop();
}
#endif
@@ -130,11 +130,11 @@ namespace Boot
#ifdef __ZKA_ARM64__
if (handover_struc->HandoverArch != HEL::kArchARM64)
{
- fb_render_string("BootZ: NOT AN HANDOVER IMAGE, BAD ARCHITECTURE...", 40, 10, RGB(0xFF, 0xFF, 0xFF));
+ fb_render_string("BootZ: Not an handover header, bad CPU...", 40, 10, RGB(0xFF, 0xFF, 0xFF));
::EFI::Stop();
}
#endif
- fb_render_string("BootZ: NOT AN HANDOVER IMAGE...", 40, 10, RGB(0xFF, 0xFF, 0xFF));
+ fb_render_string("BootZ: Not an handover header...", 40, 10, RGB(0xFF, 0xFF, 0xFF));
::EFI::Stop();
}
@@ -160,18 +160,20 @@ namespace Boot
}
else
{
- writer.Write("BootZ: INVALID EXECUTABLE.\r");
+ writer.Write("BootZ: Invalid Executable.\r");
}
fStack = new UInt8[mib_cast(8)];
}
/// @note handover header has to be valid!
- Void BThread::Start(HEL::BootInfoHeader* handover, Bool own_stack)
+ Int32 BThread::Start(HEL::BootInfoHeader* handover, Bool own_stack)
{
- HEL::HandoverProc err_fn = [](HEL::BootInfoHeader* rcx) -> void {
- fb_render_string("BootZ: INVALID IMAGE! ABORTING...", 50, 10, RGB(0xFF, 0xFF, 0xFF));
+ HEL::HandoverProc err_fn = [](HEL::BootInfoHeader* rcx) -> Int32 {
+ fb_render_string("BootZ: Invalid Boot Image...", 50, 10, RGB(0xFF, 0xFF, 0xFF));
::EFI::Stop();
+
+ return NO;
};
if (!fStartAddress)
@@ -182,12 +184,16 @@ namespace Boot
fHandover = handover;
if (own_stack)
+ {
rt_jump_to_address(fStartAddress, fHandover, &fStack[mib_cast(8) - 1]);
+ }
else
{
delete[] fStack;
- reinterpret_cast<HEL::HandoverProc>(fStartAddress)(fHandover);
+ return reinterpret_cast<HEL::HandoverProc>(fStartAddress)(fHandover);
}
+
+ return NO;
}
const Char* BThread::GetName()
diff --git a/dev/BootLoader/src/HEL/AMD64/BootMain.cc b/dev/BootLoader/src/HEL/AMD64/BootMain.cc
index dd7528d8..023976ae 100644
--- a/dev/BootLoader/src/HEL/AMD64/BootMain.cc
+++ b/dev/BootLoader/src/HEL/AMD64/BootMain.cc
@@ -157,40 +157,12 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
handover_hdr->f_HardwareTables.f_MultiProcessingEnabled = cnt_enabled > 1;
// Fill handover header now.
- Boot::BDiskFormatFactory<BootDeviceATA> partition_factory;
-
// ---------------------------------------------------- //
// The following checks for an exisiting partition
// inside the disk, if it doesn't have one,
// format the disk.
// ---------------------------------------------------- //
-#ifdef ZKA_AUTO_FORMAT
- if (!partition_factory.IsPartitionValid())
- {
- UI::ui_draw_background();
-
- FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2);
-
- fb_fini();
-
- Boot::BDiskFormatFactory<BootDeviceATA>::BFileDescriptor root{};
-
- root.fFileName[0] = kNeFSRoot[0];
- root.fFileName[1] = 0;
-
- root.fKind = kNeFSCatalogKindDir;
-
- partition_factory.Format("FileSystem (A:)\0", &root, 1);
-
- UI::ui_draw_background();
-
- FBDrawBitMapInRegion(zka_has_disk, ZKA_HAS_DISK_HEIGHT, ZKA_HAS_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_HAS_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_HAS_DISK_HEIGHT) / 2);
-
- fb_fini();
- }
-#endif // ZKA_AUTO_FORMAT
-
BS->GetMemoryMap(&size_struct_ptr, struct_ptr, &map_key, &sz_desc, &rev_desc);
struct_ptr = new EfiMemoryDescriptor[sz_desc];
@@ -243,10 +215,31 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
if (reader_syschk.Blob())
{
syschk_thread = new Boot::BThread(reader_syschk.Blob());
- syschk_thread->SetName("BootZ: System Check");
+ syschk_thread->SetName("BootZ: System Recovery Check");
}
- syschk_thread->Start(handover_hdr, NO);
+ Boot::BDiskFormatFactory<BootDeviceATA> partition_factory;
+
+ if (partition_factory.IsPartitionValid() == false &&
+ syschk_thread->Start(handover_hdr, NO) == kEfiOk)
+ {
+ fb_init();
+
+ Boot::BDiskFormatFactory<BootDeviceATA>::BFileDescriptor root{};
+
+ root.fFileName[0] = kNeFSRoot[0];
+ root.fFileName[1] = 0;
+
+ root.fKind = kNeFSCatalogKindDir;
+
+ partition_factory.Format("FileSystem (A:) <System_Build\"" __DATE__ "\">", &root, 1);
+
+ UI::ui_draw_background();
+
+ FBDrawBitMapInRegion(zka_has_disk, ZKA_HAS_DISK_HEIGHT, ZKA_HAS_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_HAS_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_HAS_DISK_HEIGHT) / 2);
+
+ fb_fini();
+ }
// ------------------------------------------ //
// null these fields, to avoid being reused later.
@@ -289,7 +282,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
else
{
fb_init();
- FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2);
+ FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2);
EFI::Stop();
}
@@ -300,16 +293,16 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
if (ttf_font.Blob())
{
- handover_hdr->f_KernelImage = reader_kernel.Blob();
- handover_hdr->f_KernelSz = reader_kernel.Size();
- handover_hdr->f_FontImage = ttf_font.Blob();
- handover_hdr->f_FontSz = ttf_font.Size();
+ handover_hdr->f_KernelImage = reader_kernel.Blob();
+ handover_hdr->f_KernelSz = reader_kernel.Size();
+ handover_hdr->f_FontImage = ttf_font.Blob();
+ handover_hdr->f_FontSz = ttf_font.Size();
}
else
{
fb_init();
FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2);
-
+
EFI::Stop();
}